oracle - 如何使用 expdp 导出 oracle 未确定的模式
问题描述
我想导出 Oracle 数据库,但不完整且未确定模式;例如他们的名字喜欢的'IAS%'
模式或模式名称喜欢'YS%'
我写了这个命令:
Expdp admin/admin@orcl schemas like 'IAS%' file=my_data.dmp directory=exp_dir
但我面临错误:
无效的位置参数值“喜欢”
解决方案
您将无法使用该命令运行导出。数据泵导出实用程序 (EXPDP) 不使用常规SQL
. 您不能SQL
在子句中使用速记命令 - 子句必须根据 Oracle 文档定义。根据文档,EXPDP 模式子句的示例如下所示:
expdp hr DIRECTORY=dpump_dir1 DUMPFILE=expdat.dmp SCHEMAS=hr,sh,oe
它们将模式列为逗号分隔值,您必须执行类似的操作才能执行导出。您可以创建一个以逗号分隔格式返回所有这些模式的查询,而不是尝试在命令本身中使用查询,然后简单地将该列表复制并粘贴到命令中。
要获取该列表,您可以尝试运行以下查询:
select listagg(username,', ') within group(order by username) csv
from all_users
where username like 'IAS%';
此查询使用listagg
函数。如果您使用的 Oracle 版本不支持listagg
,您可以使用以下查询来完成同样的事情。我在一个单独的StackOverflow 问题上找到了这个查询,但它应该可以正常工作:
SELECT SUBSTR (SYS_CONNECT_BY_PATH (username , ','), 2) csv
FROM (SELECT username , ROW_NUMBER () OVER (ORDER BY username ) rn,
COUNT (*) OVER () cnt
FROM all_users where username like 'IAS%')
WHERE rn = cnt
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1;
无论您使用哪种查询,您现在都将拥有以字符串“IAS”开头的逗号分隔模式列表。对于此示例,假设列表看起来像IAS_1, IAS_2, IAS_3
等。然后您的命令将从:
Expdp admin/admin@orcl schemas like 'IAS%' file=my_data.dmp directory=exp_dir
更像是:
Expdp admin/admin@orcl schemas=IAS_1,IAS_2,IAS_3 file=my_data.dmp directory=exp_dir
如果经常在此数据库中创建和删除模式,您可以运行查询以更新受影响的模式列表并手动复制和粘贴新列表。如果这是经常发生的事情,您还可以创建一个动态 SQL 脚本来生成和执行您的 EXPDP 命令。
希望这可以帮助!
数据泵文档:https ://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm#SUTIL200
关于 listagg 函数的文档: https ://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm#SQLRF30030
推荐阅读
- python - 如何删除数组打印并仅获取值
- electron - 电子:预加载脚本未在 about:blank iframes 中执行
- javascript - 如何从 JavaScript 中的其他方法/函数获取值
- ms-access - MS Access 使用带有组合框的 Macro Builder 中的 ApplyFilter 显示输入参数框
- javascript - Textarea动态高度调整大小滚动问题
- javascript - 如何使用 ng2-pdf-viewer 和 cdk 拖动将元素拖动到 pdf 并粘贴元素?
- aem - 无法将图标添加到 aem 中的新自定义 RTE 插件
- python - 从 Tkinter 保存后无法打开 Excel 文件
- kendo-ui - 有没有办法在 Kendo Grid 中像这样编辑单个单元格?
- regex - Splunk rex 表达式以删除 json 文件中存在的逗号