修改 Oracle 数据库实例字符集

Posted Abeam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修改 Oracle 数据库实例字符集相关的知识,希望对你有一定的参考价值。

Ø  简介

Oracle 中创建数据库实例后,就会有对应使用的编码字符集。当我们设置的字符集与操作系统或者其他软件字符集不一致时,就会出现中文乱码等情况。此时我们就需要修改 Oracle 数据库使用的字符集,下面是修改 Oracle 字符集的具体步骤:

 

Oracle 一般使用以下两种字符集:

clip_image001

1.   SIMPLIFIED CHINESE_CHINA.ZHS16GBK

GBK 16-bit Simplified Chinese 能够支持繁体中文,并且按照2个字符长度存储一个汉字。

 

2.   SIMPLIFIED CHINESE_CHINA.AL32UTF8

多字节存储,1个汉字(简体、繁体)有时采用3个字符长度存储。Oracle支持字符集的更改,但是UTF8Oracle中最大的字符集,也就是说UTF8ZHS16GBK的严格超集。

 

首先,我们查看数据库实例所使用的字符集:

sqlplus "/as sysdba"

select userenv(\'language\') from dual;

clip_image002

当前(orcl)使用的是 CHINESE_CHINA.AL32UTF8 字符集,下面进行修改:

 

1.   运行 CMD

 

2.   进入指定数据库实例

set ORACLE_SID=ORCL     #"ORCL"表示需要修改字符集的数据库实例名

 

3.   输入命令

sqlplus /nolog

 

4.   登录数据库

conn /as sysdba

 

5.   关闭数据库实例

SHUTDOWN IMMEDIATE;

clip_image003

 

6.   打开控制文件

STARTUP MOUNT;

clip_image004

 

7.   开启限制会话模式

ALTER SYSTEM ENABLE RESTRICTED SESSION;

--ALTER SYSTEM DISABLE RESTRICTED SESSION;  #取消限制会话模式

 

8.   设定job队列可以启动的进程数

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

说明:JOB_QUEUE_PROCESSES=0,则DBMS_JOB作业和Oracle Scheduler作业将不会在实例上运行。参考:https://blog.csdn.net/leshami/article/details/8694772

 

9.   禁用队列监视器协调器

ALTER SYSTEM SET AQ_TM_PROCESSES=0;

 

10.  修改并打开数据库

ALTER DATABASE OPEN;

 

11.  修改数据库字符集

ALTER DATABASE CHARACTER SET ZHS16GBK;

当提示我们:新字符集必须为旧字符集的超集合,使用以下命令:

ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;

clip_image006

 

12.  查看参数列表

select * from v$nls_parameters;

clip_image007

可以看到,此时已经改为了"ZHS16GBK"字符集。

 

13.  设置完成后,关闭数据库

SHUTDOWN IMMEDIATE;

 

14.  再次打开数据库

STARTUP OPEN;

clip_image008

 

15.  这时我们再使用之前的方式查看字符集

select userenv(\'language\') from dual;

clip_image009

OKORLC 数据库的字符集就改为了"CHINESE_CHINA.ZHS16GBK"

以上是关于修改 Oracle 数据库实例字符集的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库实例名如何修改

ORACLE_修改实例的内存大小

windows多个oracle实例下sqlplus登录指定实例

oracle单实例怎样修改端口

Oracle12c中配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB)

5修改oracle的字符集