请教oracle imp数据导入 问题!

时间:2021-10-01 21:32:29
原机器:
win2000 adv
oracle 9i
成功导出e.dmp文件
目标机:
win2000 adv
oracle 9i
e.dmp在e;\下面

操作1:
在目标机上建了新的表空间news和新用户news pw =pw
imp system/password file=e:/e.dmp fromuser=sysytem touser=news log=err20031016.log
错误1:
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

经由常规路径导出由EXPORT:V09.02.00创建的文件
已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
导出客户机使用ZHS16CGB231280字符集 (可能的字符集转换)
. 正在将SYSTEM的对象导入到 NEWS
IMP-00015: 由于对象已存在,下列语句失败: 
 "CREATE TYPE "REPCAT$_OBJECT_NULL_VECTOR" TIMESTAMP '2002-05-12:16:38:08' OI"
 "D '4C81ADEB677A408AB30291AB408EC1C9'          AS OBJECT"
 "("
 "  -- type owner, name, hashcode for the type represented by null_vector"
 "  type_owner      VARCHAR2(30),"
 "  type_name       VARCHAR2(30),"
 "  type_hashcode   RAW(17),"
 "  -- null_vector for a particular object instance"
 "  -- ROBJ REVISIT: should only contain the null image, and not version#"
 "  null_vector     RAW(2000)"
 ")"
IMP-00017: 由于 ORACLE 的 1031 错误,以下的语句失败
 "CREATE DATABASE LINK "WAP.US.ORACLE.COM" CONNECT TO "SYSTEM" IDENTIFIED BY "
 ""MANAGER" USING 'wap'"
IMP-00003: 遇到 ORACLE 错误 1031
ORA-01031: 权限不足
IMP-00015: 由于对象已存在,下列语句失败: 
 "CREATE SEQUENCE "HISTORY_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999"
 "999 INCREMENT BY 1 START WITH 1122 CACHE 20 NOORDER NOCYCLE"
IMP-00015: 由于对象已存在,下列语句失败: 
 "CREATE SEQUENCE "LOGMNR_SEQ$" MINVALUE 1 MAXVALUE 9999999999999999999999999"
操作2:

imp system/password file=e:/e.dmp full=yes log=err20031016.log
错误2:

连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

经由常规路径导出由EXPORT:V09.02.00创建的文件
已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
导出客户机使用ZHS16CGB231280字符集 (可能的字符集转换)
. 正在将SYSTEM的对象导入到 NEWS
IMP-00015: 由于对象已存在,下列语句失败: 
 "CREATE TYPE "REPCAT$_OBJECT_NULL_VECTOR" TIMESTAMP '2002-05-12:16:38:08' OI"
 "D '4C81ADEB677A408AB30291AB408EC1C9'          AS OBJECT"
 "("
 "  -- type owner, name, hashcode for the type represented by null_vector"
 "  type_owner      VARCHAR2(30),"
 "  type_name       VARCHAR2(30),"
 "  type_hashcode   RAW(17),"
 "  -- null_vector for a particular object instance"
 "  -- ROBJ REVISIT: should only contain the null image, and not version#"
 "  null_vector     RAW(2000)"
 ")"
IMP-00017: 由于 ORACLE 的 1031 错误,以下的语句失败
 "CREATE DATABASE LINK "WAP.US.ORACLE.COM" CONNECT TO "SYSTEM" IDENTIFIED BY "
 ""MANAGER" USING 'wap'"
IMP-00003: 遇到 ORACLE 错误 1031
ORA-01031: 权限不足
IMP-00015: 由于对象已存在,下列语句失败: 
 "CREATE SEQUENCE "HISTORY_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999"
 "999 INCREMENT BY 1 START WITH 1122 CACHE 20 NOORDER NOCYCLE"
IMP-00015: 由于对象已存在,下列语句失败: 
 "CREATE SEQUENCE "LOGMNR_SEQ$" MINVALUE 1 MAXVALUE 9999999999999999999999999"
 "99 INCREMENT BY 1 START WITH 1 CACHE 20 ORDER NOCYCLE"
IMP-00015: 由于对象已存在,下列语句失败: 
请赐教。

6 个解决方案

#1


因为你用imp导入时,发现库里的数据库对象都已经存在,就会发生这些错误。
你可以把该数据库的这些对象(表、序列、存储过程、数据库链接等)先删除,然后再imp导入,则不会发生以上错误了,在imp中加上参数ignore=y(忽略错误)

#2


重新建一个用户就可以了!

#3


在新用户里,不会出现错误,应该是权限和字符级的问题,
首先要两个数据库字符级一致,导出的数据库版本要<=IMP数据库的版本

#4


imp 工具是数据装栽工具,并不是数据导入导出工具
imp help=y看看帮助了

#5


