RECO 프로세스 트레이스 발생 하면서 ORA-02019 에러 발생시
아래의 에러가 alert 로그에 남는 경우
1
2
|
Errors in file /oracle/db/diag/rdbms/test/TESTA1/trace/TESTA1_reco_10293.trc:
ORA-02019: connection description for remote database not found
|
cs |
일단 트레이스 파일을 확인해 보자
1
2
3
|
*** 2021-01-05 04:55:13.876
ERROR, tran=65.23.149085435, session#=1, ose=0:
ORA-02019: connection description for remote database not found
|
cs |
위와 같이 RECO 프로세스가 remote database를 찾지 못하는 이슈이다.
삭제된 데이터베이스 링크로 in-doubt 트랜잭션이 존재하여 발생하는 에러이며
in-doubt 트랜잭션을 정리할 때까지 주기적으로 alert 로그에 내용이 발생하게 된다.
아래는 이를 처리하는 방법이다.
먼저 in-doubt 트랜잭션에 대한 정보를 확인하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SQL> SELECT LOCAL_TRAN_ID, STATE FROM DBA_2PC_PENDING;
LOCAL_TRAN_ID STATE
---------------------- ----------------
65.23.149085435 collecting
1 row selected.
SQL> SELECT LOCAL_TRAN_ID, IN_OUT, DATABASE FROM DBA_2PC_NEIGHBORS;
LOCAL_TRAN_ID IN_ DATABASE
---------------------- --- ------------
65.23.149085435 in
65.23.149085435 out DL_SMTHV
2 rows selected.
|
cs |
위와 같이 transaction id 가 65.23.149085435 인 트랜잭션이 존재한다.
딕셔너리 테이블에서 정보를 수집중인(collecting) pending 트랜잭션을 정리하기 위해서는
dbms_transaction.purge_lost_db_entry 프로시저를 통해 purge 시켜줘야 한다.
또 반드시 sys 계정에서 purge 작업을 해야 하며 문장마다 commit 처리를 해 줘야 한다.
1
2
3
4
5
6
7
|
SQL> exec dbms_transaction.purge_lost_db_entry('65.23.149085435');
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
|
cs |
다시 트랜잭션 정보를 확인해 보자
1
2
3
4
5
6
7
|
SQL> SELECT LOCAL_TRAN_ID, STATE FROM DBA_2PC_PENDING;
no rows selected
SQL> SELECT LOCAL_TRAN_ID, IN_OUT, DATABASE FROM DBA_2PC_NEIGHBORS;
no rows selected
|
cs |
위와 같이 트랜잭션이 정리된 것을 확인할 수 있다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
14 | Schema Password 복사 하기 | Talros | 2016.10.05 | 3290 |
13 | Block Cleanout(블럭 클린아웃) | 명품관 | 2016.09.23 | 1520 |
12 | Fixed Table에 대한 권한은 직접적으로 부여되지 않는다. | 명품관 | 2016.08.26 | 2699 |
11 | Oracle Archive log 사용량 확인(GV$ARCHIVED_LOG) [1] | 에밀리오 | 2016.08.04 | 11253 |
10 | Oracle Resource Limit를 이용한 간단한 Parameter Check (GV$RESOURCE_LIMIT) | 에밀리오 | 2016.07.15 | 2263 |
9 | Oracle VMSTAT을 이용한 CPU 사용량 활용법 | 에밀리오 | 2016.07.14 | 910 |
8 | Kill Session Script (GV$SESSION) | 에밀리오 | 2016.07.12 | 2145 |
7 | Active Session History를 이용한 TOP SQL 분석 (GV$ACTIVE_SESSION_HISTORY) | 에밀리오 | 2016.07.12 | 1211 |
6 | DB에 생성된 ROLE의 생성 정보 확인 [2] | 명품관 | 2016.05.31 | 928 |
5 | 내가 돌린 SQL ID 찾기 [1] | Talros | 2016.05.12 | 8823 |
4 | 테이블 컬럼의 Default 값에 대한 흔적은 Dictionary에 계속 남게 된다. | 명품관 | 2016.04.05 | 1590 |
3 | Result Cache(oracle11g NF) [6] | ocm10gr2 | 2016.03.14 | 273 |
2 | Alert Log를 SQL 사용하여 보기 (X$DBGALERTEXT) [1] | 에밀리오 | 2016.01.28 | 2045 |
1 | Partition 추가의 계절 - Range Partition 추가시 알아 두어야할 부분 [1] | 명품관 | 2015.12.03 | 2230 |