分享
 
 
 

更新系统表(props$)修改字符集

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

今天在Itpub上再次看到字符集变化导致的问题,作者给出的案例是这样的:

数据库为 9.2.0.7.0 ,OS : Solaris Operating System (SPARC 64-bit)

起因是这样的,我的一客户那里UPS出现故障导致系统宕机,

然后起来,大约过了10来分钟,忽然操作系统找不到磁盘又一次宕机,

然后再起来,有用户报一个SQL用不上索引.

这个SQL是这样的:

select * from ww.test20060504 dg where dg.user_number='7290'

第一个想法是给那个索引做分析,但还是不行,我们就对这个表做了一次分析,但执行计划没有什么改变 。

我们尝试加提示(包括加 rule ),但也不行,用户反映是有一批这样类似的都用不到索引。

然后通过 10053 做 trace 居然发现优化器根本没有考虑索引。开始怀疑这个数据库的数据字典可能有问题。

我们只好用一个笨方法,将其中一个表导到测试库上去测试,在导出的过程中居然发现系统报错

EXP-00056: Oracle error 6552 encountered

ORA-06552: PL/SQL: Compilation unit analysis terminated

ORA-06553: PLS-553: character set name is not recognized

居然系统报字符集的错!

.....

真是晕呀!我们马上仔细检查了一个 alter 文件发现了一条信息,系统在第一次宕机起来后就自已将 controlfile 中的字符集给更改了。最后我们将系统中的字符集改回来系统就恢复正常了。

警告日志中的信息是这样的:

SMON: enabling tx recovery

Mon Jun 5 09:52:52 2006

Updating character set in controlfile to ZHS16CGB231280

replication_dependency_tracking turned off (no async multimaster replication found)

其实这个信息是手工更新过数据库字符集后,重新启动,数据库比较数据库和控制文件信息,根据数据库字符集修改控制文件字符集导致的.

我在以前作过这样的测试,参考:

http://www.eygle.com/special/NLS_CHARACTER_SET_03.htm

通过更新props$的方式修改字符集是非常危险的,我在以上的文章中有过具体说明,在Oracle8i中,假如修改了错误的字符集,那么重新启动后数据库将无法启动.

假如需要提醒的话,我们需要再警世一次:

绝对不要用update系统表(props$)的方式来修改数据库字符集.

但是从Oracle9i开始,Oracle在启动时跳过了这个检查,即使修改了错误的字符集,也仍然可以启动,数据库启动时会将控制文件中的字符集更改为缺省的US7ASCII.

具体可以看看以下的测试:

SQL> select value$ from props$ where name='NLS_CHARACTERSET';

VALUE$

----------------------------------------------------------

ZHS16GBK

SQL> update props$ set value$='EYGLE'

2 where name='NLS_CHARACTERSET';

1 row updated.

SQL> commit;

Commit complete.

SQL> select value$ from props$ where name='NLS_CHARACTERSET';

VALUE$

-----------------------------------------

EYGLE

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 126948772 bytes

Fixed Size 452004 bytes

Variable Size 92274688 bytes

Database Buffers 33554432 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL> select value$ from props$ where name='NLS_CHARACTERSET';

VALUE$

----------------------------------------------

EYGLE

此时警告日志中会记录如下信息:

Thu Jun 8 16:28:05 2006

SMON: enabling cache recovery

SMON: enabling tx recovery

Thu Jun 8 16:28:05 2006

Updating character set in controlfile to US7ASCII

replication_dependency_tracking turned off (no async multimaster replication found)

Completed: ALTER DATABASE OPEN

不同版本中,Oracle行为已经不同.

原文地址:http://www.eygle.com/archives/2006/06/dba_update_prop.Html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有