ORACLE修改字符集 ALTER DATABASE character set INTERNAL_USE AL32UTF8;
服务端修改字符集有点麻烦,要使客户端字符集与之一致,还有以前的dmp文件可能作废,
最好是修改client端的会话的字符集环境。
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
immediate;
SQL>startup;
有2种方法可行。
1 如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换。
2 通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。
在rac环境下修改oracle字符集,可以通过如下方法:
1、查询当前的字符集
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
--------------------------------------------------------------------------------
AMERICAN_AMERICAWE8ISO8859P1
sql> alter system set cluster_database=false scope=spfile sid='jscn1';
红色部分对于单实例的是不要加的,对于rac来说必须加上,不然会报
ORA-12720: operation requires database is in EXCLUSIVE mode
2、停止数据库(rac1和rac2都要停止)
SQL> shutdown immediate;
Database closed
Database dismounted
ORACLE instance shut down
3、启动数据库(只在rac1上面操作)
SQL> startup nomount;
ORACLE instance started
Total System Global Area 1577058304 bytes
Fixed Size 2084264 bytes
Variable Size 436208216 bytes
Database Buffers 1124073472 bytes
Redo Buffers 14692352 bytes
SQL> Alter database mount exclusive;
Database altered
SQL> Alter system enable restricted session;
System altered
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered
SQL> Alter database open;
Database altered
4、修改字符集
SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk;
sql> alter system set cluster_database=true scope=spfile sid='jscn1';
5、验证(两个节点都要测)
Database altered
SQL> SHUTDOWN IMMEDIATE;
Database closed
Database dismounted
ORACLE instance shut down
SQL> startup;
ORACLE instance started
Total System Global Area 1577058304 bytes
Fixed Size 2084264 bytes
Variable Size 436208216 bytes
Database Buffers 1124073472 bytes
Redo Buffers 14692352 bytes
Database mounted
Database opened
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
--------------------------------------------------------------------------------
AMERICAN_AMERICAZHS16GBK
6、启动rac2,验证rac2的字符集(废话,公用一个数据库,当然一样了)
[a]数据库服务器字符集select from nls_database_parameters,其来源于props$,是表示数据库的字符集。客户端字符集环境select from nls_instance_parameters,其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表会话字符集环境 select from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。客户端的字符集要求与服务器一致,才能正确显示数据库的非ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是american_americazhs16gbk。[a]8i以上版本可以通过alter database来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误。startup nomount;alter database mount exclusive;alter system enable restricted session;alter system set job_queue_process=0;
网站模板库 » ORACLE修改字符集 ALTER DATABASE character set INTERNAL_USE AL32UTF8;
0条评论