#########################
# 2pc pending 처리 절차 #
#########################
DISTRIBUTED TRANSACTION TROUBLESHOOTING (ORA-1591해결 방법)
STEP 1: alert.log file을 check한다.
STEP 2: network 환경을 확인한다.
STEP 3: RECO process가 떠 있는지 확인한다.
os> ps -ef | grep reco
STEP 4: DBA_2PC_PENDING을 조회해 본다.
set linesize 200
col global_tran_id format a30
col host format a20
SQL>select local_tran_id, global_tran_id, state, mixed, host, commit#
from dba_2pc_pending;
STEP 7: DBA_2PC_PENDING의 MIXED column을 확인한다.
- MIXED값이 NO인 경우 : STEP 8 수행
- MIXED값이 YES인 경우: STEP 9 수행
STEP 8: DBA_2PC_PENDING의 STATE column의 값을 확인한다.
CASE 8-1: STATE field ---> COMMITTED인 경우
SQL>exec dbms_transaction.purge_lost_db_entry('<TRANS_ID>');
SQL>commit;
CASE 8-2: STATE field ---> PREPARED인 경우 <-- Lock 인상태
SQL>rollback force '<TRANS_ID>'; 혹은
SQL>commit force '<TRANS_ID>';
CASE 8-3: STATE field ---> COLLECTING인 경우
SQL>exec dbms_transaction.purge_lost_db_entry('<TRANS_ID>');
SQL>commit;
CASE 8-4: STATE field ---> FORCED ROLLBACK/FORCED COMMIT 인 경우
SQL>exec dbms_transaction.purge_lost_db_entry('<TRANS_ID>');
SQL>commit;
STEP 9: 불일치 사항을 파악하고 DBA_2PC_PENDING을 정리한다.
MIXED가 YES인 상태에서, inconsistency를 받아들이고 DBA_2PC_PENDING view를
정리하려면 다음과 같이 수행한다.
SQL>exec dbms_transaction.purge_mixed('1.8.238');
SQL>commit;
'Oracle > admin' 카테고리의 다른 글
Enabling and Disabling Maintenance Tasks for all Maintenance Windows (0) | 2016.11.17 |
---|---|
tablespace,datafile 생성 SQL (마이그레이션시 참고용) (0) | 2016.11.14 |
Oracle Streams 상태조회 (0) | 2016.11.02 |
Oracle Support 한국어 문서 목록 (0) | 2016.09.09 |
락 세션 조회 및 KILL 방법 (0) | 2016.09.06 |