暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Export/Import DataPump按自定义条件query导出数据报错的处理办法

原创 徐sir 2024-12-10
556

今天遇到一个客户找我处理一个小问题,主要是按条件导出数据表报错,这里记录一下如何处理的。

expdp 直接带查询条件语句可能出现的情况

直接在导出命令里写QUERY=<查询SQL>来按条件导出数据表可能会报这些错误

--错误1
LRM-00101: unknown parameter name 'empno'
--错误2
ORA-39001: invalid argument value
ORA-39035: Data filter SUBQUERY has already been specified
--错误3
ORA-31693: Table data object "SCOTT"."DEPT" failed to load/unload and is being skipped due to error:
ORA-00933: SQL command not properly ended
--错误4
LRM-00111: no closing quote for value ''
EXP-19: failed to process parameters, type 'EXP HELP=Y' for help
EXP-0: Export terminated unsuccessfully
--错误5
ORA-31693: Table data object "SCOTT"."DEPT" failed to load/unload and is being skipped due to error:
ORA-06502: PL/SQL: numeric or value error
ORA-31605: the following was returned from LpxXSLSetTextVar in routine kuxslSetParam:
LPX-314: an internal failure occurred
--错误6
...
Processing object type TABLE_EXPORT/TABLE/TABLE
ORA-31693: Table data object "<SCHEMA_NAME>"."<TABLE_NAME>" failed to load/unload and is being skipped due
to error:
ORA-00911: invalid character

大部分的原因为是因为涉及到特殊字符需要转义,如果没有加转义符号\可能就会报错,但是万一是个复杂SQL还要到处去转义一下比较麻烦。

解决办法

把相关的参数写到配置文件里,expdp直接调用文件即可。

比如我要导出某张表里指定时间内的数据,并且每个文件30G大小,示例如下:

oracle用户在当前目录创建文件 query.par,内容如下:

DIRECTORY=DATA_PUMP_DIR
DUMPFILE=2024_%U
LOGFILE=2024.log
filesize=30000M
tables=TABLE_01
QUERY=TABLE_01:"where to_char(time,'YYYY-MM-DD hh:mi')>='2024-01-01 00:00'and to_char(time,'YYYY-MM-DD hh:mi')<='2024-12-31 23:59'"

执行,手动输入密码即可。

expdp parfile=query.par

结束

不是啥新知识点,不总干数据库的活,手生,现学现用,记录一下。

更多示例参考Export/Import DataPump Parameter QUERY - How to Specify a Query (Doc ID 277010.1)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论