ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7995|回复: 67

[原创] 系统宕机导致数据库自动更改字符集 [复制链接]

注册会员

中级会员

精华贴数
0
技术积分
552
社区积分
527
注册时间
2004-11-17
论坛徽章:
4
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-11-23 21:42:02ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45生肖徽章2007版:狗
日期:2009-05-07 20:16:29
发表于 2006-6-8 09:09:16 |显示全部楼层
数据库为 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

居然系统报字符集的错!
后来通过查Metalink 上发的一篇文档 286964.1 ,里面提供了一个脚本来确认了系统中的字符集是有错的。

select distinct(nls_charset_name(charsetid)) CHARACTERSET, charsetid,
decode(type#, 1, decode(charsetform, 1, 'VARCHAR2', 2,
'NVARCHAR2','UNKOWN'),
9, decode(charsetform, 1, 'VARCHAR', 2, 'NCHAR VARYING',
'UNKOWN'),
96, decode(charsetform, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
112, decode(charsetform, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN'))
TYPES_USED_IN
from sys.col$ where charsetform in (1,2) and type# in (1, 9, 96,
112);


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

注册会员

高级会员

精华贴数
0
技术积分
2820
社区积分
15
注册时间
2005-9-21
论坛徽章:
2
授权会员
日期:2005-12-06 10:08:14
发表于 2006-6-8 09:12:57 |显示全部楼层
系统在第一次宕机起来后就自已将 controlfile 中的字符集给更改了。

-------????
这个好像没有科学根据呀!
能不能把此个时间点前后的alert***.log贴上来看看??

使用道具 举报

注册会员

中级会员

精华贴数
0
技术积分
552
社区积分
527
注册时间
2004-11-17
论坛徽章:
4
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-11-23 21:42:02ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45生肖徽章2007版:狗
日期:2009-05-07 20:16:29
发表于 2006-6-8 09:22:26 |显示全部楼层
我们当时也没想到会这样,后来Oracle的说法是,数据库在启动时检查到数据字典中的字符集与 controlfile 中的不一致,就到 controlfile 中的字符集给改了。
以下为 alter log 中给出的信息。
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)

使用道具 举报

注册会员

高级会员

精华贴数
0
技术积分
13366
社区积分
27225
注册时间
2003-11-11
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
发表于 2006-6-8 09:32:51 |显示全部楼层
涨见识了。

使用道具 举报

注册会员

高级会员

精华贴数
0
技术积分
2820
社区积分
15
注册时间
2005-9-21
论坛徽章:
2
授权会员
日期:2005-12-06 10:08:14
发表于 2006-6-8 09:35:12 |显示全部楼层
Oracle的说法是,数据库在启动时检查到数据字典中的字符集与 controlfile 中的不一致,就到 controlfile 中的字符集给改了。

--难道不正常的关闭、启动会造成“数据字典中的字符集与 controlfile 中的不一致”?

使用道具 举报

注册会员

中级会员

精华贴数
0
技术积分
552
社区积分
527
注册时间
2004-11-17
论坛徽章:
4
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-11-23 21:42:02ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45生肖徽章2007版:狗
日期:2009-05-07 20:16:29
发表于 2006-6-8 09:38:32 |显示全部楼层
最初由 zhxx_ora 发布
[B]Oracle的说法是,数据库在启动时检查到数据字典中的字符集与 controlfile 中的不一致,就到 controlfile 中的字符集给改了。

--难道不正常的关闭、启动会造成“数据字典中的字符集与 controlfile 中的不一致”? [/B]




关于这个问题,正在等 Oracle 进一步确认,我想他们是要去查一查源码了。

使用道具 举报

注册会员

高级会员

精华贴数
1
技术积分
6530
社区积分
35
注册时间
2003-1-21
论坛徽章:
11
数据库板块每日发贴之星
日期:2005-06-27 01:01:252010新春纪念徽章
日期:2010-03-01 11:08:29生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10数据库板块每日发贴之星
日期:2007-06-25 01:02:07授权会员
日期:2006-05-04 13:31:19ITPUB元老
日期:2006-05-04 13:38:51会员2006贡献徽章
日期:2006-04-17 13:46:34数据库板块每日发贴之星
日期:2006-02-27 01:02:14ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41
发表于 2006-6-8 09:44:20 |显示全部楼层
没有听说过,关注.

使用道具 举报

精华贴数
8
技术积分
49881
社区积分
22920
注册时间
2001-10-15
论坛徽章:
192
蜘蛛蛋
日期:2012-02-03 17:20:24咸鸭蛋
日期:2012-01-06 16:55:17ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41茶鸡蛋
日期:2011-12-01 22:49:59迷宫蛋
日期:2011-12-20 08:39:39蛋疼蛋
日期:2012-01-05 12:07:342012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20鲜花蛋
日期:2012-02-17 08:39:16
发表于 2006-6-8 09:48:15 |显示全部楼层
最初由 cjf107 发布
[B]涨见识了。 [/B]


晕,ORACLE真神通广大!这都行

使用道具 举报

注册会员

中级会员

精华贴数
0
技术积分
552
社区积分
527
注册时间
2004-11-17
论坛徽章:
4
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-11-23 21:42:02ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45生肖徽章2007版:狗
日期:2009-05-07 20:16:29
发表于 2006-6-8 10:44:24 |显示全部楼层
最初由 ZALBB 发布
[B]

晕,ORACLE真神通广大!这都行 [/B]


  所以各位 DBA 可要注意,不要使 ORACLE 随便出现 异常宕机的情况,不然很难说会有什么事情发生的。

使用道具 举报

超级版主

人生就是如此

精华贴数
39
技术积分
113462
社区积分
12389
注册时间
2001-12-12
论坛徽章:
80
ITPUB元老
日期:2005-02-28 12:57:00蛋疼蛋
日期:2011-05-27 08:50:45蜘蛛蛋
日期:2011-07-01 08:38:17ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2006-6-8 11:10:05 |显示全部楼层
肯定是有人手工update 过 props$ ,数据库正常情况下根本就不知道被直接update 过,所以一直运行正常。

重新启动的时候数据库去检查 props$ 结果发现和控制文件中不一样。

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部