如何使用expdp导出Oracle中的用户及其角色和系统权限?

pu82cl6c  于 2023-08-03  发布在  Oracle
关注(0)|答案(3)|浏览(345)

我正在尝试导出Oracle中的模式/用户及其角色和系统权限。我不想导出任何数据或表。我尝试使用以下命令导出用户。

expdp system/system@gisdblocal include=user DIRECTORY = TestBack  
logfile=test12.log DUMPFILE=test12.dmp SCHEMAS=test_replication

字符串
当我在其他数据库或同一数据库中导入不同的名称时,即

impdp system/system@gisdblocal DIRECTORY = TestBack  DUMPFILE = test12.dmp   
SCHEMAS = test_replication REMAP_SCHEMA = 
test_replication:test_replication_copy


用户或模式已创建,但尚未授予其任何角色或系统权限。
我这样做是因为我使用不具有所需权限DATAPUMP_IMP_FULL_DATABASEDATAPUMP_EXP_FULL_DATABASE的用户创建了架构的备份。当我在另一个数据库中还原该备份时,它说用户不存在。因此,我想先创建一个具有相同权限的用户,然后恢复备份。

kqhtkvqz

kqhtkvqz1#

正在使用SQL...

SELECT dbms_metadata.get_ddl('USER', :name)
  FROM dual
UNION ALL
SELECT dbms_metadata.get_granted_ddl('ROLE_GRANT', grantee)
  FROM dba_role_privs
 WHERE grantee = :name
   AND ROWNUM = 1
UNION ALL
SELECT dbms_metadata.get_granted_ddl('DEFAULT_ROLE', grantee)
  FROM dba_role_privs
 WHERE grantee = :name
   AND ROWNUM = 1
UNION ALL
SELECT dbms_metadata.get_granted_ddl('SYSTEM_GRANT', grantee)
  FROM dba_sys_privs          sp,
       system_privilege_map   spm
 WHERE sp.grantee = :name
   AND sp.privilege = spm.name
   AND spm.property <> 1
   AND ROWNUM = 1
UNION ALL
SELECT dbms_metadata.get_granted_ddl('OBJECT_GRANT', grantee)
  FROM dba_tab_privs
 WHERE grantee = :name
   AND ROWNUM = 1
UNION ALL
SELECT dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA', username)
  FROM dba_ts_quotas
 WHERE username = :name
   AND ROWNUM = 1

字符串
:name是...要重新创建的USER的绑定变量。

wgmfuz8q

wgmfuz8q2#

我发现dba_tab_privs中有一些用户权限,但在上面的SQL结果中没有。
参数OBJECT_COUNT的默认值为10,000。
reset object_count=>3000000获取所有行。

set longchunksize 3000  
set long 2000000000   
set lines 1000 
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT',GRANTEE, object_count=>3000000)
FROM dba_tab_privs;

字符串

wn9m85ua

wn9m85ua3#

我一般使用下面的,(替换XXXXX与您的用户名)
第一个月
SELECT DBMS_METADATA.GET_DDL('USER',username) from DBA_USERS where username='XXXXX';
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT',grantee) from DBA_SYS_PRIVS where grantee='XXXXX';
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT',grantee) from DBA_ROLE_PRIVS where grantee='XXXXX';
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT',grantee) from DBA_TAB_PRIVS where grantee='XXXXX';
希望对你有帮助!!

相关问题