oracle ora 00910,NVARCHAR2字段超长问题:ORA-00910: specified length too long for its datatype

NVARCHAR2字段超长问题:ORA-00910: specified length too long for its datatype

前几天在IMP的时候遇到了个问题:

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

查找了网上的一些资料,由于两个系统分别为LINUX同SOLARIS,因此最初检查了数据库字符集:

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')

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

AMERICAN_AMERICA.UTF8

检查结果两个系统相同为UTF8。

由于SQLARIS为测试环境,系统配置相对比较差一些,因此考虑资源配置的因素,将SOLARIS中/etc/system 中进行了相应修改:

SHMMAX=4294967295

SHMMIN=1

SHMMNI=100

SHMSEG=10

SEMMNI=100

SEMMSL=60

SEMMNS=200

SEMOPM=100

SEMVMX=32767

set nproc=10000 并加入此行,将原先系统默认的进程的最大数目为3000修改成10000

但通过测试后还是没有成功。实在不想打表同数据的主意,但看来也只好这么搞了。

对于NVARCHAR2的字符长度的限制产生疑问,手工在SOLARIS中建这张表,同样报这个错误。在metalink.oracle.com查找解决方式,查看到Tom Villane对于相同问题的一个解释,摘抄如下:

You will have to change the value of NVARCHAR2 to less than 4000 in order to create the table. I don't have a database with your specific character set, so you will have to experiment with different values (2000, 3000, 3500 .etc...) until you are able to create the table.

没办法手工建表后发现在SOLARIS上最大只能将NVARCHAR2建到2000的长度,郁闷!但怎么将IMP的这张表同数据导入呢?

试验用JDBC数据同步复制两张表的数据,但还是由于这个错误,而无法同步;

将正事生产环境上的这个字段改小成2000EXP这张表后在SOLARIS上IMP还是相同的错误;

又有个新的问题:NVARCHAR2最长2000~4000的限制是什么原因而决定的?

数据库的版本肯定是一样的,字符和其他全部已经修改了。现今唯一的最大差异就是系统平台,狠狠心吧。懒人最不喜欢的就是做那种无聊的系统,但也只好把SOLARIS重新安装成了LINUX,之后还安装了相同版本的数据库。

但最终依然没有解决,最终判断出了NVARCHAR2字符限制的起因:

NVARCHAR2的字符最大限制是由于系统的硬件环境而决定的,具体构成和规律未知!!!!!

看来ORACLE对系统环境的依赖还真市够大的了。

没办法了,开始打表的主意吧!

打开这张表查看里面的具体数据,此列是可以为NULL的,看里面很多行都是空的,只是个别行中有100多个汉字,因此判断此列也许为备注之类的数据列。

既然不是关键数据,而且是要搞到测试环境里面,那多这列少这列就没多大意义,可以大胆的处理了。

正事库的操作:

首先把库中的这张表EXP出来;

在正事库中将这张表的NVARCHAR2列删除掉;

到处没有NVARCHAR2列的表;

删除这张已经缺列的表;

把刚才EXP出来的表再IMP进去恢复

(当然还有一种回复的方式就是闪回,但要牵扯闪回表和按照时间戳再闪回一次,因此我还是能懒就懒了,解决问题为主了。)

在测试库的操作;

把缺列的表DMP备份FTP到测试机器上;

看库里有没有这张表,要有就DROP掉;

导入这个缺列的表;

手工建立缺失的列;

最终搞定,数据虽然没有,但由于是测试环境也就无所谓了,能用就OK了!真要是正式环境也不会这么烂的机器了,当然也不会有这个情况。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7652889/viewspace-627087/,如需转载,请注明出处,否则将追究法律责任。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swift - 触摸事件(点击,移动,抬起等)说明及用例

在iOS开发中,UIGestureRecognizer可以方便的响应处理手势事件。 而如果要想更精细的处理,我们还需要借助touchesBegan,touchesMoved,touchesEnded等触摸方法。这些方法 都是UIResponder中的方法。视图控制器和视图类,都…

鼠标移动响应php程序,jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】...

本文实例讲述了jQuery实现的响应鼠标移动方向插件用法。分享给大家供大家参考,具体如下:HTML代码如下:www.jb51.net jQuery响应鼠标移动*{margin:0;padding:0;}ul,li{list-style:none;}div{font-family:"Microsoft YaHei";}html,bo…

读《大道至简—是懒人造就了方法 》有感

读了大道至简第一章编程的精义之后,我觉得感触颇深,于是乎我又读了第二章是懒人造就了方法 ,之后果然没有让我失望,第二章写的也是非常的好,非常的吸引我。 第二章的开头便引用了李冰凿山的故事,在战国时代…

《大道至简》第二篇读后感

今天把周爱民大道至简的第二章关于是懒人造就了方法读了几遍,作者通过战国时李冰凿山与愚公移山的比较来阐述懒人早就方法主题,以前听历史老师讲课的时候正是因为懒人才会有那么多可以节省人们力气和时间的发明,但懒人并不是真的懒&#xff0…

oracle备份磁盘头,ASM 磁盘头信息备份

