새싹 DBA/Oracle

[오라클] impdp 작업 중 ORA-56935: existing datapump jobs are using a different version of time zone data file

LIMMI 2024. 6. 28. 17:04

datapump ORA-56935

db link 사용해서 스크립트로 db backup 작업을 하는데

원래 잘 되던 스크립트가 갑자기 안된다..?!

ORA 에러가 뜨는걸 보니 서버문제보단 오라클 내 문제인것같다 ㅠㅠ.. 

 

구글링을 열심히 해봤지만 사례가 많지 않은 것 같아서 혹시 나중에 이 오류를 겪을 나를 위해 남기는 기록.

 

오류 코드

ORA-39006: internal error

ORA-39065: unexpected master process exception in DISPATCH

ORA-56935: existing datapump jobs are using a different version of time zone data file

ORA-06512: at “SYS.DBMS_DST”, line 1855

ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 79

ORA-06512: at “SYS.DBMS_DST”, line 1818

ORA-06512: at “SYS.KUPM$MCP”, line 19693

ORA-06512: at “SYS.KUPM$MCP”, line 12495

ORA-06512: at “SYS.KUPM$MCP”, line 11882

ORA-06512: at “SYS.KUPM$MCP”, line 14507

ORA-06512: at “SYS.KUPM$MCP”, line 9794

 

도대체 뭐가 뭐야... ㅠㅠ 왜이렇게 많이 나는거니 .. ㅠㅠ

 

일단 콘솔창으로 가서 sql plus 로그인 해주고 .. ! 

sqlplus / as sysdba

 

sqlplus / as sysdba

SQL> SELECT PROPERTY_NAME, SUBSTR (property_value, 1, 30) value
FROM   DATABASE_PROPERTIES
WHERE  PROPERTY_NAME LIKE ‘DST_%’
ORDER  BY PROPERTY_NAME;

 -- 결과 확인 시 아래 처럼 되어있다. 
 PROPERTY_NAME               VALUE
--------------------------- ------------------------------
DST_PRIMARY_TT_VERSION      14
DST_SECONDARY_TT_VERSION    4
DST_UPGRADE_STATE           DATAPUMP(1)

 

아래 쿼리 부분이 포인트인데, 찾아보니 datapump job 수행 시 import 하는 datafile 의 타임존이 맞지 않아서 업데이트가 필요한 것 같은데. secondary 타임존을 한차례씩 낮춰주는 쿼리이다. (오라클 공식 문서에도 제대로 안나와있음 ㅠ)

 

SQL> exec dbms_dst.unload_secondary;

**** 중요한 것은  DST_UPGRADE_STATE 가 "NONE" 으로 나올때까지 ! 해야한다. 

SQL> ALTER SESSION SET EVENTS ‘30090 TRACE NAME CONTEXT FOREVER, LEVEL 32’;

SQL> exec dbms_dst.unload_secondary;

**** Important Remark: make sure DST_UPGRADE_STATE is set to “NONE“

 

그리고 몇번정도 아래 sql 실행해준다. 

SQL> exec dbms_dst.unload_secondary;

 

이렇게 해서 해결된것 같은데.. 

그래도 혹시 몰라서 다른 사이트도 찾아봤다

이분은 위와 같은 방법을 시도했다가 되지 않아서 X$props 로 조회하여 직접 업데이트 해준듯. 

SQL> select text from dba_views where view_name='DATABASE_PROPERTIES';
 
TEXT
--------------------------------------------------------------------------------
select name, value$, comment$
  from x$props

-- 결과는 database_properties를 조회해 나오는 결과와 같다.

NAME                                          
------------------------------------------
VALUE$                                    
------------------------------------------
COMMENT$                                  
------------------------------------------
DST_UPGRADE_STATE                         
DATAPUMP(1)                               
State of Day Light Saving Time Upgrade    
                                          
DST_PRIMARY_TT_VERSION                    
14                                        
Version of primary timezone data file     
                                          
DST_SECONDARY_TT_VERSION                  
4                                         
Version of secondary timezone data file
SQL> update props$ set value$=0 where name='DST_SECONDARY_TT_VERSION';
 
1 row updated.
 
SQL> update props$ set value$='NONE' where name='DST_UPGRADE_STATE';
 
1 row updated.
 
SQL> select * from props$ where name like 'DST%';
 
NAME                                     
-----------------------------------------
VALUE$                                   
-----------------------------------------
COMMENT$                                 
-----------------------------------------
DST_UPGRADE_STATE                        
NONE                                     
State of Day Light Saving Time Upgrade   
                                         
DST_PRIMARY_TT_VERSION                   
14                                       
Version of primary timezone data file    
                                         
DST_SECONDARY_TT_VERSION                 
0                                        
Version of secondary timezone data file  
 
 
3 rows selected.

위와같은경우 오라클 문서에서 dbsm_dst.begin_prepare(34) 등 시도를 했지만 실패하여 위처럼 해결한듯하다. 

datapump job 을 수행할 때 타임 존 에러가 생겨서 발생하는 문제인건 확실해졌지만, 

아직까지도 정확히 왜 secondary_tt_version을 0으로 맞추고 dst_upgrade_state가 none 이 되어야 해결되는지 가렵다.