*** Create_Grants.sql
DEFINE EOwner='&1' SET echo off feed off pages 0 verify off SET lines 130 SPOOL Sqls/Create_Grants_RBPONL_&EOwner..sql SELECT 'Grant ' || DECODE (object_type, 'TABLE', 'select,insert,delete,update', 'SEQUENCE', 'select', 'VIEW', 'select,insert,delete,update', 'execute' ) || ' on ' || UPPER ('&EOwner') || '.' || object_name || ' to &EOwner._USER;' FROM dba_objects WHERE owner = UPPER ('&EOwner') AND object_type IN ('TABLE', 'SEQUENCE', 'VIEW', 'PACKAGE', 'PROCEDURE', 'FUNCTION', 'TYPE' ); SPOOL off exit;
*** Create_Synonyms.sql
DEFINE EOwner='&1' SET echo off feed off pages 0 verify off SET lines 200 SPOOL Sqls/Create_Synonyms_RBPONL_&EOwner..sql SELECT 'Drop synonym '||d1.owner||'.' || synonym_name || ';' FROM dba_synonyms d1, ( SELECT DISTINCT grantee FROM dba_role_privs WHERE granted_role IN (upper('&EOwner._user'),upper('&EOwner._read')) AND grantee NOT IN ('SYS') ) d2 WHERE d1.table_owner=UPPER ('&EOwner') AND d1.owner=d2.grantee AND (d1.table_owner, d1.table_name) not in ( SELECT owner, object_name from dba_objects WHERE object_type IN ('FUNCTION', 'PACKAGE BODY', 'PROCEDURE', 'SEQUENCE', 'TABLE', 'TYPE', 'VIEW') AND owner = UPPER ('&EOwner')) UNION ALL SELECT 'Create synonym '||d2.grantee||'.' || d1.object_name || ' for &EOwner..' || d1.object_name || ';' FROM dba_objects d1, ( SELECT DISTINCT grantee FROM dba_role_privs WHERE granted_role IN (upper('&EOwner._user'),upper('&EOwner._read')) AND grantee NOT IN ('SYS') ) d2 WHERE d1.object_type IN ('FUNCTION', 'PACKAGE BODY', 'PROCEDURE', 'SEQUENCE', 'TABLE', 'TYPE', 'VIEW') AND d1.owner = UPPER ('&EOwner') AND (d2.grantee,d1.object_name) not in ( SELECT owner, synonym_name from dba_synonyms WHERE table_owner=UPPER ('&EOwner') ) ; SPOOL off REM **************************************** END OF FILE ************************************************ exit;
*** Run_Grants.sql
DEFINE EOwner='&1' SET echo off feed off pages 0 verify off SET lines 130 SET feed on echo on SPOOL Logs/Create_Grants_RBPONL_&EOwner..log START Sqls/Create_Grants_RBPONL_&EOwner..sql SPOOL off exit;
*** Run_Synonyms.sql
DEFINE EAppUser='&1' SET echo off feed off pages 0 verify off SET lines 200 SET echo on feed on SPOOL Logs/Create_Synonyms_RBPONL_&EAppUser..log START Sqls/Create_Synonyms_RBPONL_&EAppUser..sql SPOOL off REM **************************************** END OF FILE ************************************************ exit;
调用程序:
cd %~dp0 set ORACLE_HOME=C:\ORACLE\ORACLE_1120\product\11.2.0\client_1 set SCHEMA_NAME=schema_name set PASSWORD=password set DB_NAME=db_name %ORACLE_HOME%/bin/sqlplus %SCHEMA_NAME%/%PASSWORD%@%DB_NAME% @goldstack/Create_Grants.sql %SCHEMA_NAME% %ORACLE_HOME%/bin/sqlplus %SCHEMA_NAME%/%PASSWORD%@%DB_NAME% @goldstack/Run_Grants.sql %SCHEMA_NAME% %ORACLE_HOME%/bin/sqlplus %SCHEMA_NAME%/%PASSWORD%@%DB_NAME% @goldstack/Create_Synonyms.sql %SCHEMA_NAME% findstr "APPUSER" Sqls\Create_Synonyms_RBPONL_%SCHEMA_NAME%.sql > Sqls\Create_Synonyms_RBPONL_%SCHEMA_NAME%_APPUSER.sql %ORACLE_HOME%/bin/sqlplus %SCHEMA_NAME%_APPUSER/%PASSWORD%@%DB_NAME% @goldstack/Run_Synonyms.sql %SCHEMA_NAME%_APPUSER