一.字符集编码知识
查询字符集编码:
SQL> select userenv('language') from dual;
或者 select * from V$NLS_PARAMETERS;
或者 select * from nls_database_parameters where parameter like 'NLS%CHARACTERSET';
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
环境变量nls_lang便是由这三部分组成:
1. NLS_LANGUAGE
2. NLS_TERRITORY
3. NLS_CHARACTERSET
组成如下:NLS_LANG = language_territory.charset
即语言、地域和字符集,每个成分控制了 NLS 子集的特性。其中:
Language: 指定服务器消息的语言, 影响提示信息是中文还是英文
Territory: 指定服务器的日期和数字格式
Charset:指定字符集。
真正影响数据库的是第三部分,因此,我们将Charset修改为常用的AL32UTF8
二. 修改Oracle服务器端的字符集
SQL> shutdown immediate
SQL> startup nomount
SQL> alter database mount exclusive; --装载数据为专用的高级模式;
SQL> alter system enable restricted session; --启用受限制的session模式
SQL> alter system set job_queue_processes=0; --'maximum number of job queue slave processes' 设置工作队列的最大进程数为0
SQL> alter system set aq_tm_processes=0;
SQL> alter database open;
SQL> alter database character set AL32UTF8; --新的字符集必须支持旧的字符集(旧字符集的超集),
SQL> startup nomount
SQL> alter database mount exclusive; --装载数据为专用的高级模式;
SQL> alter system enable restricted session; --启用受限制的session模式
SQL> alter system set job_queue_processes=0; --'maximum number of job queue slave processes' 设置工作队列的最大进程数为0
SQL> alter system set aq_tm_processes=0;
SQL> alter database open;
SQL> alter database character set AL32UTF8; --新的字符集必须支持旧的字符集(旧字符集的超集),
报错:ORA-12712: new character set must be a superset of old character set,
SQL> shutdown immediate
SQL> startup
因为没有执行成功,所以再次查询依然是
ZHS16GBK
:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
于是重新关闭数据库,重新执行:
SQL>shutdown immediate;
等了好长时间没有反映,于是重新打开终端,然后重新进入数据库,报错!
ERROR:
ORA-28056: Writing audit records to Windows Event Log failed
ORA-28056: Writing audit records to Windows Event Log failed
ORA-28056: Writing audit records to Windows Event Log failed
ORA-28056: Writing audit records to Windows Event Log failed
查询alert_log后发现:
OSD-00001: 附加错误信息
O/S-Error: (OS 1502) 事件日志文件已满。
O/S-Error: (OS 1502) 事件日志文件已满。
原来是系统日志写满了,需要清除后在登录,于是按照 http://jingyan.baidu.com/article/ce436649f198503772afd355.html将系统日志清除,正常重启。
更详细的解决方案如下:
Cause
The Event Viewer log is full and not able to log any more events.