Oracle 导入异常 Data Pump Issue-- ORA-02304
上一篇 /
下一篇 2012-07-09 11:27:21
/ 个人分类:工作
今天有同事导入数据库时,当create
type时候报错,我在原有数据库A(同一数据库下建立多个用户)测试很多遍都出现这个问题。新创建数据B导入没有问题。
=======
Import: Release 11.1.0.7.0 - Production on
Monday, 18 June, 2012 13:40:16 |
|
|
Copyright
(c) 2003, 2007, Oracle. All rights
reserved. |
|
|
Connected
to: Oracle Database 11g Release
11.1.0.7.0 - 64bit Production |
"SYSTEM".
"TEST_IMP_01_META" master table has been loaded / unloaded
normal
|
start
SYSTEM."TEST_IMP_01_META": system/********@px-h
parfile=imptest_01_meta.par |
Object
type SCHEMA_EXPORT/SYSTEM_GRANT is in the process |
Object
type SCHEMA_EXPORT/DEFAULT_ROLE is in the process |
Object
type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA is in the process |
Object
type SCHEMA_EXPORT/SYNONYM/SYNONYM is in the process |
Object
type SCHEMA_EXPORT/TYPE/TYPE_SPEC is in the process |
ORA-39083:
Object type TYPE create failed with the following error: |
ORA-02304:
Literal object identifier is invalid. |
Error
statement is as follows: |
CREATE
TYPE "PXTRG_VUT2"."TEST_OBJ01" OID '6ECBDDE4D6E2DBBAE040D69ECBBD670E' as
object |
(VAR_PART_NUMBER
VARCHAR2(100), |
VAR_LOT_NAME
VARCHAR2(100)); |
ORA-39083:
Object type TYPE create failed with the following error: |
ORA-02304:
Literal object identifier is invalid. |
Error
statement is as follows: |
CREATE
TYPE "PXTRG_VUT2"."SYS_PLSQL_298873_9_2" OID '6F4529EF4C50228FE040D69ECABD15EA' as
object (VAR_PART_NUMBER VARCHAR2(100), |
VAR_LOT_NAME
VARCHAR2(100), |
VAR_ACCOUNT
VARCHAR2(100), |
VAR_VPART_NUMBER
VARCHAR2(100), |
VAR_COMP_REASON
VARCHAR2(100)); |
===============================
查看ora-02304错误原因如下:
ORA-02304: invalid object identifier literal
在尝试用impdp把一个dump文件从一个schema导入到另外一个schema
(两个schema位于同一个数据库上,需要用到remap_schema参数来进行schema的映射转换)遇到了诸多类似如下的错误....
(cmd> impdp test/test directory=dump_dir
dumpfile=dump.dmp
logfile=dump.log remap_schema=frank:test)
ORA-39083: Object type TYPE failed to create with error:
ORA-02304: invalid object identifier literal
注意到在创建type的时候,“多出来”一段OID的东东,很是奇怪,因为平时在创建一个type的时候,根本就不会涉及到指定OID的问题,
问题八成就是出在这个OID上。那么这个OID到底是什么呢?为什么会导致ORA-02304的错误呢?
OID 应该就是Object Identifier, 在数据库中每个object都有自己唯一的标识,也就是object id.
因此把一个Object从一个schema导入到另外一个schema的时候(在同一个数据库上),如果这个OID也保持不变的话,那么就会出现多个
Object共享同一个object id的问题,这显然是不行的。因此会出现这个invalid object
identifier的问题。
那么如何解决这个问题呢? 通过impdp help=y 可以看到有一个参数来解决这个问题,
TRANSFORM Metadata transform to apply to applicable objects.
Valid transform keywords: SEGMENT_ATTRIBUTES, STORAGE
OID, and PCTSPACE.
看看帮助文档,得到如下信息,
OID - If the value is specified as n, the assignment of the
exported OID during the
creation of object tables and types is inhibited. Instead, a new
OID is assigned.
This can be useful for cloning schemas, but does not affect
referenced objects. The
default value is
y.
大意就是说如果TRANSFORM参数设置成OID=N,表示在imp的时候,新创建的表或这个类型会赋予新的OID,而不是dmp文件中包含的OID的
值。但是这个参数的默认值是OID=Y,因此在进行Imp的时候,新创建的表或者type会赋予同样的OID,如果是位于同一个数据库上的不同
schema,那就会造成OID冲突的问题,因此解决这个问题也很简单,只需要在impdp的时候,显示设置transform.
参数为OID=N既可以了。如下所示,
(cmd> impdp test/test
directory=dump_dir dumpfile=dump.dmp
logfile=dump.log remap_schema=frank:test
transform=OID:N)
收藏
举报
TAG:
error
Error
Oracle
oracle