0

我正在尝试使用 remap_data 参数(数据泵模式)导出数据以隐藏一些数据。

这适用于“varchar2”或“number”列,但适用于“long”列。在导出日志文件中,我们可以看到 ORA-31693 错误,然后是 ORA-00907 错误。

谁能帮我解决这个问题?谢谢

这是我的示例代码:

-- data creation
create table TABLE1 (
   COL1         LONG
)
tablespace TAB
/

INSERT INTO TABLE1 (COL1) VALUES ('data1');

COMMIT;

-- package creation
CREATE OR REPLACE PACKAGE hidelong AS
    FUNCTION change_long ( valuetest IN LONG ) RETURN LONG;
END hidelong;
/

CREATE OR REPLACE PACKAGE BODY hidelong AS
    LongX LONG := 'XXXXXXXXXX';

    FUNCTION change_long ( valuetest IN LONG ) RETURN LONG IS
    BEGIN
        RETURN LongX;
    END change_long;

END hidelong;
/

导出命令:

expdp system/manager@DB1 schemas=TEST directory=datapump dumpfile=EXP.DMP LOGFILE=EXP.log remap_data=TEST.TABLE1.COL1:hidelong.change_long

EXP.log 文件内容:

Export: Release 11.2.0.1.0 - Production on Mer. Avr. 20 14:56:30 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
;;; 
Connecté à : Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
Démarrage de "SYSTEM"."SYS_EXPORT_SCHEMA_01" : system/********@DB1 schemas=TEST directory=datapump dumpfile=EXP.DMP LOGFILE=EXP.log remap_data=TEST.TABLE1.COL1:hidelong.change_long 
Estimation en cours à l'aide de la méthode BLOCKS ...
Traitement du type d'objet SCHEMA_EXPORT/TABLE/TABLE_DATA
Estimation totale à l'aide le la méthode BLOCKS : 64 KB
Traitement du type d'objet SCHEMA_EXPORT/USER
Traitement du type d'objet SCHEMA_EXPORT/SYSTEM_GRANT
Traitement du type d'objet SCHEMA_EXPORT/ROLE_GRANT
Traitement du type d'objet SCHEMA_EXPORT/DEFAULT_ROLE
Traitement du type d'objet SCHEMA_EXPORT/TABLESPACE_QUOTA
Traitement du type d'objet SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Traitement du type d'objet SCHEMA_EXPORT/TABLE/TABLE
Traitement du type d'objet SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
Traitement du type d'objet SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
Traitement du type d'objet SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
ORA-31693: Echec du chargement/déchargement de l'objet de données de table "TEST"."TABLE1" ; l'objet est ignoré en raison de l'erreur :
ORA-00907: parenthèse de droite absente
Table maître "SYSTEM"."SYS_EXPORT_SCHEMA_01" chargée/déchargée avec succès
******************************************************************************
L'ensemble de fichiers de vidage de SYSTEM.SYS_EXPORT_SCHEMA_01 est :
  C:\EXP.DMP
Travail "SYSTEM"."SYS_EXPORT_SCHEMA_01" terminé avec 1 erreur(s) à 14:57:03
4

2 回答 2

1

该文档没有提到将 REMAP_DATA 与 LONG 列一起使用的限制,但由于它们在其他方面受到限制 - 包括无法调用从 SQL 获取 LONG 参数的函数,这会导致 ORA-00997 - 这并不完全令人惊讶这是不允许的。

有一篇关于“使用 Oracle 数据泵进行数据转换”的 Oracle 白皮书,其中包括第 6 页上的一节“使用 REMAP_DATA 时的特殊注意事项”:

REMAP_DATA 参数还有其他无法解决的限制。...它也不能用于修改包含 LONG 或 LONG RAW 数据类型的列的表。

您收到的消息没有帮助,并且存在一个关于 ORA-00907 具有误导性的错误 (19157986)。没有将 LONG 列转换为 CLOB,似乎没有解决方法

有趣的是,它也可能影响其他数据类型

于 2016-04-20T15:16:33.640 回答
0

由于没有解决方法,我必须以不同的方式导出,例如:

  • 我将导出整个数据库并排除 TABLE1

  • 我将创建一个 TABLE1 转储:

create table TABLE1_ext
  organization external (
    type oracle_datapump
    default directory datapump
    location ('TABLE1.dmp')
  )
as select 'XXXXXXXXXX' as COL1 from TEST.TABLE1;

然后我将导入生成的这 2 个转储文件。

这样就可以了。

于 2016-04-20T16:34:42.893 回答