php imp,IMP同库Type对象导入报错ORA-02304

Type是我们经常使用的数据库对象结构。我们在实际中,可以单独定义type类型,之后在PL/SQL代码或者数据表中使用。 在一个偶然的机

Type是我们经常使用的数据库对象结构。我们在实际中,可以单独定义type类型,之后在PL/SQL代码或者数据表中使用。

在一个偶然的机会让笔者发现使用Type类型在数据exp/imp中的麻烦。当我们使用exp/imp工具进行同数据库实例(Instance)不同Schema之间数据拷贝时,如果Schema中有type类型,就会出现问题错误。

具体我们还是通过一系列的实验进行证明。

1、实验环境准备

我们使用10gR2作为实验数据库。

SQL> conn scott/tiger@ots;

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Connected as scott

SQL> select * from v$version;

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE 10.2.0.1.0 Production

我们首先将scott用户schema的所有对象导出。注意,当前scott下存在一些数据type对象。

SQL> select type_name, type_oid, typecode from user_types;

TYPE_NAME TYPE_OID TYPECODE

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

CUST_ADDRESS_TYPE_NEW 0239FC5ABD78464D8D6C4D7085E2F549 OBJECT

T_REC_TEST 428A1B3C7E1E4A3CB2063B93623693EA OBJECT

T_REC_TABLE D9AFD3FAE0A54964B1684CA28C69CEED COLLECTION

T_TYP 8E294AB7CC28493A94FF82791A376379 OBJECT

N_TYP 338172B836854BAB8C26D4C27B5908F1 OBJECT

在Oracle中,每一个type都会分配出唯一的oid编号,作为一种内部标志。下面,我们使用exp工具将scott用户对象导出。

D:\>exp scott/tiger@ots file=scott_20120606.dmp indexes=y rows=y compress=y cons

traints=y wner=scott

Export: Release 10.2.0.1.0 - Production on星期三6月6 17:22:16 2012

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已导出ZHS16GBK字符集和AL16UTF16 NCHAR字符集

即将导出指定的用户...

.正在导出pre-schema过程对象和操作

.正在导出用户SCOTT的外部函数库名

.导出PUBLIC类型同义词

.正在导出专用类型同义词

.正在导出用户SCOTT的对象类型定义

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

成功终止导出,没有出现警告。

D:\>

之后,我们创建同数据库用户scottback。

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

2、数据导入

当我们试图将数据导入到相同数据库时,出现报错。

D:\>imp scottback/scottback@ots file=scott_20120606.dmp indexes=y rows=y constra

ints=y ignore=y fromuser=scott touser=scottback

Import: Release 10.2.0.1.0 - Production on星期三6月6 17:34:21 2012

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

经由常规路径由EXPORT:V10.02.01创建的导出文件

警告:这些对象由SCOTT导出,而不是当前用户

已经完成ZHS16GBK字符集和AL16UTF16 NCHAR字符集中的导入

IMP-00017:由于ORACLE错误2304,以下语句失败:

"CREATE TYPE "T_REC_TEST" TIMESTAMP '2010-12-21:18:17:30' OID '428A1B3C7E1E4"

"A3CB2063B93623693EA' as object("

"id number);"

""

""

IMP-00003:遇到ORACLE错误2304

ORA-02304:无效的对象标识符文字

IMP-00017:由于ORACLE错误2304,以下语句失败:

"CREATE TYPE "T_REC_TABLE" TIMESTAMP '2010-12-21:18:17:33' OID 'D9AFD3FAE0A5"

"4964B1684CA28C69CEED' as table of t_rec_test;"

""

""

IMP-00003:遇到ORACLE错误2304

ORA-02304:无效的对象标识符文字

IMP-00017:由于ORACLE错误2304,以下语句失败:

"CREATE TYPE "T_TYP" TIMESTAMP '2012-03-07:10:47:03' OID '8E294AB7CC28493A94"

"FF82791A376379' as object (id number);"

""

""

IMP-00003:遇到ORACLE错误2304

ORA-02304:无效的对象标识符文字

IMP-00017:由于ORACLE错误2304,以下语句失败:

"CREATE TYPE "N_TYP" TIMESTAMP '2012-03-07:11:03:01' OID '338172B836854BAB8C"

"26D4C27B5908F1' as object (t_id number,t_name varchar2(10),t_addr varchar"

"2(20));"

""

""

IMP-00003:遇到ORACLE错误2304

ORA-02304:无效的对象标识符文字

IMP-00017:由于ORACLE错误2304,以下语句失败:

"CREATE TYPE "CUST_ADDRESS_TYPE_NEW" TIMESTAMP '2012-05-23:16:15:03' OID '02"

"39FC5ABD78464D8D6C4D7085E2F549' as object"

"(street_address varchar2"

"(40),"

"postal_code varchar2(10)"

",city varchar2(30)"

",state_province varchar2(10)"

",country_id char(2)"

");"

""

""

IMP-00003:遇到ORACLE错误2304

ORA-02304:无效的对象标识符文字

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

ORA-02270:此列列表的唯一或主键不匹配

即将启用约束条件...

成功终止导入,但出现警告。

从日志信息上,,我们看到在创建type类型变量的时候,Oracle报错2304。利用oerr工具,我们可以检查错误信息。

[oracle@bspdev ~]$ oerr ora 2304

02304, 00000, "invalid object identifier literal"

// *Cause: An attempt was made to enter an object identifier literal for

// CREATE TYPE that is either:

// - not a string of 32 hexadecimal characters

// - an object identifier that already identifies an existing

// object

// - an object identifier different from the original object

// identifier already assigned to the type

// *Action: Do not specify the object identifier clause or specify a 32

// hexadecimal-character object identifier literal that is unique

// or identical to the originally assigned object identifier. Then

// retry the operation.

从字面的情况看,是创建type的命令语句出现错误。从脚本的信息上,的确显示的script中创建type的语句是很特殊,中间有timestamp和oid信息。而且与原来schema中的相对应。

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值