怎么改oracle字符集 更改oracle字符集

如何查看和修改Oracle数据库服务器端的字符集?A、oracle server 端字符集查询
select userenv('language') from dual
其中NLS_CHARACTERSET 为server端字符集
NLS_LANGUAGE 为 server端字符显示形式
B、查询oracle client端的字符集
$echo $NLS_LANG
如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集 。如果还是有乱码 , 则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题 。
C、server端字符集修改
将数据库启动到RESTRICTED模式下做字符集更改:
SQL conn /as sysdbaConnected.
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集 。如果还是有乱码 , 则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题 。
. 1.oracle server端字符集查询复制代码代码如下:select userenv('language') from dual;server字符集修改:将数据库启动到RESTRICTED模式下做字符集更改:??
oracle10g服务器端是安装在AIX 6.0系统上,客户端是安装在windows server 2008 系统上,客户端与服务器已成功连接 , 但是数据库表里的中文字无法显示,显示为“?”,用SQLPLUS查得服务器端的字符集为AL16uTF16,如何修改该字符集使之支持中文呢?另外oracle10G客户端的字符集需不需要设置,如何查看和设置呢?
怎么修改oracle数据库的字符集如何更改Oracle字符集
国内最常用的Oracle字符集ZHS16GBK(GBK 16-bit Simplified Chinese)能够支持繁体中文 , 并且按照2个字符长度存储一个汉字 。UTF8字符集是多字节存储,1个汉字(简体、繁体)有时采用3个字符长度存储 。
Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是说UTF8是ZHS16GBK的严格超集 。
对于子集到超集的转换 , Oracle是允许的 , 但是对于超集到子集的转换是不允许的 。一般对于超集到子集的转换,建议是通过dbca删除原来的数据库,重新再建库,选择正确的字符集,然后导入备份 。
我的方案是怎么改oracle字符集:先备份数据,然后强制转换字符集从UTF8到ZHS16GBK,然后导入备份数据 。如果不行,才来重新建库 , 设置字符集ZHS16GBK , 导入备份数据 。如果这还不行,就把更改字符集从ZHS16GBK到UTF8(这是安全的),再导入备份数据,恢复到原始状况 。这样就有可能避开重新建库的麻烦 。
1. 备份数据库中所有用户的数据
以oracle用户登陆,执行以下命令
# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.UTF8”
保持与数据库服务器端一致,这样在exp导出时 , 就不会存在字符的转换了 , 备份最原始的数据 。
2. 评估UTF8转换成ZHS16GBK的风险
转换之前,要使用Oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的损坏情况 。如果评估情况糟糕,那就绝对要放弃了 。
先安装属于 CSMIG 用户的一套表和过程 。以oracle用户登陆UNIX,
#sqlplus “/ as sysdab”
SQL@$ORACLE_HOME/ rdbms/admin/csminst.sql
SQLexit
# $ORACLE_HOME\bin\csscan -help
可以更清楚如何使用csscan 。
# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3csscan.log
以上命令意思是扫描用户怎么改oracle字符集:mmsc中的所有数据 , 从字符集UTF8更改为ZHS16GBK的转换情况 。然后得到三个文件:scan.txt、scan.out、scan.err 。
查看scan.out , scan.err , 可以看出mmsc用户下的所有的数据都是可以转换的 , 并且没有出现转换“Exceptional”的情况 , 因此可以更放心一点 。
3. 更改数据库的字符集为ZHS16GBK
前面说过 , 通过命令“Alter Database Characeter Set XXXX” , 实现从超集到子集的转换,在Oracle是不允许的 。但是该命令,提供这样的命令方式:
Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX
这是Oracle的非公开命令 。“在使用这个命令时,Oracle会跳过所有子集及超集的检查,在任意字符集之间进行强制转换,所以,使用这个命令时怎么改oracle字符集你必须十分小心,你必须清楚这一操作会带来的风险” 。
以oracle用户登陆UNIX,
#sqlplus “/ as sysdba”
SQL SHUTDOWN IMMEDIATE;
SQL STARTUP MOUNT;
SQL ALTER SESSION SET SQL_TRACE=TRUE;
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 CHARACTER SET ZHS16GBK;
//如果不使用“INTERNAL_USE”参数 , 系统会提示出错:
//ERROR at line 1:
//ORA-12712: new character set must be a superset of old character set
SQL ALTER SESSION SET SQL_TRACE=FALSE;
SQL SHUTDOWN IMMEDIATE;
SQL STARTUP;
此时,检查一下数据库的字符集是否更改过来
SQL select value$ from props$ where name=’NLS_CHARACTERSET’;
VALUE$
-----------------
ZHS16GBK
紧接着检查一下数据库中简体中文、繁体中文是否正常,不会出现乱码 。
SQLselect spid,spname,spshortname from spinfovisual_hk
…...
非常不幸,我看到了一堆乱码 , 这也证明了Oracle不支持字符集从超集到子集的更改 , 当时心里很紧张,很怕失败,从而恢复到原样 。
但是根据以前的验证,把UTF8下的备份导入到ZHS16GBK中去,是OK的,所以继续尝试 。
4. 导入备份的用户数据
还是以oracle用户登陆UNIX, 先删除库中的用户mmsc:
#sqlplus “/ as sysdba”
SQLdrop user mmsc cascade;
SQLexit
再运行createuser.sql , 生成mmsc用户 。
然后使用原来的备份文件,导入到mmsc用户中:
注意:先设置NLS_LANG要与当前数据库的一致:ZHS16GBK 。这样,导出时用户会话的NLS_LANG为UTF8,与原先的数据库字符集一致怎么改oracle字符集;现在为ZHS16GBK,与此时的数据库字符集一致 。这样,导入时,就会进行字符转换 。
# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.ZHS16GBK”
#imp mmsc/mmsc@mdspdb file=DSMPD113_user_mmsc.dmp ignore=y fromuser=mmsc touser=mmsc
马上查看数据库中简体、繁体中文 , 哈哈,没有乱码了,一切显示正常 。
紧接着进行验证,也证明了:1个汉字此时只占用2个字符长度 。问题解决了!
如何修改Oracle数据库字符集oracle数据库的字符集更改
A、oracle server 端 字符集查询
select userenv('language') from dual
其中NLS_CHARACTERSET 为server端字符集
NLS_LANGUAGE 为 server端字符显示形式
B、查询oracle client端的字符集
$echo $NLS_LANG
如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集 。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题 。
C、server端字符集修改
*****************************************************************
*更改字符集步骤方法(WE8ISO8859P1 -- ZHS16GBK)*
*****************************************************************
SQL
将数据库启动到RESTRICTED模式下做字符集更改:
SQL conn /as sysdba
Connected.
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup mount
ORACLE instance started.
Total System Global Area236000356 bytes
Fixed Size451684 bytes
Variable Size201326592 bytes
Database Buffers33554432 bytes
Redo Buffers667648 bytes
Database mounted.
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 select * from v$nls_parameters;

19 rows selected.
重启检查是否更改完成:
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup
【怎么改oracle字符集 更改oracle字符集】ORACLE instance started.
Total System Global Area236000356 bytes
Fixed Size451684 bytes
Variable Size201326592 bytes
Database Buffers33554432 bytes
Redo Buffers667648 bytes
Database mounted.
Database opened.
SQL select * from v$nls_parameters;

19 rows selected.
D、client端字符集修改
在 /home/oracle与 /root用户目录下的.bash_profile中
添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 语句
关闭当前ssh窗口 。
关于怎么改oracle字符集和更改oracle字符集的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读