← Users & Privileges
Oracle · Users & Privileges

How to get the full DDL for a user in Oracle

Extract the CREATE USER statement plus tablespace quotas, role grants, system privileges, object privileges, default role, and profile for a given user using DBMS_METADATA.

Tested on11g12c18c19c21c23ai26ai

Regenerate everything you would need to recreate a user on another database: the CREATE USER statement, quotas, granted roles, system privileges, object privileges, default role, and the profile. Prompts for the username.

SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON
COLUMN ddl FORMAT a1000

BEGIN
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY',        TRUE);
END;
/

ACCEPT p_username CHAR PROMPT 'Username: '

VARIABLE v_username VARCHAR2(30)
EXEC :v_username := UPPER('&&p_username');

SELECT DBMS_METADATA.GET_DDL('USER', u.username) AS ddl
FROM   dba_users u
WHERE  u.username = :v_username
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('TABLESPACE_QUOTA', tq.username)
FROM   dba_ts_quotas tq
WHERE  tq.username = :v_username
AND    ROWNUM      = 1
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', rp.grantee)
FROM   dba_role_privs rp
WHERE  rp.grantee = :v_username
AND    ROWNUM     = 1
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', sp.grantee)
FROM   dba_sys_privs sp
WHERE  sp.grantee = :v_username
AND    ROWNUM     = 1
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', tp.grantee)
FROM   dba_tab_privs tp
WHERE  tp.grantee = :v_username
AND    ROWNUM     = 1
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('DEFAULT_ROLE', rp.grantee)
FROM   dba_role_privs rp
WHERE  rp.grantee      = :v_username
AND    rp.default_role = 'YES'
AND    ROWNUM          = 1
UNION ALL
SELECT DBMS_METADATA.GET_DDL('PROFILE', u.profile)
FROM   dba_users u
WHERE  u.username = :v_username
AND    u.profile  <> 'DEFAULT'
/

SET LINESIZE 80 PAGESIZE 14 FEEDBACK ON TRIMSPOOL ON VERIFY ON
usersddldbms_metadata