重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1093|回复: 0
打印 上一主题 下一主题

[补丁] 19.18手动升级时区从32到40

[复制链接]
跳转到指定楼层
楼主
发表于 2024-4-13 17:44:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
场景:从19.3导出的dump文件无法导入19.18,报错是不支持从 TSTZ 版本为340的源数据库导入到 TSTZ 版本为 32 的目标数据库
这个错误是因为数据库时区版本不一致造成的,并且是源数据时区版本高。目标数据库时区版本低。

下载补丁包p34698179,却无法应用补丁,提示补丁包冲突,原因是19.18已经有34698179补丁,却在$ORACLE_HOME/oracore/zoneinfo下没有对应40时区的文件
于是采用手动拷贝文件
1.将补丁包中的timezone_40.dat以及其他对应文件拷贝到$ORACLE_HOME/oracore/zoneinfo中

2.查询当前数据库的信息:
SQL> SELECT version FROM v$timezone_file;

   VERSION

----------

        32
当前DST的版本为32

3.进行DST版本升级
此时需要把数据库以upgrade模式打开
set serveroutput on
EXEC DBMS_DST.BEGIN_UPGRADE(40);

此时查询:
SELECT property_name, SUBSTR(property_value, 1, 30) value
FROM database_properties
WHERE property_name LIKE 'DST_%'
ORDER BY property_name;

property_name              property_value
--------------------       --------------------
DST_PRIMARY_TT_VERSION      32
DST_SECONDARY_TT_VERSION    40
DST_UPGRADE_STATE           upgrade

4.检查受影响的表
SELECT owner, table_name, upgrade_in_progress FROM dba_tstz_tables;
OWNER                         TABLE_NAME                                            UPGRADE_IN_PROGRESS
-----                              -------------------------                                   -------------------
GSMADMIN_INTERNAL    AQ$_CHANGE_LOG_QUEUE_TABLE_L                 YES
MDSYS                          SDO_DIAG_MESSAGES_TABLE                            YES
DVSYS                           AUDIT_TRAIL$                                                  YES
GSMADMIN_INTERNAL    AQ$_CHANGE_LOG_QUEUE_TABLE_S                 YES
DVSYS                            SIMULATION_LOG$                                          YES
需要为yes受到影响的表进行处理

5.处理受影响的表
此时需要把数据库以read write打开
VAR numfail number;
BEGIN
   DBMS_DST.UPGRADE_DATABASE(:numfail,
            parallel                  => TRUE,
            log_errors                => TRUE,
            log_errors_table          => 'SYS.DST$ERROR_TABLE',
            log_triggers_table        => 'SYS.DST$TRIGGER_TABLE',
            error_on_overlap_time     => TRUE,
            error_on_nonexisting_time => TRUE);

DBMS_OUTPUT.PUT_LINE('Number of tables failed to upgrade:'|| :numfail);
END;
/

6.结束升级
当所有表升级后,进行end_upgrade
VAR numfail number;
BEGIN
  DBMS_DST.END_UPGRADE(:numfail);
  DBMS_OUTPUT.PUT_LINE('Number of tables failed to upgrade:'|| :numfail);
END;
/

7.检查DST版本
SQL> SELECT version FROM v$timezone_file;



   VERSION

----------

        40
               
SELECT property_name, SUBSTR(property_value, 1, 30) value
FROM database_properties
WHERE property_name LIKE 'DST_%'
ORDER BY property_name;

property_name              property_value
--------------------       --------------------
DST_PRIMARY_TT_VERSION      40
DST_SECONDARY_TT_VERSION    0
DST_UPGRADE_STATE           NONE
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-25 08:36 , Processed in 0.119966 second(s), 21 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表