oracle ORA-12899错误的解决方法

本文详细介绍了如何解决Oracle数据库在字符集转换过程中遇到的ORA-12899错误。通过修改数据库字符集、调整表字段长度或重建数据库的方式,可以有效解决字符集不兼容的问题。步骤包括关闭数据库、修改字符集、重新启动数据库等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现ORA-12899,是字符集引起的:
       中文在UTF-8中占3个字节,ZHS16GBK中占2个字节,源dmp文件字符集是ZHS16GBK库里倒出来的数据,
现在要导入到目标字符集为UTF-8的库里,所以会出现ORA-12899。
 
所以只要修改一下ORACLE 的字符集就可以很好的解决这个问题。
 
修改办法:
数据库字符集在创建后原则上不能更改。不过有3种方法可行。
 
1.增加表字段的长度(这个方法是自己试出来的,下边的两个方法来自网络文章)。
 
比如:原来的表字段长度为varchar2(20),把它增加到varchar(30)即可。如果还不行,就继续增大,直到成功为止。

2. 如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换。

3. 通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,
 
只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。
 
开始-->运行-->cmd,之后输入:"sqlplussys/oracle@IP地址/orcl as SYSDBA"
如果不能正常进入,那就需要你手动输入用户名和密码,进入之后会出现
"SQL>"的提示,
按照下面给出的命令依次执行就可以了,
SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP MOUNT
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 CHARACTER SET ZHS16GBK ;
ALTER DATABASE CHARACTER SET ZHS16GBK
*ERROR at line 1:
ORA-12712: new character set must be a superset of old character set

报字符集不兼容,此时下INTERNAL_USE指令不对字符集超集进行检查:

SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP

这时候,这个ORA-12899就已经彻底解决了,就可以进行数据的导入了...

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值