ORACLE IMP ORA-00910 出错处理案例
来源:互联网 发布:劳丽诗淘宝店叫什么 编辑:程序博客网 时间:2024/06/05 09:18
导入出错提示是以下部分:
IMP-00017: following statement failed with ORACLE error 910:
"CREATE TABLE "T_CSL_DYNAITEMDATAENTRY" ("FID" VARCHAR2(44) NOT NULL ENABLE,"
" "FITEMDATAID" VARCHAR2(44) NOT NULL ENABLE, "FITEMID" VARCHAR2(44) NOT NUL"
"L ENABLE, "FKEYNUMBER" NVARCHAR2(500) NOT NULL ENABLE, "FKEYNAME" NVARCHAR2"
"(500) NOT NULL ENABLE, "FDATAELEMENT" NUMBER(10, 0) NOT NULL ENABLE, "FVALU"
"ETYPE" NUMBER(10, 0) NOT NULL ENABLE, "FYEAR" NUMBER(10, 0) NOT NULL ENABLE"
", "FPERIOD" NUMBER(10, 0) NOT NULL ENABLE, "FVALUE" NUMBER(21, 6), "FDYNAIT"
"EMTYPE" NUMBER(10, 0), "FTEXTVALUE" NVARCHAR2(4000), "FGRADENUMBER" VARCHAR"
"2(80)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 15728"
"640 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "EAS_D_CH"
"INAMOBILE_STANDARD" LOGGING NOCOMPRESS"
IMP-00003: ORACLE error 910 encountered
ORA-00910: specified length too long for its datatype
经过详细检查导入日志只有要NVARCHAR2(4000)的字段类型表都导入不了,而且nvarchar2存储的数据大部分是中文。
在原库查询
SQL> select name,VALUE$ from props$ where name in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
NAME VALUE$
------------------------------ --------------------------------------------------------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET UTF8
在新库查询
SQL> select name,VALUE$ from props$ where name in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
NAME VALUE$
------------------------------ --------------------------------------------------------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16
可以看出原库和新库的国家字符集不同
通过查资料,得到以下答案
在创建数据库时,我们可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。
字符集用来存储:
CHAR, VARCHAR2, CLOB, LONG等类型数据
用来标示诸如表名、列名以及PL/SQL变量等
SQL和PL/SQL程序单元等
国家字符集用以存储:
NCHAR, NVARCHAR2, NCLOB等类型数据
utf-8和utf-16他们两的字符范围是完全相同的。
utf-8和utf-16是unicode的两种编码实现,都能完全表现unicode。
不同之处就在于:
utf8 对于ansi 字符 (英文字母,数字,符号) 用一个 byte ,但对中文字符就要 3个byte才行,甚至有要4个byte的汉字。
而一般 utf16 对 一般的 字符包括汉字都是2bytes。
所以原来存储的字段值更大,而新库存储的字段值更小,导致nvarchar2类型的数据导入出错。
解决方法:
1.更改国家字符集由AL16UTF16为UTF8
$ sqlplus ‘/ as sysdba’
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT EXCLUSIVE;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SQL> SHUTDOWN IMMED
用这种方法更改后,通过测试导入一个有nvarchar2字段类型表的数据,会出现乱码,而且直接这样修改国家字符集会存在风险,所以放弃。
2.重建数据库,选择国家字符集为UTF8,测试导入一个有nvarchar2字段类型表的数据正常。
- ORACLE IMP ORA-00910 出错处理案例
- oracle imp导入数据出错:ORA-01658:无法为表空间XXX中的段创建INITIAL区
- 【ORACLE】报错IMP-00003ORA-02304IMP-00017
- ORACLE 10G imp error: ORA-12899
- 【ORACLE】报错IMP-00058ORA-00942
- Oracle错误案例:ORA-00922
- Oracle错误案例:ORA-00235
- imp时发生ora-01659的错误处理
- oracle EXP & IMP 维护 + 字符集的处理
- oracle的imp导入约束问题处理
- oracle 导入数据报错IMP-00003 & ORA-01659
- ora-00959表空间 不存在 oracle imp 导入问题
- imp导入数据到ORACLE遭遇ORA-12899错误
- imp导入数据到ORACLE遭遇ORA-12899错误
- imp导入数据到ORACLE遭遇ORA-12899错误
- Oracle用imp导入出现ora-20000错误
- Oracle exp imp 参数show的使用案例
- Oracle的ORA-00604错误案例学习
- SQLite剖析之事务处理技术
- Hibernate基于注解的双向one-to-many映射关系的实现
- Redis正确使用的十个技巧
- java初始化顺序
- Windows下MySQL多实例/主从复制/重置密码/WordPress主从配置
- ORACLE IMP ORA-00910 出错处理案例
- iOS 音频 中断处理
- numpy中std()和pandas中std()
- iOS wallet开发
- php-Codeigniter使用redis
- loadrunner教程及常见问题汇总(二)
- 数据库SQL,NoSQL之小感悟
- adaboost
- RocketMQ 使用安装