Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

GET_DDL('USER',...) of userA remapped to userB

Nicosa-OracleAug 28 2012 — edited Dec 19 2012
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 ?
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jan 16 2013
Added on Aug 28 2012
4 comments
1,436 views