任何软件,特别是企业级系统组件的升级工作,是一个非常复杂的过程。升级路径、数据留存预案、回退步骤、原有业务功能冲击程度,都是需要反复测试论证的问题。所有的运维人员在遇到升级问题的时候,都要抱有谨慎的态度。
笔者最近接手一个升级过的系统,在测试过程中遇到了一些问题。经过查找MOS和网络资源加以解决。记录下来,留待需要的朋友。
推荐阅读:ORA-01172、ORA-01151错误处理 http://www.linuxidc.com/Linux/2013-06/86529.htmORA-00600 [2662]错误解决 http://www.linuxidc.com/Linux/2013-06/86528.htmORA-01078 和 LRM-00109 报错解决方法 http://www.linuxidc.com/Linux/2012-07/66044.htmORA-00471 处理方法笔记 http://www.linuxidc.com/Linux/2013-09/90017.htmORA-00314,redolog 损坏,或丢失处理方法 http://www.linuxidc.com/Linux/2013-09/90646.htmORA-00257 归档日志过大导致无法存储的解决办法 http://www.linuxidc.com/Linux/2013-09/90594.htm 1、环境介绍 接手的是一个升级到10.2.0.4的Linux版。 SQL> select * from v$version;BANNER-----------------------------------------------Oracle Database 10g Release 10.2.0.4.0 - 64bit ProductionPL/SQL Release 10.2.0.4.0 - ProductionCORE 10.2.0.4.0 ProductionTNS for Linux: Version 10.2.0.4.0 - ProductionNLSRTL Version 10.2.0.4.0 - Production 2、故障问题展示 在巡检中,发现记录Oracle内部作业调度的视图dba_scheduler_jobs不能支持查询。 SQL> select * from dba_scheduler_jobs; select * from dba_scheduler_jobsORA-01882: 未找到时区 1882错误的官方解释信息如下: [oracle@allfirst ~]$ oerr ora 188201882, 00000, "timezone region %s not found"// *Cause: The specified region name was not found.// *Action: Please contact Oracle Customer Support. 但是,并不是所有的字段都不支持查询动作。 SQL> select owner, job_name from dba_scheduler_jobs; OWNER JOB_NAME------------------------------ ------------------------------SYS SQLSCRIPT_4084880SYS AUTO_SPACE_ADVISOR_JOBSYS GATHER_STATS_JOBSYS FGR$AUTOPURGE_JOBSYS PURGE_LOGEXFSYS RLM$SCHDNEGACTIONEXFSYS RLM$EVTCLEANUPORACLE_OCM MGMT_STATS_CONFIG_JOBORACLE_OCM MGMT_CONFIG_JOB 9 rows selected 从字段性质看,值得怀疑与时区有关的字段是Time Zone。 SQL> select column_name, data_type from dba_tab_columns where owner="SYS" and table_name=upper("dba_scheduler_jobs") and data_type like "%TIME ZONE%";
COLUMN_NAME DATA_TYPE------------------------------ ------------------------------START_DATE TIMESTAMP(6) WITH TIME ZONEEND_DATE TIMESTAMP(6) WITH TIME ZONELAST_START_DATE TIMESTAMP(6) WITH TIME ZONENEXT_RUN_DATE TIMESTAMP(6) WITH TIME ZONE 但是,也并不是所有的time zone类型字段都不能显示。而且这样的问题不止出现在这个视图中。 SQL> select start_date from dba_scheduler_jobs;START_DATE-----------------------------------------------------19-3月 -12 05.48.23.742796 下午 +08:0028-1月 -14 02.42.49.000000 下午 +08:0013-5月 -13 07.40.35.640706 下午 +08:0013-5月 -13 07.32.40.314879 下午 +08:00 9 rows selected SQL> select * from SYS.scheduler$_job ;select * from SYS.scheduler$_job ORA-01882: 未找到时区3、问题分析从直观看,应该是数据库部分数据表中与timezone有关的数值出现问题造成的。时区TimeZone在Oracle中不仅仅是一个环境变量,而且是融入到数据取值保存过程中的。Oracle字段类型中,与时区有关的字段类型只有两个:timestamp with time zone和timestamp with local time zone。
Oracle的时区是通过时区文件来进行控制的,不同版本的数据库,选择不同版本的时区文件。 SQL> select * from v$timezone_file;FILENAME VERSION------------ ----------timezlrg.dat 4 一个经常发生的故障,是升级数据库过程中,没有升级time zone文件。这样导致升级失败现象。Time Zone文件是归属在DST技术体系下。10.2.0.2使用的是DST版本为DSTv2、10.2.0.3使用DSTv3、10.2.0.4使用DSTv4。从我们刚才的测试来看,使用的DST版本是正确的。
时区问题的另一个特点是服务器、客户端特性差异。如果需要确定是否是服务器问题,需要直接到服务器上执行命令。 [oracle@allfirst /]$ sqlplus /nologSQL*Plus: Release 10.2.0.4.0 - Production on 星期二 1月 28 14:54:51 2014Copyright (c) 1982, 2007, Oracle. All Rights Reserved. SQL> conn / as sysdba已连接。SQL> select * from dba_scheduler_jobs;ERROR:ORA-01882: 未找到时区区域 %s 说明是数据库服务器端问题。如果是客户端问题,则需要及时升级客户端版本。一种猜想是:当Oracle进行版本升级的时候,使用数据库时区文件的确是升级了,但是对应的内部数据还没有进行更新。这样就存在不兼容的问题。在MOS中,我们也检查到了对应的讨论文章:Time Zone IDs for 7 Time Zones Changed in Time Zone Files Version 3 and Higher, Possible ORA-1882 After Upgrade (文档 ID 414590.1)。
其中,介绍了使用检查脚本进行修复的解决方案。
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-05/101210p2.htm
手工生成HTML格式AWR遇到Bug 13527323解决实例Oracle约束Constraint对于CBO优化器的作用相关资讯 ORA-01882
- 解决ORA-01882: 未找到时区区域 %s (01/16/2013 18:42:42)
本文评论 查看全部评论 (0)