将windows下的10g数据库转移到11g下的数据库时遇到如下问题
来源:互联网 发布:网络支付 编辑:程序博客网 时间:2024/06/11 04:07
windows下的数据库字符集是AMERICAN_AMERICA.ZHS16GBK,linux下的字符集是AMERICAN_AMERICA.AL32UTF8
(1). 10数据库下的表结构导入到11下,发现数据的长度增加了,超过最大字段长度,导致插入失败。而且还有好多张表的字段都是这个问题。
报错内容
IMP-00019: row rejected due to ORACLE error 12899
IMP-00003: ORACLE error 12899 encountered
ORA-12899: value too large for column "NINGBO"."MENU"."NAME" (actual: 65, maximum: 63)
解决办法:
1. 先导入数据的表结构,rows=n参数表示不导入行数据,#imp username/passwd@netServicename tables=(tb1,tb2) file=/opt/xx.dmp rows=n
2. 修改varchar2字段类的长度,该示例将所有varchar2(63)类型的列改成了varchar(127)。
查询所有varchar2类型,长度为63的类名,并通过连接符"||"拼接出修改长度的语句。实现语句:select 'alter table '||t.table_name ||' modify('||t.column_name|| ' varchar2(127));' from user_tab_columns t where t.DATA_TYPE='VARCHAR2' and t.DATA_LENGTH=63;
将查询结构以csv文件类型导出到桌面,然后用txt编辑,删除第一行,将所有引号替换为空。将语句全部拷贝到pl/sql的sql语句窗口下执行即可。
(2) 如果插入的表数据行数太多,使用默认的缓冲区会导致缓冲区满了,结果数据回退插入失败。
错误内容:
IMP-00098: INTERNAL ERROR: impgst2
IMP-00028: partial import of previous table rolled back: 6539492 rows rolled back
IMP-00032: SQL statement exceeded buffer length
解决办法: 根据实际情况通过imp的buffer参数增加缓冲区的内存,buffer的单位是byte,下面语句指定的buffer是200M。
导入语句代码:impusername/passwd@netServicename fromuser=expuser touser=impuser file=/home/XXX.dmp IGNORE=Y buffer=204800000 log=/home/oracle/193.log
(3) 小心拿到的dump文件本身就有块损坏问题,折腾了我不少时间。由于错误日志删掉了,没法贴出错误代码。
错误描述:数据导入到一半以后,到了某一张表后,提示无法识别dump文件语句内容,然后出现大量乱码,kill掉imp进程后,控制台的命令符都是乱码。
解决办法: 重新导出原来数据库的数据。
(4) 数据导入时是根据表字母的顺序导入的,如果一张表的表结构中有外键,那么数据将无法导入。
解决办法1: 先到如主表,再导入其他表,在imp中添加tables=(tb1,tb2,tb3)。如果不知道那些是主表,可以采用先取消约束的办法,在imp中添加constraints=N。
我才用的解决办法:先导入表表结构,然后通过sql语句忽略掉所有约束。数据导入后别忘记开启约束。
禁止约束语句: select 'alter table '||t.table_name||' disable constraint '||t.constraint_name||' cascade;' from USER_CONSTRAINTS t;
启动约束命令: select 'alter table '||t.table_name||' enable constraint '||t.constraint_name||' ;' from USER_CONSTRAINTS t;
用法和修改列的类型长度一样。如果查询出来的有些约束的是已经被删掉的约束,带BIN开头的,忽略错误就行了,或者从文件中删掉该行语句。
注意: 导入数据时,imp语句中加IGNORE=Y参数,表示如果表结构已经存在,忽略创建,进行插入数据。
经验总结:
数据导入前
1. 先修改用户的环境变量: .bash_profile文件下添加 export NLS_LANG=AMERICAN_XXXX.XXX和export LNAG=en_US。省得出现提示信息中文乱码问题,要看英文提示,迟早要学会的。
2. 数据库不要开启归档模式,不然插入错误会把日志空间分分钟给你写满,让你的数据库连接工具等连不上数据库。
3. 数据导入时,dump文件的字符集是ZHS16GBK,数据库服务端和客户端都是AL32UTF8。导入数据会进行转化,不会有乱码
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
export client uses ZHS16GBK character set (possible charset conversion
- 将windows下的10g数据库转移到11g下的数据库时遇到如下问题
- 11g导出数据库脚本到linux下的10g命令
- Windows下Oracle 11g数据库卸载
- 在Windows 10系统下安装Oracle 11g数据库
- Centos下安装oracle 11g r2遇到的问题
- RAC环境下如何将数据库内存由200G调整到500G
- 数据库迁移 oracle 10g -> oracle 11g (windows下)
- Windows下虚拟ASM磁盘搭建基于ASM的Oracle 10g数据库系统
- Windows下 Oracle 10g 数据库安装后的配置方法步骤
- Windows下虚拟ASM磁盘搭建基于ASM的Oracle 10g数据库系统(1)
- Windows下虚拟ASM磁盘搭建基于ASM的Oracle 10g数据库系统(2)
- Windows下虚拟ASM磁盘搭建基于ASM的Oracle 10g数据库系统(3)
- Win 7下Oracle数据库的安装(Oracle 10g)
- Linux下Oracle数据库的安装(Oracle 10g)
- 12c Oracle_Home下的监听器监听11g数据库的问题
- 将windows下的PLSQL转移到Ubuntu上
- Linux下启动Oracle 11g数据库监听问题的解决
- Oracle 11g 手动创建数据库 windows下
- Android的休眠与唤醒 && 实例
- 定价策略
- 解决 Actionbar 溢出菜单不显示的问题
- Cage验证码生成器快速上手
- 常用社交网络(SNS、人人网、新浪微博)动态新闻(feed、新鲜事、好友动态)系统浅析
- 将windows下的10g数据库转移到11g下的数据库时遇到如下问题
- CentOS 6.5 升级内核到 3.10.28
- SSM框架——实现分页和搜索分页
- android 推送消息
- /sys/class/gpio 文件接口操作IO端口(s3c2440)
- 转: 安装Eclipse Maven插件的几种方法
- UI 设计的六个要素
- 黑马程序员_Java基础_网络编程_UDP传输协议编程,控制台聊天程序
- Leetcode中两个字符串匹配