ITPUB??ì3
2010数据库技术大会
ITPUB论坛 » Oracle数据库管理 » 系统宕机导致数据库自动更改字符集

您有 2 条公共消息
  • 来自: 公共消息 标题: 新开"PLM/PDM产品 ... 内容: 讨论范围包括:产品研发管理(PDM),产品生命周期管理(PLM),工艺/ ...
  • 来自: 公共消息 标题: 2010数据库技术大 ... 内容: “2010数据库技术大会”将于2010年4月2日~4月3日,在北京歌华开元大酒 ...

    标题: [原创] 系统宕机导致数据库自动更改字符集
    离线 kwin
    中级会员


    精华贴数 0
    个人空间 0
    技术积分 540 (4253)
    社区积分 486 (1793)
    注册日期 2004-11-17
    论坛徽章:4
    ITPUB北京2009年会纪念徽章生肖徽章2007版:狗生肖徽章2007版:鼠生肖徽章2007版:鸡  
          

    发表于 2006-6-8 09:09 
    系统宕机导致数据库自动更改字符集

    数据库为 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 中的字符集给更改了。最后我们将系统中的字符集改回来系统就恢复正常了。


    只看该作者    顶部
    离线 zhxx_ora
    高级会员



    精华贴数 0
    个人空间 0
    技术积分 2820 (662)
    社区积分 15 (10649)
    注册日期 2005-9-21
    论坛徽章:2
    授权会员     
          

    发表于 2006-6-8 09:12 
    系统在第一次宕机起来后就自已将 controlfile 中的字符集给更改了。

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


    __________________
    >>
    只看该作者    顶部
    离线 kwin
    中级会员


    精华贴数 0
    个人空间 0
    技术积分 540 (4253)
    社区积分 486 (1793)
    注册日期 2004-11-17
    论坛徽章:4
    ITPUB北京2009年会纪念徽章生肖徽章2007版:狗生肖徽章2007版:鼠生肖徽章2007版:鸡  
          

    发表于 2006-6-8 09:22 
    我们当时也没想到会这样,后来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)


    只看该作者    顶部
    离线 cjf107
    高级会员


    精华贴数 0
    个人空间 0
    技术积分 13366 (103)
    社区积分 27225 (58)
    注册日期 2003-11-11
    论坛徽章:64
    NBA季后赛纪念徽章NBA常规赛纪念章欧洲冠军杯纪念徽章NBA常规赛纪念章会员2007贡献徽章2010新春纪念徽章
    2009新春纪念徽章     

    发表于 2006-6-8 09:32 
    涨见识了。


    __________________
    我懒但想学习
    只看该作者    顶部
    离线 zhxx_ora
    高级会员



    精华贴数 0
    个人空间 0
    技术积分 2820 (662)
    社区积分 15 (10649)
    注册日期 2005-9-21
    论坛徽章:2
    授权会员     
          

    发表于 2006-6-8 09:35 
    Oracle的说法是,数据库在启动时检查到数据字典中的字符集与 controlfile 中的不一致,就到 controlfile 中的字符集给改了。

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


    __________________
    >>
    只看该作者    顶部
    离线 kwin
    中级会员


    精华贴数 0
    个人空间 0
    技术积分 540 (4253)
    社区积分 486 (1793)
    注册日期 2004-11-17
    论坛徽章:4
    ITPUB北京2009年会纪念徽章生肖徽章2007版:狗生肖徽章2007版:鼠生肖徽章2007版:鸡  
          

    发表于 2006-6-8 09:38 


    QUOTE:
    最初由 zhxx_ora 发布
    Oracle的说法是,数据库在启动时检查到数据字典中的字符集与 controlfile 中的不一致,就到 controlfile 中的字符集给改了。

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


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


    只看该作者    顶部
    离线 oldboy
    高级会员



    精华贴数 1
    个人空间 0
    技术积分 6148 (269)
    社区积分 30 (7594)
    注册日期 2003-1-21
    论坛徽章:9
    ITPUB元老会员2007贡献徽章会员2006贡献徽章授权会员生肖徽章2007版:鸡ITPUB新首页上线纪念徽章
    数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星   

    发表于 2006-6-8 09:44 
    没有听说过,关注.


    __________________
    我的BLOG:http://oldboy.itpub.net
    只看该作者    顶部
    在线/呼叫 ZALBB


    精华贴数 8
    个人空间 0
    技术积分 40298 (23)
    社区积分 18229 (107)
    注册日期 2001-10-15
    论坛徽章:129
          
          

    发表于 2006-6-8 09:48 


    QUOTE:
    最初由 cjf107 发布
    涨见识了。

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


    __________________
    对内,共匪什么都要,就是不要脸;对外,共匪什么都不要,就是要脸。
    只看该作者    顶部
    离线 kwin
    中级会员


    精华贴数 0
    个人空间 0
    技术积分 540 (4253)
    社区积分 486 (1793)
    注册日期 2004-11-17
    论坛徽章:4
    ITPUB北京2009年会纪念徽章生肖徽章2007版:狗生肖徽章2007版:鼠生肖徽章2007版:鸡  
          

    发表于 2006-6-8 10:44 


    QUOTE:
    最初由 ZALBB 发布


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


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


    只看该作者    顶部
    离线 biti_rainy
    人生就是如此



    精华贴数 39
    个人空间 0
    技术积分 112581 (4)
    社区积分 12102 (162)
    注册日期 2001-12-12
    论坛徽章:53
    现任管理团队成员ITPUB元老年度论坛发贴之星年度论坛发贴之星ITPUB北京2009年会纪念徽章ITPUB北京九华山庄2008年会纪念徽章
    管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章

    发表于 2006-6-8 11:10 
    肯定是有人手工update 过 props$ ,数据库正常情况下根本就不知道被直接update 过,所以一直运行正常。

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


    __________________
    只看该作者    顶部
    相关内容


    CopyRight 1999-2006 itpub.net All Right Reserved.
    北京皓辰网域网络信息技术有限公司. 版权所有
    E-mail:Webmaster@itpub.net
    网站律师 隐私政策 知识产权声明
    京ICP证:060528号 联系我们