数据泵expdp是Oracle数据库中常用的数据导出工具,query参数可以帮助用户按照自定义条件筛选要导出的数据,避免导出全表数据浪费存储和导出时间。下面先通过一张示意图了解数据泵导出的整体流程:

query参数的基本语法
query参数的作用是针对指定的表设置行筛选条件,语法格式如下:
QUERY = [schema_name.]table_name:"where 筛选条件"
其中schema_name是可选的,默认是当前导出的schema,table_name必须是导出任务中包含的表名,筛选条件需要符合Oracle SQL的where子句规则。
query参数的使用示例
单表带条件导出
如果需要导出scott用户下emp表中部门编号为10的员工数据,导出命令如下:
expdp scott/tiger directory=dp_dir dumpfile=emp_10.dmp tables=emp query=emp:"where deptno=10"
多表分别设置筛选条件
如果需要同时导出emp和dept表,且分别设置条件,命令如下:
expdp scott/tiger directory=dp_dir dumpfile=multi_table.dmp tables=emp,dept query=emp:"where sal>3000" query=dept:"where deptno in (10,20)"
包含特殊字符的条件处理
如果筛选条件中包含单引号等特殊字符,需要对条件中的单引号进行转义,示例如下:
expdp scott/tiger directory=dp_dir dumpfile=emp_name.dmp tables=emp query=emp:"where ename=''SMITH''"
使用query参数的注意事项
- query参数只能针对tables参数中指定的表生效,如果导出的表没有在tables中列出,设置query对该表无效。
- 如果同时对同一张表设置了query参数和sample参数,sample参数会被忽略,优先按照query的条件筛选数据。
- query参数中的筛选条件如果是复杂的SQL语句,需要注意长度限制,过长的条件可能会导致命令解析失败,建议将复杂条件写成视图再导出。
- 使用query参数导出数据时,会逐行扫描表数据判断是否符合条件,大数据量表导出时性能会比全表导出低,需要评估导出时间。
- 如果导出任务包含分区表,query条件需要兼容分区规则,否则可能无法导出预期的分区数据,甚至导致导出失败。
- query参数中的表名需要和导出时的表名大小写保持一致,Oracle默认表名是大写,如果创建表时用了小写加引号,这里也需要对应小写加引号。
常见问题排查
如果执行导出时报错ORA-00904标识符无效,首先检查query条件中的列名是否存在于目标表中,是否拼写错误。如果报错ORA-29983找不到匹配的查询条件,检查query中的表名是否在tables参数中正确列出。如果导出数据量和预期不符,可以先将query中的条件拿到SQL*Plus中执行,确认返回的行数是否符合预期。
expdpquery参数数据泵导出Oracle数据迁移修改时间:2026-05-25 22:25:35