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 이 되어야 해결되는지 가렵다.
'새싹 DBA > Oracle' 카테고리의 다른 글
[오라클] DBLINK로 IMPDP 오류 ORA-31631, ORA-39149 (0) | 2024.07.05 |
---|---|
[오라클] PROFILE 프로파일 생성 및 관리 (0) | 2024.07.05 |
[오라클] SEQUENCE 시퀀스 생성, 권한, SYNONYM 까지 (0) | 2024.06.26 |
[오라클] ROLE 생성부터 부여된 테이블 권한 조회까지 LISTAGG 활용하여 조회하는 VIEW (0) | 2024.06.26 |
[오라클] DB LINK로 dumpfile 없이 impdp (0) | 2024.06.24 |