IMP同库Type对象导入报错ORA-02304(续)

 

在上篇《IMP同库Type对象导入报错ORA-02304》(http://space.itpub.net/17203031/viewspace-732089)中,我们讨论了由于type使用特性的原因,如果我们使用exp/imp工具导入到相同数据库中,是会发生报错现象。

 

当我们使用exp/imp的时候,报错ORA-02304实际上是没有什么特别好的解决方法的。Type导入相同库报错的本质在于在导出的时候,Oracle会将typeoid连带导出。而导入的时候,又希望将其还原为相同的oid从而引发冲突。

 

那么,是不是我们就没有办法了呢?我们借助Oracle 10g提出的数据泵(Data Dump)工具,是可以避免这个问题的。

 

1、环境准备

 

我们同样适用Oracle 11gR2进行试验。

 

 

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE        11.2.0.1.0         Production

 

 

scott用户下,我们创建一些type类型对象。

 

 

SQL> grant imp_full_database to scott;

Grant succeeded

 

SQL> grant exp_full_database to scott;

Grant succeeded

 

SQL> conn scott/tiger@wilson;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as scott

 

SQL> create type mt_type as object (xm number, tchar varchar2(10));

  2  /

 

Type created

 

SQL> select type_name, type_oid from user_types;

TYPE_NAME                      TYPE_OID

------------------------------ --------------------------------

MT_TYPE                        C230A55B1FC34E1DE040A8C0580017C6

 

SQL> create table my_tabletype of mt_type;

Table created

 

SQL> insert into my_tabletype values (1,'df');

1 row inserted

 

SQL> commit;

Commit complete

 

 

之后,我们创建用户scottback。使用数据泵expdpscott中将数据导出。

 

 

SQL> create user scottback identified by scottback;

User created

 

SQL> grant resource to scottback;

Grant succeeded

 

SQL> grant connect to scottback;

Grant succeeded

 

SQL> grant exp_full_database to scottback;

Grant succeeded

 

SQL> grant imp_full_database to scottback;

Grant succeeded

 

 

2expdp数据导出

 

数据泵DataDump作为10g中推出的新一代数据备份还原工具,具有很多好的特点。DataDump是服务器端使用工具,需要在服务器上执行。

 

首先,我们需要创建directory对象,对应服务器上的一个目录位置。

 

 

[root@oracle11g /]# pwd

/

[root@oracle11g /]# mkdir export

[root@oracle11g /]# ls -l | grep export

drwxr-xr-x    2 root   root      4096 Jun 11 19:29 export

[root@oracle11g /]# chown oracle:oinstall export

[root@oracle11g /]# ls -l | grep export

drwxr-xr-x   2 oracle oinstall  4096 Jun 11 19:39 export

 

 

创建directory对象,并且将read write权限授予给scottscottback

 

 

SQL> create or replace directory MY_DIR

  2    as '/export';

 

Directory created

 

SQL> grant write, read on directory my_dir to scott;

Grant succeeded

 

SQL> grant write, read on directory my_dir to scottback;

Grant succeeded’

 

 

再使用expdp命令行进行导出。

 

 

[oracle@oracle11g ~]$ cd /export/

[oracle@oracle11g export]$ pwd

/export

[oracle@oracle11g export]$ expdp scott/tiger@wilson directory=my_dir dumpfile=scott.dmp logfile=resexp.log schemas=scott

 

Export: Release 11.2.0.1.0 - Production on Mon Jun 11 19:35:08 2012

 

[oracle@oracle11g export]$ expdp scott/tiger@wilson directory=my_dir dumpfile=scott.dmp logfile=resexp.log schemas=scott

Export: Release 11.2.0.1.0 - Production on Mon Jun 11 19:35:08 2012

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting "SCOTT"."SYS_EXPORT_SCHEMA_01":  scott/********@wilson directory=my_dir dumpfile=scott.dmp logfile=resexp.log schemas=scott

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

(篇幅原因,部分省略…..

. . exported "SCOTT"."T"                                     0 KB       0 rows

. . exported "SCOTT"."T1"                                    0 KB       0 rows

. . exported "SCOTT"."T2"                                    0 KB       0 rows

Master table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded

******************************************************************************

Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:

  /export/scott.dmp

Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 19:36:00

 

[oracle@oracle11g export]$ ls -l

total 420

-rw-r--r--  1 oracle oinstall   2467 Jun 11 19:36 resexp.log

-rw-r-----  1 oracle oinstall 421888 Jun 11 19:36 scott.dmp

 

 

3impdp导入数据

 

在默认的impdp方式下,type也是不能导入到相同的数据库中去的。

 

 

[oracle@oracle11g export]$ impdp scottback/scottback@wilson directory=my_dir dumpfile=scott.dmp logfile=resimp.log remap_schema=scott:scottback

 

Import: Release 11.2.0.1.0 - Production on Mon Jun 11 19:37:37 2012

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Master table "SCOTTBACK"."SYS_IMPORT_FULL_01" successfully loaded/unloaded

Starting "SCOTTBACK"."SYS_IMPORT_FULL_01":  scottback/********@wilson directory=my_dir dumpfile=scott.dmp logfile=resimp.log remap_schema=scott:scottback

Processing object type SCHEMA_EXPORT/USER

ORA-31684: Object type USER:"SCOTTBACK" already exists

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC

ORA-39083: Object type TYPE failed to create with error:

ORA-02304: invalid object identifier literal

Failing sql is:

CREATE TYPE "SCOTTBACK"."MT_TYPE"   OID 'C230A55B1FC34E1DE040A8C0580017C6' as object (xm number, tchar varchar2(10));

 

 

Processing object type SCHEMA_EXPORT/TABLE/TABLE

ORA-39117: Type needed to create table is not included in this operation. Failing sql is:

CREATE TABLE "SCOTTBACK"."MY_TABLETYPE" OF "SCOTTBACK"."MT_TYPE"  OID 'C230B8AA21E527C9E040A8C058001816' OIDINDEX  ( PCTFREE 10 INITRANS 2 MAXTRANS 255  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "SYSTEM" ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

. . imported "SCOTTBACK"."BASELINE_TEST"                 22.90 KB       1 rows

(篇幅原因,省略部分 …..

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Job "SCOTTBACK"."SYS_IMPORT_FULL_01" completed with 4 error(s) at 19:37:47

 

 

注意,在默认情况下,我们导入数据依然会遇到oid的问题。显示的依然是type创建SQL中包括有oid信息,引起oid冲突。进而是连带的数据表my_tabletype不能创建。

 

有一个片段可以关注:

 

 

CREATE TYPE "SCOTTBACK"."MT_TYPE"   OID 'C230A55B1FC34E1DE040A8C0580017C6' as object (xm number, tchar varchar2(10));

 

 

Processing object type SCHEMA_EXPORT/TABLE/TABLE

ORA-39117: Type needed to create table is not included in this operation. Failing sql is:

CREATE TABLE "SCOTTBACK"."MY_TABLETYPE" OF "SCOTTBACK"."MT_TYPE"  OID 'C230B8AA21E527C9E040A8C058001816' OIDINDEX  ( PCTFREE 10 INITRANS 2 MAXTRANS 255  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS

 

 

关联oid相同,说明typeoidOracle内部是作为关联的重要信息使用的。

 

impdp中,我们可以使用transform参数设置,要求将原有dmp文件中oid映射重新生成。

 

 

[oracle@oracle11g export]$ impdp scottback/scottback@wilson directory=my_dir dumpfile=scott.dmp logfile=resimp2.log remap_schema=scott:scottback transform=oid:n

 

Import: Release 11.2.0.1.0 - Production on Mon Jun 11 19:39:07 2012

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Master table "SCOTTBACK"."SYS_IMPORT_FULL_01" successfully loaded/unloaded

Starting "SCOTTBACK"."SYS_IMPORT_FULL_01":  scottback/********@wilson directory=my_dir dumpfile=scott.dmp logfile=resimp2.log remap_schema=scott:scottback transform=oid:n

Processing object type SCHEMA_EXPORT/USER

ORA-31684: Object type USER:"SCOTTBACK" already exists

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC

Processing object type SCHEMA_EXPORT/TABLE/TABLE

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

. . imported "SCOTTBACK"."BASELINE_TEST"                 22.90 KB       1 rows

. . imported "SCOTTBACK"."DEPT"                          5.937 KB       4 rows

. . imported "SCOTTBACK"."EMP"                           8.992 KB      14 rows

. . imported "SCOTTBACK"."MY_TABLETYPE"                  6.507 KB       1 rows

. . imported "SCOTTBACK"."SALES_QUAL"                    6.007 KB       6 rows

. . imported "SCOTTBACK"."SALGRADE"                      5.867 KB       5 rows

. . imported "SCOTTBACK"."BONUS"                             0 KB       0 rows

. . imported "SCOTTBACK"."T"                                 0 KB       0 rows

. . imported "SCOTTBACK"."T1"                                0 KB       0 rows

. . imported "SCOTTBACK"."T2"                                0 KB       0 rows

Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type SCHEMA_EXPORT/TABLE/COMMENT

Processing object type SCHEMA_EXPORT/VIEW/VIEW

ORA-31684: Object type VIEW:"SCOTTBACK"."V_T1" already exists

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Job "SCOTTBACK"."SYS_IMPORT_FULL_01" completed with 2 error(s) at 19:39:20

 

 

其中,transform取值oid:n的含义就是对oid信息不进行加载,重新进行生成。数据表取值正确。

 

 

 

SQL> conn scottback/scottback@wilson;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as scottback

 

SQL> select * from my_tabletype;

 

        XM TCHAR

---------- ----------

         1 df

 

 

4、结论

 

随着Oracle功能不断完善,很多新特性在exp/imp工具上已经不能支持。Oracle 10g下推出的Data Dump有很多功能,是我们可以进行借鉴使用的。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-732501/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17203031/viewspace-732501/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ORA-39083是Oracle数据库中的一个错误代码,表示数据泵导入操作失败。这个错误通常是由于导入的数据文件或目录不存在、权限不足、数据文件格式不正确或者数据库对象已经存在等原因引起的。要解决这个问题,可以尝试以下几种方法: 1. 检查导入的数据文件或目录是否存在,并且确保有足够的权限访问它们。 2. 检查导入的数据文件格式是否正确,例如是否与导出时使用的格式相同。 3. 如果导入的数据文件已经存在于目标数据库中,可以尝试使用IGNORE=Y参数来忽略已经存在的对象。 4. 如果导入的数据文件中包含了已经存在的对象,可以尝试使用REMAP_SCHEMA参数来重新映射这些对象到一个新的模式中。 5. 如果以上方法都无法解决问题,可以尝试使用TRACE=480300参数来启用详细的跟踪信息,以便更好地诊断问题。 ### 回答2: 在使用impdp进行数据导入时,可能会遇到ORA-39083错误。这个错误通常指的是一个对象导入失败了。 导致导入失败的原因可能包括以下几种: 1. 没有足够的权限:导入数据需要足够的权限,如果用户没有足够的权限,则会导致导入失败并出现ORA-39083错误。 2. 目标表已经存在并且没有被清空:如果导入的数据中的表已经存在,而且表中已经包含数据,则导入失败,并出现报错信息。 3. 导入的数据源文件不存在:如果指定的数据源文件不存在,则导入失败,并出现报错信息。 4. 导入的数据文件没有足够的空间:如果导入的数据文件没有足够的空间容纳导入的数据,则导入失败,并出现报错信息。 对于这些问题,可以根据具体的情况采取以下几种方法来解决: 1. 确保用户具有足够的权限:在进行导入数据之前需要确保用户具有足够的权限。如果没有足够的权限,需要联系管理员进行授权。 2. 清空目标表:在导入数据之前需要确保目标表已经被清空,如果表中已经包含数据,则需要进行清空。 3. 确认数据源文件存在并可用:在进行导入数据之前需要确认数据源文件存在并具有正确的权限设置。如果文件不存在或者权限设置不正确,则需要进行调整。 4. 确认数据文件具备足够的空间:在进行导入数据之前需要确保数据文件具有足够的空间容纳导入的数据。可以通过增加数据文件的大小或者增加磁盘空间来解决问题。 总的来说,ORA-39083错误是导入数据时经常会遇到的问题,可以通过一些基本的和常用的方法来解决。在出现错误时,需要对问题进行逐一排查,确定具体的原因,并选择相应的解决方法。如果遇到比较复杂的问题,则建议联系专业的技术支持人员进行帮助和解决。 ### 回答3: 对于 Oracle 数据库管理员来说,运用 impdp 工具来备份或迁移数据库是很常见的操作。然而,在实际应用中,也会经常面临 impdp 导入报错的情况,其中ORA-39083 错误是很常见的一种。下面我将针对该错误进行详细的解析与处理。 ORA-39083 错误的相关描述 在使用 impdp 工具时,若出现类似如下的错误提示: ORA-39083: Object type TABLE failed to create with error: ORA-00959: tablespace 'XXX' does not exist 则说明此次导入失败。其中,ORA-39083 错误的提示信息包括了其失败的对象类型和错误原因等,其中的ORA-00959 错误提示信息则说明了实际导入时的障碍。 ORA-00959 错误的原因分析 ORA-00959 错误的原因由其错误提示信息已经说明了——缺少了相应的表空间。这时,我们需要对其出错的对象进行处理。例如,若我们发现了相应表空间确实没有被创建,或者没有在导入时提前建立好,这时便可以在运用 impdp 工具前,恰当地创建好要导入的表空间。 若已经有相应的表空间且也已经正确创建,但导入仍然失败,这时,我们需要进一步探究导致该错误的具体原因。常见的导致ORA-00959 错误的因素与表空间命名不规范,导致 impdp 工具无法识别相应表空间的情况有关。例如,表空间名称中含有全角字符或者其他特殊字符,均会导致导入失败。 解决豁免: 针对ORA-39083 错误,通常的解决方法是检查表空间是否被正确地创建,确保表空间名称规范、识别正确后再次使用 impdp 工具进行导入。此外,也可以根据错误提示信息中涉及到的具体对象类型,考虑采用更为具体的解决措施,比如说建立其他的 table 或者 view。 最后,防患于未然,不断的学习和掌握 Oracle 工具和技能是重要的,加深自己对数据库系统的理解和管理能力也可以避免此类错误的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值