【问题标题】:How to use query clause in EXPDP如何在 EXPDP 中使用查询子句
【发布时间】:2019-05-12 03:38:53
【问题描述】:

我正在使用以下命令通过 EXPDP 导出表的数据

nohup expdp \"/ as sysdba\" directory=DATA_PUMP_DIR dumpfile=EXP.dmp logfile=EXP.log version=11.2.0.4 TABLES=CRM.CATEGORIES QUERY='"where bank_id='43'"'

得到以下错误

ORA-31693: 表数据对象 "CRM"."CATEGORIES" 无法加载/卸载 由于错误而被跳过:

ORA-29913: 执行 ODCIEXTTABLEPOPULATE 标注时出错

ORA-01722: 无效号码

如果我从导出命令中删除查询参数,它工作正常。我尝试将版本参数更改为不同的值,但仍然出现相同的错误 表中的 BANK_ID 列是 NVARCHAR2 数据类型。 我不能使用 EXP,因为它在 db 上被阻止了。源数据库和目标数据库的 Oracle 版本均为 12.1.0.2.0。

【问题讨论】:

  • CRM.CATEGORIES.BANK_ID 的数据类型是什么?
  • @APC 它的 NVARCHAR2

标签: oracle oracle12c expdp


【解决方案1】:

您能否尝试以这种方式更改您的查询过滤器:

QUERY=(CRM.CATEGORIES:"WHERE bank_id='43'")

请注意:

编辑 我设法使它以这种方式工作:

expdp \"/ as sysdba\" dumpfile=DATA_PUMP_DIR:test.dmp tableS=CRM.CATEGORIES QUERY='(CRM.CATEGORIES:"WHERE bank_id=43")'   logfile=DATA_PUMP_DIR:test.log

【讨论】:

  • 不起作用,出现错误 - 意外标记 `(' 附近的语法错误
  • 同样的错误 - 执行 ODCIEXTTABLEPOPULATE 标注时出错
  • 这个错误下一定有更具体的解释
  • 完整消息是 ORA-31693:表数据对象“CRMUSER”。“CATEGORIES”加载/卸载失败,由于错误而被跳过:ORA-29913:执行 ODCIEXTTABLEPOPULATE 调用时出错 ORA- 01722:无效编号主表“SYS”。“SYS_EXPORT_TABLE_01”成功加载/卸载
  • 这没有意义。尝试使用 TO_NCHAR() 封装您的值。如果这仍然不会,如果你的桌子不是太大。我建议您创建另一个具有过滤结果的表并为其获取 expdp。导入时可以做 table_remap
【解决方案2】:

使用par文件文件,更容易

... QUERY="where bank_id=43"

干杯 布赖恩

【讨论】:

    【解决方案3】:

    这在 Solaris 中对我有用(查询参数中使用的日期值)

    expdp xxxxx/xxxx dumpfile=test_table.dmp logfile=test_table.log tables=scott.TEST 目录=DUMDIR query=scott.TEST:\"where IMG_SAVE_DTTIM \

    有关更多信息,请参阅参考文档 ID 277010.1

    【讨论】:

      猜你喜欢
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多