ORACLE修改字符集 ALTER DATABASE character set INTERNAL_USE AL32UTF8;

ORACLE修改字符集 ALTER DATABASE character set INTERNAL_USE AL32UTF8;,第1张

服务端修改字符集有点麻烦,要使客户端字符集与之一致,还有以前的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;

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » ORACLE修改字符集 ALTER DATABASE character set INTERNAL_USE AL32UTF8;

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情