Hi,
I'm trying to generate a user's DDL (and grants, etc.) but remapping it to a new username.
I must be missing something about DBMS_METADATA because it's not working.
Here is what I try :
[11.2] System @ My11g > !cat getUserDDL.sql
set pages 0 lines 140 trimspool on trimout on tab off echo off verify off feed off timing off long 300000
begin
DBMS_METADATA.SET_TRANSFORM_PARAM (
transform_handle => DBMS_METADATA.SESSION_TRANSFORM,
name => 'SQLTERMINATOR',
value => true);
--
DBMS_METADATA.SET_REMAP_PARAM (
transform_handle => DBMS_METADATA.SESSION_TRANSFORM,
name => 'REMAP_SCHEMA',
old_value => upper('&&O_USR.'),
new_value => upper('&&N_USR.'),
object_type => null);
end;
/
spool ddl_&&O_USR..sql
SELECT dbms_metadata.get_ddl('USER',upper('&&O_USR.')) FROM dual;
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT',upper('&&O_USR.')) from dual where exists (select null from dba_role_privs where grantee=upper('&&O_USR.'));
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT',upper('&&O_USR.')) from dual where exists (select null from dba_tab_privs where grantee=upper('&&O_USR.'));
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT',upper('&&O_USR.')) from dual where exists (select null from dba_sys_privs where grantee=upper('&&O_USR.'));
spool off
undefine O_USR
undefine N_USR
[11.2] System @ My11g > @getUserDDL
Enter value for o_usr: SCOTT
Enter value for n_usr: NEW_USER_TO_BE_CREATED
CREATE USER "SCOTT" IDENTIFIED BY VALUES 'S:34F39146284FF9952192FE9CC5BE14BD8
F3E93C374211C64DE02105126BF;F894844C34402B67'
DEFAULT TABLESPACE "MYTBSCOMP"
TEMPORARY TABLESPACE "TEMP";
GRANT "CONNECT" TO "SCOTT";
GRANT "RESOURCE" TO "SCOTT";
GRANT "PLUSTRACE" TO "SCOTT";
GRANT EXECUTE ON "SYS"."DBMS_SESSION" TO "SCOTT";
GRANT EXECUTE ON "SYS"."DBMS_LOCK" TO "SCOTT";
GRANT EXECUTE ON "SYS"."DBMS_ERRLOG" TO "SCOTT";
GRANT EXECUTE ON "SYS"."DBMS_CRYPTO" TO "SCOTT";
GRANT READ, WRITE ON DIRECTORY "FOLDER1" TO "SCOTT";
GRANT READ, WRITE ON DIRECTORY "FOLDER2" TO "SCOTT";
GRANT READ, WRITE ON DIRECTORY "FOLDER3" TO "SCOTT";
GRANT EXECUTE ON "SYS"."TRACEME" TO "SCOTT";
GRANT EXECUTE ON "SYS"."TRACEMEOFF" TO "SCOTT";
GRANT EXECUTE ON "SYS"."REMOVE_FLARCH" TO "SCOTT";
GRANT EXECUTE ON "SYSTEM"."REMOVE_FLARCH" TO "SCOTT";
GRANT READ, WRITE ON DIRECTORY "SCOTTDIR" TO "SCOTT";
GRANT READ, WRITE ON DIRECTORY "REMAP_TEST_DIR" TO "SCOTT";
GRANT CREATE CUBE TO "SCOTT";
GRANT CREATE JOB TO "SCOTT";
GRANT SELECT ANY DICTIONARY TO "SCOTT";
GRANT CREATE ANY CONTEXT TO "SCOTT";
GRANT CREATE MATERIALIZED VIEW TO "SCOTT";
GRANT CREATE DATABASE LINK TO "SCOTT";
GRANT CREATE VIEW TO "SCOTT";
GRANT CREATE SYNONYM TO "SCOTT";
GRANT UNLIMITED TABLESPACE TO "SCOTT";
I was expecting the every "SCOTT" to be replaced by "NEW_USER_TO_BE_CREATED".
Can REMAP_SCHEMA be used to "clone" a user changing only its name ?