导出/导入与字符集 
明白ORACLE多国语言设置,ORACLE多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示、货币形式、排序方式和CHAR,VARCHAR2,CLOB,LONG字段的数据的存储/显示等有效。ORACLE多国语言设置最主要的两个特性就是国家语言设置与字符集设置。国家语言设置决定了界面或提示使用的语言种类;字符集决定了数据库保存与字符集有关数据(如文本)的编码规则。正如上面的一个小例子,环境变量NLS_LANG的不同,导致EXP帮助发生变化,这就是多国语言设置的作用(NLS_LANG包含国家语言设置与字符集设置,这里起作用的是国家语言设置,而不是字符集)。 
ORACLE字符集设定,分为数据库字符集和客户端字符集环境设置。在数据库端,字符集在创建数据库的时候设定,并保存在数据库props$表中,对于8i以上产品,已经可以采用“Alter database character set 字符集”来修改数据库的字符集,但也仅仅是从子集到超集。不要通过update props$来修改字符集,如果是不支持的转换,可能会失去所有与字符集有关的数据,就是支持的转换,也可能导致数据库的不正常工作。字符集分为单字节字符集与多字节字符集,US7ASCII就是典型的单字节字符集,在这种字符集中length=lengthb,而ZHS16GBK就是常用的双字节字符集,在这里lengthb=2*length。 
客户端的字符集环境比较简单,主要是环境变量或注册表项NLS_LANG,注意NLS_LANG的优先级别为:参数文件à注册表à环境变量àalter sessionà函数。NLS_LANG的组成为“国家语言设置.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。客户端的字符集最好与数据库端一样(国家语言设置可以不一样,如zhs16gbk的字符集,客户端可以是nls_lang =simplified chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影响数据库字符的正常显示),如果字符集不一样,而且字符集的转换也不兼容,那么客户端的数据存储/显示和导出/导入的与字符集有关的数据将都是乱码。 
使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个2进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00 01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集: 
SQL> select nls_charset_name(1) from dual; 
NLS_CHARSET_NAME(1) 
------------------- 
US7ASCII 
可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号: 
SQL> select nls_charset_id('zhs16gbk') from dual; 
NLS_CHARSET_ID('ZHS16GBK') 
-------------------------- 
              852 
把852转换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。(注意,十进制与十六进制之间的转换,想明白其中的道理) 


--------------------------------------------------------------------------------
unix/linux+oracle 

http://www.bluemask.net/services/gb/index1.asp?bid=245  
piner 
 
oracle is my all 

版主 

发帖: 540
 于2003-10-08 08:43 
--------------------------------------------------------------------------------
 SQL> select nls_charset_name(31) from dual; 

NLS_CHARSET_NAME(31) 
-------------------- 
WE8ISO8859P1 

SQL> select nls_charset_name(852) from dual; 

NLS_CHARSET_NAME(852) 
--------------------- 
ZHS16GBK 

你现在修改2,3字节00 1F为03 54,再试一次

#6


新用户里应该不会有什么表的,应该至少授予connect,resource权限,否则报错!
字符集不熟~关注中!

#1


因为你用imp导入时,发现库里的数据库对象都已经存在,就会发生这些错误。
你可以把该数据库的这些对象(表、序列、存储过程、数据库链接等)先删除,然后再imp导入,则不会发生以上错误了,在imp中加上参数ignore=y(忽略错误)

#2


重新建一个用户就可以了!

#3


在新用户里,不会出现错误,应该是权限和字符级的问题,
首先要两个数据库字符级一致,导出的数据库版本要<=IMP数据库的版本

#4


imp 工具是数据装栽工具,并不是数据导入导出工具
imp help=y看看帮助了

#5


导出/导入与字符集 
明白ORACLE多国语言设置,ORACLE多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示、货币形式、排序方式和CHAR,VARCHAR2,CLOB,LONG字段的数据的存储/显示等有效。ORACLE多国语言设置最主要的两个特性就是国家语言设置与字符集设置。国家语言设置决定了界面或提示使用的语言种类;字符集决定了数据库保存与字符集有关数据(如文本)的编码规则。正如上面的一个小例子,环境变量NLS_LANG的不同,导致EXP帮助发生变化,这就是多国语言设置的作用(NLS_LANG包含国家语言设置与字符集设置,这里起作用的是国家语言设置,而不是字符集)。 
ORACLE字符集设定,分为数据库字符集和客户端字符集环境设置。在数据库端,字符集在创建数据库的时候设定,并保存在数据库props$表中,对于8i以上产品,已经可以采用“Alter database character set 字符集”来修改数据库的字符集,但也仅仅是从子集到超集。不要通过update props$来修改字符集,如果是不支持的转换,可能会失去所有与字符集有关的数据,就是支持的转换,也可能导致数据库的不正常工作。字符集分为单字节字符集与多字节字符集,US7ASCII就是典型的单字节字符集,在这种字符集中length=lengthb,而ZHS16GBK就是常用的双字节字符集,在这里lengthb=2*length。 
客户端的字符集环境比较简单,主要是环境变量或注册表项NLS_LANG,注意NLS_LANG的优先级别为:参数文件à注册表à环境变量àalter sessionà函数。NLS_LANG的组成为“国家语言设置.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。客户端的字符集最好与数据库端一样(国家语言设置可以不一样,如zhs16gbk的字符集,客户端可以是nls_lang =simplified chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影响数据库字符的正常显示),如果字符集不一样,而且字符集的转换也不兼容,那么客户端的数据存储/显示和导出/导入的与字符集有关的数据将都是乱码。 
使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个2进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00 01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集: 
SQL> select nls_charset_name(1) from dual; 
NLS_CHARSET_NAME(1) 
------------------- 
US7ASCII 
可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号: 
SQL> select nls_charset_id('zhs16gbk') from dual; 
NLS_CHARSET_ID('ZHS16GBK') 
-------------------------- 
              852 
把852转换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。(注意,十进制与十六进制之间的转换,想明白其中的道理) 


--------------------------------------------------------------------------------
unix/linux+oracle 

http://www.bluemask.net/services/gb/index1.asp?bid=245  
piner 
 
oracle is my all 

版主 

发帖: 540
 于2003-10-08 08:43 
--------------------------------------------------------------------------------
 SQL> select nls_charset_name(31) from dual; 

NLS_CHARSET_NAME(31) 
-------------------- 
WE8ISO8859P1 

SQL> select nls_charset_name(852) from dual; 

NLS_CHARSET_NAME(852) 
--------------------- 
ZHS16GBK 

你现在修改2,3字节00 1F为03 54,再试一次

#6


新用户里应该不会有什么表的,应该至少授予connect,resource权限,否则报错!
字符集不熟~关注中!