oracle查看字符集后修改oracle服务端和客户端字符集的步骤


在Oracle数据库中,查看和修改字符集是数据库管理员(DBA)经常需要执行的任务。以下是Oracle查看字符集后修改Oracle服务端和客户端字符集的步骤:

### 一、查看字符集

#### 1. 查看服务端字符集

* 使用SQL查询语句:


SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

或者


SELECT USERENV('LANGUAGE') FROM DUAL;

这些查询将返回数据库的字符集信息。

* 也可以通过Oracle SQL Developer或Oracle Enterprise Manager等图形界面工具查看字符集信息。

#### 2. 查看客户端字符集

客户端字符集通常通过环境变量`NLS_LANG`来设置,可以通过以下命令查看(在Unix/Linux环境下):


echo $NLS_LANG

在Windows环境下,可以通过“环境变量”设置或注册表查看(不推荐直接修改注册表,除非非常熟悉)。

### 二、修改字符集

#### 1. 修改服务端字符集

修改Oracle数据库的服务端字符集是一个敏感且复杂的操作,需要谨慎进行。以下是一般步骤:

* **关闭数据库**:


  SHUTDOWN IMMEDIATE;
  

* **以MOUNT方式启动数据库**:


  STARTUP MOUNT;
  

* **开启RESTRICTED SESSION模式**:


  ALTER SYSTEM ENABLE RESTRICTED SESSION;
  

* **停止后台作业**:


  ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
  ALTER SYSTEM SET AQ_TM_PROCESSES=0;
  

* **以只读方式打开数据库**(如果需要):


  ALTER DATABASE OPEN;
  

* **修改字符集**:

如果新字符集是旧字符集的超集,则可以直接使用:


  ALTER DATABASE CHARACTER SET 新字符集;
  

如果新字符集不是旧字符集的超集,可以使用`INTERNAL_USE`选项强制更改(但请注意,这可能会导致数据问题):


  ALTER DATABASE CHARACTER SET INTERNAL_USE 新字符集;
  

* **关闭并重启数据库**:


  SHUTDOWN IMMEDIATE;
  STARTUP;
  

* **验证修改**:

使用之前的查询语句验证字符集是否已成功更改。

#### 2. 修改客户端字符集

客户端字符集的修改通常涉及设置或修改环境变量`NLS_LANG`。

* 在Unix/Linux环境下,可以在用户的`.bash_profile`或`.bashrc`文件中添加或修改以下行:


  export NLS_LANG="新字符集"
  

例如,对于UTF-8字符集:


  export NLS_LANG="AMERICAN_AMERICA.UTF8"
  

* 修改后,需要重新加载配置文件(如执行`source ~/.bash_profile`)或重新登录会话。

* 在Windows环境下,可以通过“系统属性”中的“环境变量”设置来修改`NLS_LANG`。

请注意,修改字符集可能会对数据库产生重大影响,因此在执行任何修改之前,强烈建议备份数据库并进行充分的测试。