正德厚生,臻于至善

19.18手动升级时区从32到40

场景:从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
赞(0) 打赏
未经允许不得转载:徐万新之路 » 19.18手动升级时区从32到40

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册