ORACLE IMP ORA-00910 出错处理案例

环境 源库AIX+9.2.0.4  新库solaris+9.2.0.8

导入出错提示是以下部分:

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部分数据,ORACLE数据库IMP逻辑导入出现ORA-00910的处理案例相关推荐

  1. oracle 误删除表数据,Oracle误删除表数据后的数据恢复详解

    Oracle误删除表数据后的恢复详解 测试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_rete ...

  2. oracle用户新增数据文件,[数据库]20200722_Oracle添加表空间、用户,用户授权

    [数据库]20200722_Oracle添加表空间.用户,用户授权 0 2020-07-25 17:00:30 --创建表空间CREATE TABLESPACE aifu --表空间名 aifu LO ...

  3. oracle更新所有数据,ORACLE数据库升级详细步骤

    ORACLE数据库升级详细步骤 时间:2010-10-16 00:59 来源: 作者: 点击: 260次 一.对ORACLE数据库进行备份 二.确认ORACLE数据库的Home目录安装路径 三.关闭数 ...

  4. oracle修改删除数据,[Oracle 错误修改删除数据后的恢复方法

    [Oracle ERP维护人员必备] 错误修改删除数据后的恢复方法 Oracle ERP维护人员工作再小心也难免会有在正式库中误删或者误改数据并且已经commit的情况发生,那么我就要用到 - Ora ...

  5. oracle批量构造数据,oracle批量构造数据方法 - rd_clp的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    1.一种是只要数据条数,至于里面内容可以是序列方式,另外可能几个表中相互 id的关联,那建议用存诸过程写. 表a(id,name)有学员的信息 表b(id,testid,subject,score)有 ...

  6. oracle 恢复删除的数据 oracle恢复删除的数据

    如何将勿操作truncate的表恢复回来 由于对于truncate命令没有回滚方法来还原,因此就需要对数据库进行恢复操作以将数据恢复回表中. 本文中将给出truncate命令后的恢复思路及步骤: RE ...

  7. oracle制作假数据,Oracle Workflow Demo (一) - 一个简单的请假申请工作流

    Oracle Workflow Demo (1) - 一个简单的请假申请工作流 目标:通过Oracle Workflow做一个简单的请假申请工作流,效果:经理接到流程后,可以Approve,也可以Re ...

  8. 使用oracle 游标修改数据,Oracle 函数施行修改和游标传递

    Oracle 函数执行修改和游标传递 ORA-14551:不能在查询语句中执行dml语句,开始误以为函数里不能执行DML或DDL语句,后查到前辈通过采用自治事务解决,在此基础上演例 传递SQL语句对数 ...

  9. oracle join过滤数据,oracle join on 数据过滤问题

    代码如下: select a.f_username from ( SELECT /*+parallel(gu,4)*/distinct gu.f_username FROM t_base_succpr ...

最新文章

  1. mongodb 复制集 维护小结
  2. 皮一皮:今年的网友不够优秀啊。。。
  3. 还在封装各种 Util 工具类?这个神级框架帮你解决所有问题!
  4. linux脚本 的使用,linux shell脚步使用讲解
  5. 代码管理 防止员工_低代码开发现形记
  6. 手机usb共享计算机网络连接,如何将手机wifi网络通过USB共享给电脑?小编教你共享方法...
  7. 【程序设计】流程图的规范和绘制
  8. 新书进展和我的决定。
  9. 用python生成多个txt文件
  10. 索引 CREATE INDEX
  11. 计算机一级选择题电子档,计算机一级考试选择题
  12. 环境配置就是安装软件,修改软件的配置文件,安装软件就是文件的复制,与新增--linux下一切皆文件...
  13. Android 如何开启与关闭adb 的认证机制(google adb secure) (adb RSA 指纹认证)
  14. 快递规模持续扩大,丰网加盟迎发展新机遇
  15. springboot 2.5.3 ActiveMQ踩坑笔记
  16. OOP的六大原则+一法则
  17. 获取高德地图省市区县列表
  18. 计算机两个硬盘如何区分,双硬盘电脑怎么设置主从盘?
  19. 基于原生小程序精仿的猫眼电影(可预览)
  20. Kd-tree原理与实现

热门文章

  1. android程序安装空间不足,AndroidStudio提示磁盘空间不足
  2. linux 脚本map,shell中map的用法
  3. C语言字符串类型转换为整型,c语言中将一个字符串转换到整型数据类型的函数是什么?...
  4. 第一届佳木斯大学程序设计校赛题解
  5. 从Linux基础到k8s进阶,马哥_K8s进阶实战(11)Kubernetes系统扩展
  6. openNLP--Sentence Detector
  7. python学习------面向对象进阶
  8. Python多版本管理
  9. WPF 元素相对另外一个元素的 相对位置
  10. 腾讯云首发智能网关流控,公有云进入网络精细管控时代