← 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 ONusersddldbms_metadata