ASM磁盘头信息保存在每个磁盘的前4K里面,这个信息的备份对于ASM的恢复非常重要,有下面的几种方法1.直接做dd来备份磁盘的前4K,磁盘头信息丢失时,dd回来 备份:dd if/dev/raw/raw1 of/gyj/asmheader.dd bs4096 coun…

var s=+newDate();的用法,表示对应的时间截

var snewDate(); var snewDate(); 解释如下:是不存在的; new Date()是一个东西; 相当于.valueOf(); 看到回复补充一下.getTime()这个也是得到毫秒数 //4个结果一样返回当前时间的毫秒数alert(new Date());alert(new Date);var snew Date();alert(s.valueOf()); alert(s.getTime…

asp控制oracle,asp下用OracleInProcServer完成对Oracle的连接和操作

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼tblnamerequest("tb")Dim objOraSession,objOraDbDim strDbUser,strDbPwd,strDbConnCall ConnectDB()Sub ConnectDB() 连接数据库On Error Resume NextstrDbUser "liujincai" 连接用户名strDbPwd "ljc1…

jitpack让使用第三方依赖库更简单

在开发过程中,使用第三方优秀依赖库是个很常见的问题,有的时候是maven,或者gradle, 或者sbt,大部分库工程,都会有对应的gradle,maven依赖代码,但是有的没有,尤其是使用的snapshot的依赖的时候,虽…

linux用户命令快捷链接,linux简单命令

linux系统命令是最基础也是最重要的部分,下面由学习啦小编为大家整理了linux简单命令的相关知识,希望对大家有帮助!linux简单命令一、文件和目录家目录为 /home/user 或者 ~目录分为两种:绝对目录,从根目录开始写相对目…

Swift - 发送消息(文本,图片,文件等)给微信好友或分享到朋友圈

通过调用微信提供的API接口,我们可以很方便的在应用中发送消息给微信好友,或者分享到朋友圈。在微信开发平台(https://open.weixin.qq.com)里,提供了详细的说明文档和样例。但由于提供的样例是使用Objective-C写的&…

linux怎么改程序图标,如何在Ubuntu Unity上修改应用程序图标

这篇文章将教大家在Ubuntu Unity上修改应用程序图标,这个教程适合于Ubuntu 14.04, Ubuntu 13.10, Ubuntu 12.04 等使用Unity作为默认桌面环境的发行版。在Unity桌面环境,程序启动器实际上以.desktop为后缀的文件的形式存储在电脑上,所以我们可…

php 大流量网站访问

1:确认服务器硬件能否支持当前流量 2:数据库优化,用到什么字段查什么字段,减轻查询负担。 3:静态化,缓存,减少连库操作。 4:禁止外部盗链,减轻负载压力。 5:控…

linux内核 默认路由表,Linux 默认路由表 0.0.0.0

netstat -nr命令会显示路由表的内容。网关为0.0.0.0的网络通常是直连到网络设备上的。因为到自己的直连设备上是不需要网关的,所以0.0.0.0的网关地址是正常的。目的地址是0.0.0.0的路由是你的缺省网关。在这个例子里,有两个网关,缺省的并且是到255.255.2…

htop linux命令详解,htop使用详解

在管理进程时通常要借助一些工具,比较常用的就是ps和top了;不过CentOS还为我们提供了一个更加强大的工具htop,下面就来了解一下此工具的使用方法。一、安装htophtop工具在epel源中提供,请自行配置epel源,也可以直接下载…

iOS 中的 xml 解析

在ios 中解析xml 的方法有很多种 1.苹果原生 NSXMLParser:SAX方式解析,使用简单 2.第三方框架 libxml2:纯c语言,默认包含在ios sdk中,同时支持DOM 和 SAX 方式解析 GDataXML : DOM方式解析,由谷歌开发,基于…

Android Termux安装SSH结合内网穿透实现远程SFTP文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

linux上clisp运行lisp,apache - 重新访问linux + apache2 + mod_lisp + CLISP - 堆栈内存溢出

CLISP已安装并成功运行:(加载“ modlisp-clisp”)(modlisp:modlisp-server)运行正常,即无休止Python可通过localhost在/ usr / lib / cgi-bin中正常工作试图使clisp服务器在/ var / www / html / lsp中工作通过localhost / lsp打印的浏览器访…

linux解压war包乱码,linux中zip解压乱码解决方法

在windows上压缩的文件,是以系统默认编码中文来压缩文件。由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。有2种方式解决问题:1、通过unzip行命令解压,指定字符集unzip -O …

Android沉浸式通知栏设计

转载博客:http://www.2cto.com/kf/201503/381348.html Android4.4新特性,系统状态栏一体化。 实现的步骤主要有以下几点: 1.android4.4 以上版本 2.设置app全屏: 方法:在AndroidManifest.xml中设置android:theme"…

linux火狐自动更新,CentOS 7手动更新firefox | Linux系统运维联盟

这里针对的是firefox无法检测到新版本,需要手动升级。1.下载新版的irefox,一般是.tar.gz压缩包。2.tar zxvf 解压到/usr/lib64 。(只要是原版firefox文件的目录就对了)3.cd /usr/lib64/firefox4../firefox-bin 完成有的更新好之后可能会无法播放视频&a…