分类:
2005-09-26 18:38:55
我们解决了上面的问题
问题在与oracle9i里 National Charset 边境上有错误
1,如果安装完Oracle 9i,National Charset里的Default Value,就是AL16UTF16.
如果打算把AL16UTF16换成UTF8
按照以前的方法
update sys.props$
set value$ = 'UTF8' where name = ''NLS_NCHAR_CHARACTERSET''; 就会出现上面的问题
在Oracle 里面没有完全反映Charset的信息
所以,在 Table里 Insert时, Value设置成AL16UTF16了,只有Default Space才设置成UTF8了..
2,所以应该这样换
$ 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 UTF8;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
按上面的做法就可以,但是可能会出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when
NCLOB data exists’ 这样的提示信息
要解决这个问题有两种方法
一个是,利用INTERNAL_USE 关键字修改区域设置,还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,
$ 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
如果按上面的做法做,National charset的区域设置就没有问题
=======================
非常感谢我的那位朋友