ORA-39405: Oracle Data Pump 時區升級


客戶端數據庫版本是19.3

而導出的數據庫版本是19.4,19.8的版本。

現在需要將19.3數據庫端導出的expdp備份導入亞馬遜雲的數據庫(19.4,19.8版本),提示如下:

  不支持從 TSTZ 版本為33 的源數據庫導入到 TSTZ 版本為 32 的目標數據庫,這個錯誤是因為數據庫時區版本不一致造成的,並且是源數據時區版本高。目標數據庫時區版本低。目標數據庫時區版本高也可以導入。

步驟一:升級到版本19.8(這一步多余,不需要升級)

查看源端和目標端數據庫的時區以及補丁版本:

 

 

  

 

 

 

由於我的是windows單機的19c,所以升級比較簡單,需要關閉數據庫。

停止監聽以及數據庫,解壓補丁包,替換吊OPATCH TOOL。

SET ORACLE_HOME=F:\app\Administrator\19c\product\19.0.0\dbhome_1

set PATH=%ORACLE_HOME%\bin;%PATH%;%SystemRoot%/system32;%SystemRoot%;F:\app\Administrator\19c\product\19.0.0\dbhome_1\OPatch

進入補丁解壓目錄:F:\app\Administrator\p31247621_190000_MSWIN-x86-64\31247621

opatch apply

 

開庫執行 datapatch 腳本:

alter pluggable database all open; --我的庫沒有,不需要執行這一步。

cd F:\app\Administrator\19c\product\19.0.0\dbhome_1\OPatch

datapatch -verbose

 

進行驗證:

 

 兩台都升級成功了。

 

 比較坑的是19.8任然是沒有天坑,所以后面我單獨找了補丁包28852325,但是19c windows的補丁包沒有這個補丁(linux和aix有),所以我說下載的下一個補丁29997937(34時區的,直接跳過33了)。

步驟二:時區補丁29997937(也可以是任何大於33時區的)(不需要關閉數據庫和監聽)

 

 

 但是時區還是的修改,數據庫已經存在了。

 

 

啟動數據庫后編譯失效的對象。  

@F:\app\Administrator\19c\product\19.0.0\dbhome_1\rdbms\admin\utlrp.sql

select DBMS_DST.get_latest_timezone_version from dual;

 

DECLARE
l_tz_version PLS_INTEGER;
BEGIN
l_tz_version := DBMS_DST.get_latest_timezone_version;
DBMS_OUTPUT.put_line('l_tz_version=' || l_tz_version);
DBMS_DST.begin_prepare(l_tz_version);
END;
/

 

col property_name for a30
col property_value for a20
select property_name, property_value from database_properties where property_name LIKE 'DST_%' order by property_name;

 

  

 --順序執行執行以下語句:

--以下是受影響的時區的表

TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;

EXEC DBMS_DST.find_affected_tables;

select * from sys.dst$affected_tables;
select * from sys.dst$error_table;
EXEC DBMS_DST.end_prepare;

--升級時區,以upgrade模式啟動
SHUTDOWN IMMEDIATE
STARTUP UPGRADE

SET SERVEROUTPUT ON
DECLARE
l_tz_version PLS_INTEGER;
BEGIN
select DBMS_DST.get_latest_timezone_version into l_tz_version from dual;
DBMS_OUTPUT.put_line('l_tz_version=' || l_tz_version);
DBMS_DST.begin_upgrade(l_tz_version);
END;
/


SHUTDOWN IMMEDIATE
STARTUP

--升級 ZONE 文件:會影響所有具有TIMESTAMP WITH TIME ZONE數據類型的表

SET SERVEROUTPUT ON
DECLARE
l_failures PLS_INTEGER;
BEGIN
DBMS_DST.upgrade_database(l_failures);
DBMS_OUTPUT.put_line('DBMS_DST.upgrade_database : l_failures=' || l_failures);
DBMS_DST.end_upgrade(l_failures);
DBMS_OUTPUT.put_line('DBMS_DST.end_upgrade : l_failures=' || l_failures);
END;
/

SELECT * FROM v$timezone_file;

 

 

 

 

 

 

 

 

 

 更新成功。

 雖然找不到33時區版本,但是可以impdp了。

impdp ttfc/xxxx directory=RDS_CLD_4 network_link=RDS_CLD_4 dumpfile=RDS_CLD_4_20210611_1259.DMP  logfile=20210613_imp.log TABLES=SBTTFC.RPT_USER_GAME_SUM,SBTTFC.RPT_USER_INDEX_INFO,SBTTFC.RPT_ACC_SUBJECT_BAL remap_schema=sbttfc:ttfc

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM