解决问题
(此文仅供Oracle初学者参考只用)
/**********************************************
** 文章名称:Oracle 10G命令--解决问题(linux)
** 版权信息:可以任意转载,但要注明出处及作者信息
** 作 者: 隗公万
** 时 间: 2008.3.27
***********************************************/
一、我的环境:
版 本: CentOS release 5 (Final)
内 核: 2.6.18-8.el5
数据库: oracle 10G
二、问题说明:
装了好久的操作系统和oracle 10G数据库一直都是只用些英文的数据和数字,今天突然有日文数据的需求了,所以就顺手插入些日文数据,问题随即就来了居然全是乱码或问号。顺便又试了试中文,居然效果跟日文一样都是乱码或问号。这下就有些郁闷了。只好去网上搜索,去DBA的群中问,无奈大家的方法都解决不了我的问题,最后他们都让我重装系统。唉……这个怎么能重装呢,里面还那么多东西呢!
三、解决问题:
首先,要先明白这个问题的原因:是由于数据库的客户端、服务器端、还有个会话的字符集不统一并且有无法显示日文的字符集。
然后,查看下系统的这些字符集,很简单直接输入一些命令就可以查到:
select * from sys.nls_database_parameters;--查看数据库参数
select * from sys.nls_instance_parameters; --查看客户端参数
select * from sys.nls_session_parameters; --查看会话的参数
最后,修改这些NLS_LANGUAGE的值,我的就修改成了一致的WE8ISO8859P1。并且在环境变量中增加了export NLS_LANGUAGE=Japanese_Japan.WE8ISO8859P1的环境变量。再从sqlplus登入oracle数据插入中文或者日文都可以正常显示了。到此问题就算是解决了。
四、一个简单步骤;
-- 先停止本数据库服务:
SQL>shutdown immediate;
-- 这些信息是更改正确字符集后的提示信息,一般应该是英文的)
--再启动数据库
SQL>startup restrict; --此处要注意启动方式要加 restrict参数
--修改字符集
SQL> alter session set sql_trace=true;
Session altered.
SQL> alter system enable restricted session;
System altered.
SQL> alter system set job_queue_processes=0;
System altered.
SQL> alter system set aq_tm_processes=0;
System altered.
SQL> alter database open;
Database altered.
SQL> alter database character set zhs16gbk;
alter database character set zhs16gbk
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
SQL>ALTER DATABASE character set INTERNAL_USE zhs16gbk;
Database altered.
--重启数据库
SQL> shutdown immediate;
SQL> startup;
|
阅读(2407) | 评论(0) | 转发(0) |