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

标签 oracle impdp expdp oracle-dump

我正在尝试使用其角色和系统权限在 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_DATABASE DATAPUMP_EXP_FULL_DATABASE .当我在另一个数据库中恢复该备份时,它说用户不存在。因此,我正在考虑先创建一个具有相同权限的用户,然后再恢复备份。

最佳答案

使用 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 的绑定(bind)变量。

关于oracle - 如何使用 expdp 导出 Oracle 中的用户及其角色和系统权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991488/

相关文章:

oracle - expdp 命令在 Ubuntu 服务器上为 Oracle 数据库提供错误

oracle - expdp会删除Oracle中的数据吗?

oracle - 使用 expdp 和 impdp 迁移 Oracle 数据库

sql - Oracle中的自增(删除后调整ID顺序)

oracle - 如何编写PL/SQL函数具有与最大函数相似的参数

java - 与 Oracle DB 连接时网络适配器无法建立连接

oracle - 在Oracle中的impdp。为什么不创建用户?

docker - 配置Dockerfile在容器创建时使用impdp命令

oracle - 使用 Oracle-Linux expdp 到 windows 网络驱动器

sql - 选择每个人的最新记录