Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1084552
  • 博文数量: 282
  • 博客积分: 10865
  • 博客等级: 上将
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-12 12:35
文章存档

2017年(1)

2016年(3)

2015年(10)

2014年(12)

2013年(5)

2012年(10)

2011年(29)

2010年(3)

2008年(13)

2007年(92)

2006年(104)

我的朋友

分类: Oracle

2006-07-18 10:58:13

在用这个字符集ZHS16CGB231280,“喆”就会变成“?”。数据库创建后,字符集能改,但很麻烦。
以下更改,仅作参考(本人测试成功),如果出现问题,本人概不负责。
  ZHS16CGB231280 和 zhs16gbk 两种字符集不是相互兼容关系,后者比前者大,两者绝大部分是 包容的,但也有交集。因此,使用 ALTER DATABASE CHARACTER SET ZHS16GBK; 这个命令 是不能更改字符集的,但可以在此命令加入一个 INTERNAL_USE 选项(从名字就可以看出是oracle 内部使用的啦。)来永久更改字符集:
ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
这样更改没有破坏数据字典的风险。但是已经存储在数据文件中的一些生僻汉字的内码并不会
改变,这只能通过exp/imp 转变。在我们的测试中,数据库改成ZHS16GBK后,不用exp/imp 转变,到目前为止还没有碰到显示错误的汉字(前提是客户端字符集设置为 ZHS16GBK ),而那些未改字符集前就为乱码的汉字还是显示为乱码。对100G以上的db,通过exp/imp 转变是痛苦的,我们使用INTERNAL_USE 选项改字符集前,先用817 提供的新工具csscan 对旧库进行扫描,得出所有不兼容的记录和字段值,生成一个update 脚本,在改完字符集的库中运行,进行 内码转换。我们的几个大库都是这样改的。

步骤如下:
1. Make sure the parallel_server parameter in INIT.ORA is set to false
or it is not set at all.

2. Execute the following commands in Server Manager (svrmgrl):

SVRMGR> SHUTDOWN IMMEDIATE; -- or NORMAL

SVRMGR> STARTUP MOUNT;
SVRMGR> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SVRMGR> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SVRMGR> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SVRMGR> ALTER DATABASE OPEN;
SVRMGR> ALTER DATABASE [NATIONAL] CHARACTER SET INTERNAL_USE ;
SVRMGR> SHUTDOWN IMMEDIATE; -- OR NORMAL
SVRMGR> STARTUP RESTRICT;

3. Restore the parallel_server parameter in INIT.ORA, if necessary.

4. Execute the following commands in Server Manager:

SVRMGR> SHUTDOWN IMMEDIATE; -- OR NORMAL
SVRMGR> STARTUP;

阅读(1493) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~