모든 페이지
1 / 13

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Extract

본 문서는 ProSync Extract 프로세스에 대한 대부분의 내용을 포함하고 있다. Extract 프로세스 정의부터 역할 및 세부적인 Configuration 등을 안내한다.

Key Features

Extract 프로세스에서 사용 가능한 기능에 대해 안내한다.

Extract Process

Process 설명

Extract 프로세스는 Source DB의 변경 로그를 추출하여 Apply 프로세스로 전달하는 동작을 수행한다.

Source DB가 Tibero 또는 Oracle인 경우, redo log를 읽어 변경 로그를 추출하므로 반드시 redo log에 접근 가능한 위치(일반적으로 Source DB가 존재하는 장비)에서 기동되어야 한다.

Source DB가 PostgreSQL인 경우에는 WAL logical replication 연결(network)을 통해 변경 로그를 추출하므로 반드시 Source DB 서버에 기동될 필요는 없으며, Source DB에 network로 접속할 수 있고 replication 권한이 있는 위치라면 기동할 수 있다.

변경의 최소 단위는 LCR로, 레코드 단위의 변경을 의미하며 네트워크 부하를 고려하여 여러 LCR을 Chunk로 만들어 Apply 프로세스에 전달한다.

그림 1. Extract Process

Threads

Control Thread

기동 시 다른 Thread 시작, 메시지 수신 및 전송 등의 작업을 수행한다.

Resource Thread

프로세스의 CPU/Memory 사용량을 수집한다. ProSync 매니저 사용 시, Agent 프로세스를 통해 수집한 값을 ProSync 매니저로 전송한다.

Worker Thread

동기화 테이블 추가, 동기화 할 테이블 및 컬럼들의 정보인 DD image 조회, DB의 상태 파악을 위한 dummy tx 생성 등 변경 데이터 추출과는 상관없는 메타데이터 조회나 수정과 같은 작업을 수행한다.

또한 Apply 프로세스로 나가는 연결(connect)은 Worker Thread가 수행하며, 연결된 소켓은 Control Thread에 전달되어 이후 통신에 사용된다.

추출한 변경을 Text 파일로 출력하는 SAM 기능을 수행한다.

변경 데이터를 추출하고 이를 Chunk형태로 만든 뒤 Control 스레드를 통해 Apply 프로세스에 전달한다.

Source DB가 Tibero 또는 Oracle인 경우 Log Reader 라이브러리를 사용해 redo log에 접근하며, PostgreSQL인 경우 logical replication 연결을 통해 WAL을 읽는다. 비정상 종료, Apply 프로세스 재연결 등의 장애 상황 발생 시, 마지막으로 읽고 있던 redo를 처음부터 다시 읽기 시작한다.

추출 시작 지점은 Apply 프로세스에 저장되어 있기 때문에, Apply 프로세스와 연결 전까진 추출을 시작하지 않는다.

Archive Log 모드

ProSync는 Archiving되지 않은 온라인 Redo Log는 추출하지 않고, Archiving이 완료된 Archive Log만을 추출하여 Apply 프로세스로 전달할 수 있다.

EXTRACT_ARCHIVE_LOG_ONLY=[Y|N]

파라미터
설명

EXTRACT_ARCHIVE_LOG_ONLY

Archive Log만을 추출할지 여부를 설정한다.

주의

위 기능을 사용하는 경우, Archive Log만을 추출하게 되어 실시간 성능 저하 가능성이 있으므로 사용에 유의한다.

Sam Thread

Read Thread

User Filtering

ProSync는 특정 사용자에 의해서 발생된 DML 및 DDL을 동기화에서 제외할 수 있는 기능을 제공한다.

양방향 동기화

같은 테이블에 대해 Source DB에서 Target DB로, Target DB에서 Source DB로 동기화 하도록 2개의 ProSync 인스턴스를 사용하여 구성할 수 있다. 이 경우, 별 다른 설정이 없다면 상대방의 PRS_USER가 반영한 동기화 데이터가 다시 추출되어 Source DB로 전송될 수 있다.

Redo Log에는, tx에 대해 이를 수행 한 User를 알 수 있는 정보가 있으며 ProSync는 이 정보를 활용해 상대방의 PRS_USER로 EXCLUDE_USER 파라미터를 설정하여 이미 반영한 데이터를 재반영하는 현상을 막을 수 있다.

사용

다음은 TEST 사용자와 PRS_USER 사용자를 동기화에서 제외하는 예제이다.

EXCLUDE_USER=PRS_USER,TEST

파라미터
설명

암호화 테이블 추출

Source DB가 Tibero, Oracle인 경우, 암호화된 테이블에 대한 동기화를 지원한다. 암호화된 테이블 동기화를 위해서는 복호화를 위한 Wallet file 접근 권한이 필요하다.

TDE_FOR_EXT=[Y|N] TDE_WALLET_FILE=file_path TDE_WALLET_PWD=wallet_password TDE_FOR_APPLY=[Y|N] TDE_FOR_TABLESPACE=[Y|N]

파라미터
설명

압축 테이블 추출

Source DB가 Tibero인 경우 압축 테이블에 대한 동기화 지원을 설명한다.

Source DB가 Tibero인 경우, 압축된 테이블에 대한 동기화를 지원한다. 압축 테이블의 변경 데이터는 Redo Log에 압축 심볼 참조 형태로 기록되며, Extract 프로세스는 Supplemental Log에 포함된 심볼 매핑 정보를 이용하여 이를 원본 값으로 복원한 후 동기화한다.

압축 테이블 동기화를 위한 별도의 파라미터 설정은 필요하지 않으며, 다음 조건을 만족하면 자동으로 동작한다.

  • 동기화 대상 테이블에 Supplemental Logging이 설정되어 있어야 한다.

  • Source DB(Tibero)와 ProSync 모두 압축 테이블 동기화를 지원하는 버전이어야 한다.

SQL> CREATE TABLE TEST.T_COMP (C1 VARCHAR(2000), C2 NUMBER) COMPRESS FOR OLTP;
SQL> ALTER TABLE TEST.T_COMP ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

지원 범위

압축 방식
지원 여부

데이터 압축

ProSync는 Extract 프로세스에서 Apply 프로세스로 데이터를 전송할 때 네트워크 부하 감소를 위한 데이터 압축을 사용할 수 있다.

ENABLE_NETWORK_COMPRESS=[Y|N] NETWORK_COMPRESS_LEVEL=compress_level

파라미터
설명

ENABLE_NETWORK_COMPRESS

Tables

Extract 프로세스에서 Source DB에 생성하고 사용하는 메타 테이블에 대해 안내한다.

동기화할 object들의 Type, Owner, Name, 등록 시기를 저장한다.

tlr(olr)파일의 위치, seq 정보를 저장한다.

tlr(olr)파일은 Redo Log를 모두 읽고 다음 Log를 읽기 전 아직 commit되지 않은 tx 정보를 저장한 파일로 ProSync는 Begin이 없는 tx에 대해서는 추출하지 않기 때문에, 기동 시점에 따라 누락되는 tx가 없도록 이전 Redo Log를 읽었을 때 아직 commit되지 않은 tx정보를 저장한다.

발생한 DDL의 시점, DDL 종류, 메타 테이블 업데이트 여부, 이후 ProSync가 사용하는 DD의 Sequence 정보를 저장한다.

Source DB가 Oracle이며 Log Miner를 사용하여 동기화 하는 경우 사용한다. DD 정보를 저장한 dict파일 정보를 저장한다.

Source DB에 존재하는 USER들의 이름과 USER_ID를 저장한다. User Filtering 기능을 사용하기 위해 저장한다.

데이터 암호화

ProSync는 Extract 프로세스에서 Apply 프로세스로 데이터를 전송할 때 보안을 위한 데이터 암호화를 사용할 수 있다.

AES-256-CBC 암호화를 사용하며 Redo(Archive)log 에서 추출한 변경 데이터에 대한 암호화만을 제공한다.

ENABLE_NETWORK_ENCRYPT=[Y|N]

파라미터
설명

COMPRESS (Basic Compression)

지원 Direct Path Insert(/*+ APPEND */ 힌트, CREATE TABLE AS SELECT 등)로 적재된 압축 데이터의 추출을 지원한다.

COMPRESS FOR OLTP (OLTP Compression)

지원 INSERT, UPDATE, DELETE 및 Multi Insert, Multi Delete를 포함한 DML 추출을 지원한다.

COMPRESS FOR QUERY, COMPRESS FOR ARCHIVE

미지원 컬럼 단위 압축(Tibero Columnar Compression)이 적용된 테이블은 동기화 대상에 포함할 수 없다.

압축 테이블 동기화를 지원하지 않는 버전의 Source DB와 함께 사용하는 경우, 압축 데이터의 원본 값 복원에 필요한 Supplemental Log 정보가 기록되지 않아 데이터 정합성이 깨질 수 있다.

Extract 프로세스 로그에 comp supp lookup miss 또는 decompress failed 메시지가 나타나면 해당 테이블의 Source DB와 Target DB 간 데이터 정합성 확인이 필요하다.

전송하는 Chunk의 압축 여부를 결정한다.

NETWORK_COMPRESS_LEVEL

데이터 압축 기능을 사용할 때 데이터 압축률을 설정한다.

0~9까지 설정 가능하며, 0으로 설정한 경우 압축을 하지 않고 9에 가까워질수록 압축률이 커진다.

TDE_FOR_EXT

데이터 복호화 기능 사용 여부를 설정한다.

설치 config 파일에 USE_TDE=Y를 설정하면 설치 과정에서 Source DB의 Wallet 비밀번호를 입력받고, TDE_FOR_EXT와 TDE_FOR_APPLY를 Y로 설정한다. 암호화된 테이블에 대하여 Sam 기능을 사용하려면 반드시 Y로 설정해야 한다. source db가 oracle 인 경우, TDE_FOR_TABLESPACE를 설정하지않아도 암호화된 Tablespace 동기화를 수행한다.

TDE_WALLET_FILE

Source DB에서 생성한 Wallet file의 경로를 설정한다. 반드시 절대 경로를 포함하여 입력해야 한다. Source DB가 Oracle인 경우 wallet 파일(ewallet.p12)을 지정한다. 설치 config 파일에 USE_TDE=Y를 설정해 설치하면 이 값에 인스턴스 디렉터리($PRS_HOME/var/<인스턴스>/)가 기록되므로, 설치 후 Extract · Apply 설정 파일에서 wallet 파일의 절대 경로로 수정해야 한다. wallet 파일이 아닌 경로가 지정되어 있으면 Extract와 Apply가 기동하지 않는다. ProSync가 Source DB와 다른 호스트에서 실행되는 경우 wallet 파일을 ProSync 호스트로 복사해 그 경로를 지정한다.

TDE_WALLET_PWD

Source DB에서 생성한 Wallet file의 Password를 입력한다. 설치 과정에서 입력했다면, 자동적으로 ProSync가 해당 정보를 암호화하여 저장하여 #encrypted 값으로 나타나며, 설치 과정에서 입력하지 않았다면 비밀번호를 직접 입력하거나 수동으로 ProSync Wallet을 생성해주어야 한다.

TDE_FOR_APPLY

데이터 복호화 기능 사용 여부를 설정한다. Apply 프로세스에서 설정하며 TDE_FOR_EXT와 동일하게 동작한다. Source DB가 Oracle인 경우 암호화된 컬럼의 값은 Apply 프로세스가 복호화하므로, 암호화된 컬럼이 있는 테이블을 동기화하려면 반드시 Y로 설정하고 Wallet을 지정해야 한다. 설정하지 않으면 해당 테이블의 메타데이터를 처리할 때 Apply 프로세스가 중단된다.

TDE_FOR_TABLESPACE

Source DB가 Oracle인 경우 3DES168, AES128, AES192, AES256 알고리즘을 지원한다.

암호화된 Tablespace 동기화를 수행하려면 사용한다. 만약 동기화 대상에 암호화된 Tablespace 를 추가하고 본 파라미터를 활성화 하지 않을 시 에러가 발생한다. source db가 oracle 인 경우, 설정하지 않아도 동작한다.

동기화 테이블의 DD sequence, object id, 테이블명 정보를 저장한다. Redo Log는 object id만 남기기 때문에, 해당 정보를 Apply 프로세스에 전달하여 적절하게 반영 쿼리를 생성한다.

특정 object_id가 어느 테이블에 속하는지 정보를 저장한다.

파티션 등에 저장되는 데이터는 테이블과는 다른 object_id를 남기기 때문에, 해당 데이터를 문제없이 추출하기 위해 파티션의 object_id와 테이블의 object_id를 매핑한다.

컬럼의 속성과 어느 테이블에 속하는지 정보를 저장한다. Redo Log는 컬럼 속성 정보를 남기지 않기 때문에, 해당 정보를 Apply 프로세스에 전달하여 적절하게 반영 쿼리를 생성한다.

컬럼의 제약 조건 정보를 저장한다. Apply 프로세스의 Parallel Replay에서 적절하게 반영 순서를 조합하기 위하여 사용된다.

테이블의 암호화 정보를 저장한다. Apply 프로세스에서 복호화하기 위해 저장한다.

변경 데이터가 없는 경우에도 추출, 반영에 문제 없는지 확인용으로서 주기적으로 부하를 발생시키기 위한 목적으로 사용된다. 부하가 없는 경우, 주기적으로 해당 테이블에 대한 부하를 발생시킨다.

Source DB가 Oracle이며 Log Miner를 사용하여 동기화 하는 경우 사용한다. 마지막으로 추출한 시점 정보를 저장한다.

시퀀스 동기화를 위한 정보를 저장한다.

ProSync의 초기적재 기능을 사용하기 위한 정보를 저장한다.

Source DB가 Oracle이며 Log Miner를 사용하여 동기화 하는 경우 사용한다. instance 이름을 저장한다.

PRS_OBJ_LIST

PRS_TXINFO

PRS_DDL_HIST

PRS_DICT_HIST

PRS_DD_USR

PRS_DD_TBL

PRS_DD_SGMT

PRS_DD_COL

PRS_DD_CON

PRS_DD_ENC

PRS_DUMMY_TBL

PRS_LOGMNR_INFO

PRS_DD_SEQ_TBL

PRS_DD_ETL_HIST

PRS_INSTALL_TOP

참고

본 페이지에 언급되지 않은 테이블은 Deprecated 되어 불필요한 테이블이다.

해당 파라미터를 Y로 설정하는 경우 데이터 암호화 및 복호화 과정이 추가되므로 동기화 성능에 영향을 미칠 수 있다.

ENABLE_NETWORK_ENCRYPT

사용

전송하는 Chunk의 암호화 여부를 결정한다

EXCLUDE_USER

동기화에서 제외할 사용자 이름을 콤마(,)로 구분해 나열한다. 사용자 이름은 데이터베이스에 저장된 형태(일반적으로 대문자)로 입력한다.

ProSync 4.7은 Oracle 세션 식별과 DML 필터링을 개선하여 EXCLUDE_USER로 지정한 사용자의 DML/DDL을 제외한다.

다만 설치 이전에 트랜잭션을 수행한 세션을 재접속 없이 계속 사용하면 사용자 정보를 확보하지 못해 필터링되지 않을 수 있으므로, 해당 세션을 재접속한 뒤 제외 동작을 확인한다.

참고

양방향 과 Oracle 관련 제약사항

ProSync 4.4.2 버전 이상의 Oracle 이 포함된 양방향 동기화에선 ROLLBACK_OBJECT_IDS 파라미터를 설정해야한다.

Redo상에 남는 세션 정보를 통해 필터링 하는 기존 방식과 다르게, ProSync가 동기화한 트랜잭션을 Object id(Segment id)로 감지하고 이를 통해 트랜잭션 자체를 롤백하는 기능이다.

ProSync의 Apply프로세스는 PRS_COMMITTED_TX_LIST 테이블을 조작하게 되어있으며, 이에 대한 Object id, Segment id를 위 파라미터에 모두 작성해주면 된다. 다음은 조회 쿼리 예시이다. (Tibero의 경우 추출 시 Supplemental Log로 Object id가 남으므로 Segment를 조회하거나 추가할 필요는 없다.)

  • Target Oracle Object ID 조회

  • Target Oracle SGMT ID 조회

조회된 OBJ# 와 DATAOBJ# 를 모두 ROLLBACK_OBJECT_IDS 에 나열한다.

  • Target Tibero Object ID 조회

Sequence 동기화

ProSync는 Source 데이터베이스의 Sequence 객체 값을 Target 데이터베이스로 실시간 동기화하는 기능을 제공한다. Sequence의 NEXTVAL이 호출되며 속성값이 갱신될 때 마다 Target으로 전달된다.


Source 데이터베이스
Target 데이터베이스
지원 여부

Oracle

Tibero

지원

Source Tibero에서 Sequence의 NEXTVAL이 호출되면, 해당 값이 Target Tibero의 동일 Sequence에 실시간으로 반영된다.

  1. Source와 Target에 동일한 이름의 유저 아래에 동일한 이름의 Sequence가 생성되어 있어야 한다.

  2. ProSync 설치 스크립트가 정상적으로 수행되어 있어야 한다.

  3. 동기화 대상 리스트 파일(기본값: prs_obj_group1.list) 파일에 SYS._DD_SEQ 테이블이 기재돼 있어야 한다.

  4. 동기화 대상 리스트 파일(기본값: prs_obj_group1.list) 파일에 동기화하고자 하는 SEQUENCE가 기재돼 있어야 한다.

  5. Source Tibero 의 데이터베이스 초기화 파라미터로 _DDL_SEQ_SUPPLOG=Y 를 설정해야 한다. ProSync 의 config 파일에 기재하는 파라미터가 아니다.

  6. Target Tibero 의 데이터베이스 초기화 파라미터로 SEQ_GET_NEXTVAL_FROM_DD_TABLE=Y 를 설정해야 한다. ProSync 의 config 파일에 기재하는 파라미터가 아니다.

  1. Sequence 생성 시 NOCACHE 옵션으로 생성 필요하다.

  2. Source, Target DB 의 동기화 대상이 되는 SEQUENCE 짝의 설정값은 일치해야 한다.

  3. 프로싱크에서 Sequence ALTER 수행 시 타겟 DB에서 SYS._DD_SEQ NEXTVAL 값을 기준으로 Boundary Check를 수행하기 때문에, 타겟 NextVal 값보다 MAX/MIN 값이 더 작은/큰 경우, TBR-7134 에러가 발생한다.

Source Oracle에서 Sequence의 NEXTVAL이 호출되면, 해당 값이 Target Tibero의 동일 Sequence에 반영된다. Target의 Sequence 값이 Source 와 겹치지 않고, 동일하거나 앞서가도록 동기화가 진행된다.

  1. Source Oracle과 Target Tibero에 동일한 이름의 Sequence가 생성되어 있어야 한다.

  2. ProSync 설치 스크립트가 정상적으로 수행되어 있어야 한다.

  3. 동기화 대상 리스트 파일(기본값: prs_obj_group1.list) 파일에 SYS.SEQ$ 테이블이 기재돼 있어야 한다.

  4. 동기화 대상 리스트 파일(기본값: prs_obj_group1.list) 파일에 동기화하고자 하는 SEQUENCE가 기재돼 있어야 한다.

  1. Source, Target DB 의 동기화 대상이 되는 SEQUENCE 짝의 설정값은 일치해야 한다.

  2. SEQUENCE 값의 정합성을 위해 ORDER 옵션의 사용이 권장된다.


항목
설명

설치 준비

Instance 설치 과정에서 DB 의 PRS_INSTALL_USER 는 SYS.SEQ$(SYS._DD_SEQ) 테이블 및 동기화 하고자 하는 SEQUENCE 에 대한 SELECT 권한이 필요하다.

동기화 시점

NEXTVAL 호출 시에만 동기화된다. CURRVAL 조회는 동기화되지 않는다.

Sequence 존재 필수

Tibero

Tibero

개요

지원 환경

지원

Tibero to Tibero 환경

동기화 방식

사전 준비사항

제약사항

Oracle to Tibero 환경

동기화 방식

사전 준비사항

제약사항

주의사항

SELECT O.OBJ#
FROM SYS.OBJ$ O, SYS.USER$ U
WHERE O.OWNER# = U.USER#
AND O.TYPE# = 2
AND U.TYPE# = 1
AND U.NAME = 'Target Prosync Instance Meta User'
AND O.NAME = 'PRS_COMMITTED_TX_LIST';
SELECT DATAOBJ#, OBJ#
FROM SYS.OBJ$ O, SYS.USER$ U
WHERE O.OWNER# = U.USER#
AND O.TYPE# IN (2, 19, 34)
AND U.TYPE# = 1
AND U.NAME = 'Target Prosync Instance Meta User'
AND O.NAME = 'PRS_COMMITTED_TX_LIST'
AND O.DATAOBJ# IS NOT NULL;
SELECT O.OBJ_ID
FROM SYS._DD_OBJ O, SYS._DD_USER U
WHERE O.OWNER_ID = U.USER_ID
AND O.TYPE_NO = 1
AND U.TYPE_NO = 1
AND U.NAME = 'Target Prosync Instance Meta User'
AND O.NAME = 'PRS_COMMITTED_TX_LIST';

Target에 동일한 이름의 Sequence가 미리 생성되어 있어야 한다.

ALTER SEQUENCE

Sequence 속성 변경(INCREMENT BY, MAXVALUE 등)은 DDL 동기화를 통해 처리된다.

대량 호출 시

빈번한 NEXTVAL 호출은 동기화 부하로 이어질 수 있으며, CACHE 옵션의 취급은 적용 환경에 따라 다르다. [Oracle to Tibero] CACHE 를 사용하면 동기화 호출 빈도를 낮출 수 있다. Target 의 CACHE 도 지원되며, 동기화 시점에만 내부적으로 조정된 뒤 원래 설정으로 복원된다. [Tibero to Tibero] CACHE 를 사용하면 호출 단위 동기화가 성립하지 않으므로 NOCACHE 로 운용한다.

Active-Active 환경 지양

Target DB 에서 SEQUENCE 의 사용을 지양한다. NEXTVAL을 통해 Target DB 에서 SEQUENCE 를 사용하게 되면 동기화 중인 SEQUENCE 의 정합성, 특히 고유성에 문제가 생길 가능성이 높다.

Source Oracle ASM 로그 추출

Source Oracle이 ASM(Automatic Storage Management)을 사용하는 환경에서 Redo Log와 Archive Log를 추출하는 구성과 운영 방법을 안내한다.

ProSync는 Source Oracle이 ASM(Automatic Storage Management)을 사용하는 환경에서 ASM Diskgroup에 저장된 Redo Log와 Archive Log를 추출할 수 있다.

ASM Diskgroup의 파일은 운영체제 파일 시스템에 그대로 노출되지 않으므로 일반적인 파일 읽기로는 접근할 수 없다. Extract 프로세스는 ASM 인스턴스에 직접 접속하여 Diskgroup 경로(+로 시작하는 경로)의 로그 파일을 읽는다.

지원 범위

구분
지원 대상

Source DB

Extract 프로세스는 읽으려는 로그 파일의 경로를 보고 읽기 경로를 결정한다.

로그 파일 경로
읽기 경로

경로에 따라 읽기 경로가 결정되므로 Redo Log와 Archive Log 중 일부만 ASM Diskgroup에 저장된 혼합 구성에서도 사용할 수 있다. ASM 사용 여부를 지정하는 별도의 파라미터는 없으며, ASM 접속 정보를 설정하면 ASM 경로의 파일에 대해 ASM 읽기가 사용된다.

ASM 경로의 로그를 읽을 때 Extract 프로세스는 ASM 인스턴스에 ASM_IO_WORKERS 개수만큼 병렬 I/O Worker 세션을 만든다. 각 Worker는 로그 파일 읽기만 수행하고, 읽어온 Redo의 분석은 로그 리더가 별도로 수행한다.

ASM_IO_WORKERS는 Extract 프로세스 기동 시에만 반영되므로, 값을 변경한 경우 Extract 프로세스를 재기동해야 한다.

Extract 프로세스가 ASM 인스턴스에 접속할 별칭을 tnsnames.ora에 등록한다. 이 별칭을 ASM_DB_NAME에 설정한다.

ASM 접속 계정은 ASM 인스턴스에 접속하여 Diskgroup의 파일을 읽을 수 있어야 하므로 SYSASM 권한을 가진 계정을 사용한다.

등록한 별칭으로 접속이 되는지 확인한다.

Redo Log와 Archive Log가 ASM Diskgroup에 저장되어 있는지 확인한다. 경로가 +로 시작하면 ASM 로그 추출 설정이 필요하다.

파라미터
설명

ASM_PWD=#encrypted는 암호화된 문자열 자체가 아니라, 실제 비밀번호를 wallet 파일에서 읽으라는 표시(sentinel)이다. 따라서 config 파일만 다른 노드로 복사해서는 프로세스를 기동할 수 없으며 wallet 파일(var/<instance>/.wallet_asm)을 함께 이관해야 한다.

설치 config 파일에 ASM 접속 정보를 설정하면 설치 과정에서 ASM 구성이 반영된다.

ASM 접속 정보를 설정하고 설치하면 다음이 수행된다.

  • ASM_PWD 암호화 및 wallet 파일 저장

  • 생성되는 Extract config에 ASM 파라미터 자동 기입

설치 후 생성된 Extract config에 다음 값이 기입되어 있는지 확인한다.

Extract 프로세스는 활성 Online Redo Log의 경로가 ASM Diskgroup 경로인 경우 ASM 인스턴스 접속을 통해 해당 파일을 읽는다. 읽기는 I/O Worker 세션이 병렬로 수행하고, 로그 리더는 읽어온 블록의 Redo를 분석하여 LCR을 생성한다.

Archive Log는 다음 순서로 위치를 결정한다.

  1. ARCHIVE_LOG_DIR이 설정된 경우 해당 디렉터리에서 Archive Log 파일을 먼저 찾는다.

  2. 해당 디렉터리에서 찾지 못하거나 ARCHIVE_LOG_DIR이 설정되지 않은 경우 V$ARCHIVED_LOG 조회 결과의 ASM 경로(+DISKGROUP/...)로 접근한다.

ARCHIVE_LOG_DIR은 절대 경로의 디렉터리만 유효한 값이다. 따라서 log_archive_dest가 FRA(USE_DB_RECOVERY_FILE_DEST)이거나 ASM Diskgroup(+...)인 표준 ASM 구성에서는 설치 과정에서 ARCHIVE_LOG_DIR에 값이 기입되지 않으며, Archive Log 위치는 위의 순서에 따라 운영 중에 결정된다.

ASM_PWD는 암호화되어 인스턴스의 wallet 파일(var/<instance>/.wallet_asm)에 저장된다. wallet 파일은 백업 대상에 포함해야 하며, ASM 접속 계정의 비밀번호를 변경한 경우 wallet을 다시 생성해야 한다.

  • ASM 로그 추출은 Source Oracle 전용이다.

  • ASM_IO_WORKERS는 Extract 프로세스 기동 시에만 적용된다. 운영 중 변경하려면 프로세스를 재기동해야 한다.

  • ASM_IO_WORKERS는 최대 8까지 설정할 수 있다.

ASM 접속 정보를 설정하지 않으면 ASM 경로의 로그 파일을 읽을 수 없다.

Oracle (ASM 구성)

대상 프로세스

Extract

추출 대상 로그

Online Redo Log, Archive Log

+로 시작하는 ASM Diskgroup 경로

ASM 인스턴스 접속(ASM_DB_NAME)을 통해 읽는다.

절대 경로의 파일 시스템 경로

파일 시스템에서 직접 읽는다.

+ASM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = +ASM)
      (INSTANCE_NAME = +ASM1)
      (UR = A)
    )
  )
$ sqlplus asm_user/asm_password@+ASM as sysasm
SQL> SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;
SQL> SELECT NAME, STATE FROM V$ASM_DISKGROUP;
SELECT MEMBER FROM V$LOGFILE;
SHOW PARAMETER log_archive_dest
SHOW PARAMETER db_recovery_file_dest

ASM_DB_NAME

로그 리더가 사용할 Oracle ASM 인스턴스의 별칭(Alias)을 설정한다. ASM 경로(+...)의 Redo Log 및 Archive Log 접근에 필요하다. (적용: Extract)

ASM_USER

로그 리더가 사용할 Oracle ASM 접속 계정을 설정한다. (적용: Extract)

ASM_PWD

SRC_DB_TYPE=ORACLE
SRC_DB_NAME=src_oracle

ASM_DB_NAME=+ASM
ASM_USER=sys
ASM_PWD=#encrypted
ASM_IO_WORKERS=4
SRC_DB_TYPE=ORACLE
SRC_DB_NAME=src_oracle
SRC_INSTALL_USER=sys
SRC_INSTALL_PWD=oracle

# (for Oracle ASM only)
ASM_DB_NAME=+ASM
ASM_USER=sys
ASM_PWD=asm_password
ASM_DB_NAME=+ASM
ASM_USER=sys
ASM_PWD=#encrypted

동작 구조

I/O Worker 세션

사전 준비

ASM 인스턴스 접속 별칭 등록

참고

ASM 인스턴스는 MOUNTED 상태로만 기동되므로, 접속 별칭에 (UR = A)를 설정해야 접속이 제한되지 않는다.

RAC 환경에서는 Extract 프로세스별로 해당 노드의 ASM 인스턴스에 직접 접속하는 별칭을 사용한다.

계정 권한 확인

로그 파일 위치 확인

설정 파라미터

설정 예시

Extract 설정

설치 구성

참고

ASM_DB_NAME, ASM_USER, ASM_PWD 세 값을 모두 기입해야 ASM 구성이 반영된다. 하나라도 비어 있으면 별도 프롬프트 없이 ASM 구성이 생략되므로 주의한다.

동작 방식

Redo Log 읽기

Archive Log 경로 결정

주의

ASM 구성에서 ARCHIVE_LOG_DIR에 ASM Diskgroup 경로나 USE_DB_RECOVERY_FILE_DEST와 같은 값을 직접 기입하면 Extract 프로세스 기동이 실패하거나 Archive Log 추출이 진행되지 않을 수 있다. 파일 시스템 경로에 별도의 Archive Log가 있는 구성이 아니라면 ARCHIVE_LOG_DIR을 비워 둔다.

ASM 접속 비밀번호 저장

제약사항

ASM_USER의 비밀번호를 설정한다. 암호화되어 wallet에 저장되며, config 파일에는 #encrypted로 표시된다. (적용: Extract)

ASM_IO_WORKERS

ASM Redo를 읽을 때 사용할 병렬 I/O Worker 세션 수를 설정한다. 기본값은 4이며 1 ~ 8 범위로 설정할 수 있다. Extract 프로세스 기동 시에만 적용된다. (적용: Extract)

TSC Standby Synchronization

Tibero Standby Cluster(TSC) 환경에서 Standby DB를 Source로 하는 동기화 구성과 운영 방법을 안내한다.

ProSync는 Tibero Standby Cluster(이하 TSC) 환경에서 Standby DB를 Source로 하는 동기화를 지원한다.

TSC 환경에서 Extract 프로세스와 Llob 프로세스는 Redo Log 읽기와 Flashback 조회를 Standby DB에서 수행하고, Source DB에 쓰기가 필요한 메타데이터 작업은 쓰기 가능한 Primary DB로 라우팅한다. Failover로 Standby DB가 Primary로 승격되면 쓰기 라우팅을 승격된 DB로 자동 전환한다.

Standby DB에서 추출을 수행하므로 운영 중인 Primary DB의 부하를 줄일 수 있고, Source DB의 장애 전환 이후에도 재설치 없이 동기화를 이어갈 수 있다.

지원 범위

구분
지원 대상

Source DB

TSC Standby 동기화에서 각 접속 별칭(Alias)의 역할은 다음과 같다.

파라미터
역할

정상 TSC 상태와 Failover 이후의 작업별 라우팅은 다음과 같다.

작업
정상 TSC 상태
Failover 이후

TAC-TSC 환경에서는 Primary TAC의 Redo Thread 수만큼 Extract 프로세스를 기동한다. 이때 별칭은 다음과 같이 배치한다.

  • 모든 Extract 프로세스와 Llob 프로세스의 SRC_DB_NAME은 같은 Standby 별칭을 사용한다.

  • Extract 프로세스별 SRC_LOCAL_SID는 해당 Redo Thread의 로그를 기록하는 Standby 인스턴스로 직접 접속하는 별칭으로 설정한다. Extract 프로세스는 이 접속에서 인스턴스 번호를 조회하여 활성 Standby Log를 읽을 접속 지점을 결정하므로, 이 별칭이 다른 인스턴스를 가리키면 활성 Standby Log의 변경분을 읽지 못한다.

  • Extract 프로세스별 SRC_PRIMARY_LOCAL_SID는 해당 Redo Thread를 소유한 Primary 인스턴스로 직접 접속하는 별칭으로 설정한다.

TSC 환경을 Source로 사용하는 경우 ProSync용 TIP 파일 설정은 Primary DB와 Standby DB 모두(TAC-TSC는 모든 노드)에 적용되어 있어야 한다. Failover 이후에는 승격된 Standby DB가 Redo를 생성하는 추출 소스가 되기 때문이다. 설정 항목은 페이지를 참고한다.

Standby DB는 read-only 모드로 open되어 있어야 한다. read-only 모드가 아니면 접속이 거부된다.

RECOVERY 모드로 운영 중인 Standby DB는 다음 명령으로 복구를 중단하지 않고 read-only 세션을 허용하도록 전환할 수 있다.

Standby 별칭으로 접속하여 역할을 확인한다. 정상 TSC 상태의 기대값은 STANDBY이다.

Primary 별칭으로 접속하여 역할이 PRIMARY인지 함께 확인한다.

ProSync Source 계정은 TSC 역할과 Standby 복구 상태를 조회할 수 있어야 한다.

TAC-TSC 환경에서는 GV$INSTANCE, GV$PARAMETERS 조회 권한도 필요하다. 두 뷰는 활성 Standby Log를 읽을 인스턴스별 접속 지점을 결정하는 데 사용한다. 권한이 없으면 기동 시 역할 검증, Failover 감지, 복구 상태 대기 등이 실패하거나 재시도 상태에 머무를 수 있다.

PRS_OBJ_LIST, PRS_TXINFO 등 ProSync가 Source DB에 생성하는 메타데이터 객체는 쓰기 가능한 Primary DB에 생성되어 있어야 한다. 설치 구성에서 USE_TSC=Y를 설정하면 설치 과정의 Source DB 측 객체 생성 작업이 Primary에서 수행된다.

ENABLE_TSC_STANDBY=[Y|N]

파라미터
설명

Single TSC 구성의 예시는 다음과 같다.

TAC-TSC(2 Thread) 구성에서는 Extract 프로세스별로 인스턴스 직결 별칭을 다르게 설정한다.

SRC_PRIMARY_LOCAL_SID는 Extract 전용 파라미터이므로 Llob 설정에는 넣지 않는다.

설치 config 파일에 USE_TSC=Y를 설정하면 설치 과정에서 TSC 구성이 자동으로 반영된다.

USE_TSC=Y로 설치하면 다음이 수행된다.

  • Primary 별칭 접속 확인 및 별칭 중복 검증

  • Source DB 측 설치 DDL/DML의 Primary 수행 (Archive Log 정보 조회는 Standby에서 수행)

  • 생성되는 Extract/Llob config에 TSC 파라미터 자동 기입

설치 후 생성된 process config에 다음 값이 기입되어 있는지 확인한다.

Standby DB에서 추출할 때 Extract 프로세스는 전체 Redo Thread의 MIN(RECOVERED_TSN)(안전 추출 TSN)까지만 LCR을 전송한다. Failover 승격 시 복구로 재적용되지 않을 수 있는 Redo가 Target DB에 먼저 반영되는 것을 막기 위한 경계이다.

LCR의 TSN이 안전 추출 TSN을 넘으면 Standby 복구가 따라올 때까지 대기한 뒤 전송하며, 대기는 _TCP_CONNECT_INTERVAL 주기로 재시도한다.

PRS_TXINFO의 조회/저장, 동기화 테이블 추가/삭제 시의 Source DB 측 작업(PRS_OBJ_LIST 등록, Supplemental Log 변경 등), Dummy Transaction, Logfile Switch는 쓰기 가능한 라우팅 경로에서 수행된다. 정상 TSC 상태에서는 Primary 별칭에서 수행되고, Failover 이후에는 승격된 Standby 별칭에서 수행된다.

조회와 저장은 항상 같은 DB 접속(쓰기 라우팅이 가리키는 DB)을 사용한다. 정상 TSC 상태에서는 조회도 Primary 별칭에서 수행하며 Standby에서 조회하지 않는다. 이는 Standby 복구 지연으로 인해 Primary에 저장한 메타데이터를 Standby에서 조회하지 못하는 불일치를 막기 위한 동작이다.

Llob 프로세스는 Standby DB에서 Flashback 조회를 수행한다. Standby 복구가 Flashback 조회 시점(AS OF SCN)보다 늦으면 잘못된 값을 읽을 수 있으므로, 조회 전에 전체 Redo Thread의 MIN(RECOVERED_TSN)이 조회 시점 이상이 될 때까지 대기한다.

Failover 이후 Source 별칭이 이미 PRIMARY인 경우에는 대기를 생략한다.

SRC_DB_NAME의 역할이 STANDBY, SRC_PRIMARY_DB_NAME의 역할이 PRIMARY인 상태이다. 쓰기 라우팅은 Primary 별칭을 가리킨다.

SRC_DB_NAME이 여전히 STANDBY인데 Primary 역할 조회가 실패하면 ProSync는 Standby에 쓰기 작업을 보내지 않는다. 쓰기 라우팅은 Primary 방향을 유지한 채 재접속을 재시도한다. 이는 Standby에 메타데이터 쓰기를 보내지 않기 위한 안전 동작이다.

쓰기 작업 직전, 로그 대기 중, 안전 추출 TSN 대기 중에 SRC_DB_NAME의 역할이 PRIMARY로 확인되면 Failover 승격으로 판단한다. 이후 쓰기 라우팅과 읽기 라우팅이 모두 승격된 SRC_DB_NAME으로 통합되고, 기존 DB 접속은 새 라우팅 기준으로 재연결된다.

Extract 프로세스는 승격을 감지하면 읽고 있던 로그를 마지막 안전 지점부터 다시 열고 트랜잭션 추적 상태를 초기화하여, 승격 이전 로그 기준의 상태가 이월되어 변경분이 유실되는 것을 방지한다.

한 번 승격 상태로 전환되면 이전 Primary가 다시 PRIMARY로 돌아와도 ProSync는 실행 중 자동으로 라우팅을 되돌리지 않는다(자동 Switchback 미지원). 이전 Primary로 복귀하려면 TSC 구성 상태와 ProSync 설정을 확인한 뒤 명시적으로 재기동해야 한다.

  • TSC Standby 동기화는 Tibero Source 전용이다.

  • TAC-TSC는 Primary와 Standby의 노드 수가 동일해야 한다.

  • Standby DB는 read-only 모드로 open되어 있어야 한다.

  • Failover 이후 이전 Primary로의 자동 Switchback은 지원하지 않는다.

운영 중 다음 로그 키워드로 TSC 동작 상태를 확인할 수 있다.

  • SRC_DB_TYPE=TIBERO인지 확인한다.

  • ENABLE_TSC_STANDBY=Y일 때 SRC_PRIMARY_DB_NAME이 설정되어 있는지 확인한다.

  • Standby DB가 read-only 모드로 open되어 있는지 확인한다.

waiting for TSC safe extraction TSN 또는 waiting for TSC standby recovery 로그가 지속되면 Standby 복구가 지연되고 있는 것이다.

  • Standby에서 SELECT MIN(RECOVERED_TSN) FROM V$STANDBY 값이 전진하는지 확인한다.

  • 특정 Redo Thread의 복구만 지연되고 있는지 확인한다. 전체 Thread의 최솟값 기준으로 대기하므로 한 Thread만 늦어도 대기한다.

  • Redo 전송 또는 Standby 복구 지연 여부를 확인한다.

  • SRC_DB_NAME의 역할이 아직 STANDBY인지 확인한다. Standby가 승격되지 않았다면 쓰기 작업을 보내지 않는 것이 정상 동작이다.

  • Failover가 완료되어 SRC_DB_NAME의 역할이 PRIMARY가 되었는지 확인한다.

특정 Extract 프로세스의 변경분만 Target DB에 반영되지 않으면 활성 Standby Log를 잘못된 접속 지점으로 읽고 있을 수 있다.

  • 해당 Extract 프로세스의 SRC_LOCAL_SID가 그 Redo Thread의 로그를 기록하는 Standby 인스턴스 직결 별칭인지 확인한다.

SRC_PRIMARY_LOCAL_SID

Primary 인스턴스 직결 별칭(Extract 전용). Dummy Transaction, Logfile Switch에 사용한다.

PRS_TXINFO 조회/저장

SRC_PRIMARY_DB_NAME

SRC_DB_NAME

동기화 테이블 추가/삭제

SRC_PRIMARY_DB_NAME

SRC_DB_NAME

Supplemental Log 변경

SRC_PRIMARY_DB_NAME

SRC_DB_NAME

Dummy Transaction

SRC_PRIMARY_LOCAL_SID

SRC_LOCAL_SID

Logfile Switch

SRC_PRIMARY_LOCAL_SID

SRC_LOCAL_SID

복구 상태 대기(안전 추출, Llob Flashback)는 별도 timeout 없이 _TCP_CONNECT_INTERVAL 주기로 계속 재시도한다.

SRC_DB_NAME과 SRC_PRIMARY_DB_NAME 별칭이 서로 바뀌지 않았는지 확인한다.

Tibero (Single TSC, TAC-TSC — Primary와 Standby의 노드 수가 동일한 구성)

대상 프로세스

Extract, Llob

SRC_DB_NAME

Standby 별칭. Redo Log 읽기, Llob Flashback 조회, 복구 상태 조회에 사용한다.

SRC_LOCAL_SID

Standby 인스턴스 직결 별칭. Archive Log 정보 조회와 TAC-TSC의 인스턴스 판별에 사용한다.

SRC_PRIMARY_DB_NAME

Redo Log 읽기

SRC_DB_NAME

SRC_DB_NAME

Llob Flashback 조회

SRC_DB_NAME

ENABLE_TSC_STANDBY

TSC Standby 동기화 사용 여부를 설정한다. Y로 설정하면 읽기 별칭과 쓰기 별칭을 분리하여 동작한다. 기본값은 N이며, SRC_DB_TYPE=TIBERO에서만 사용할 수 있다. (적용: Extract, Llob)

SRC_PRIMARY_DB_NAME

정상 TSC 상태에서 Source DB 측 메타데이터 작업을 수행할 Primary 별칭을 설정한다. ENABLE_TSC_STANDBY=Y인 경우 반드시 설정해야 한다. (적용: Extract, Llob)

SRC_PRIMARY_LOCAL_SID

데이터베이스 설정

주의

TSC Standby 동기화는 Tibero Source에서만 사용할 수 있다. Oracle, PostgreSQL Source에서는 ENABLE_TSC_STANDBY=Y를 사용할 수 없다.

또한 ProSync가 연동하는 Standby DB는 Primary DB에 직접 연결된 1개여야 하며, TAC-TSC는 Primary와 Standby의 노드 수가 동일한 구성만 지원한다. 1:N(Broadcasting) Standby 구성과 Cascading Standby 구성의 제약은 아래 '제약사항'을 참고한다.

동작 구조

참고

Dummy Transaction과 Logfile Switch는 인스턴스 직결 별칭이 설정되어 있지 않으면 각각 SRC_PRIMARY_DB_NAME(정상 상태), SRC_DB_NAME(Failover 이후)을 사용한다.

TAC-TSC 구성의 별칭 배치

사전 준비

TIP 파일 설정 확인

Standby DB 상태 확인

계정 권한 확인

참고

여기에 나열한 조회 권한은 Source DB가 Tibero인 경우 SRC_INSTALL_USER에 부여해야 하는 최소 권한으로 설치했다면 설치 과정에서 ProSync 계정에 자동으로 부여되므로, 별도로 추가 부여할 필요가 없다. 최소 권한 목록은 Instance 설치 페이지를 참고한다.

메타데이터 객체 위치 확인

설정 파라미터

설정 예시

Extract 설정

Llob 설정

설치 구성

동작 방식

안전 추출 경계

메타데이터 라우팅

Llob Flashback 조회 대기

Failover 동작

정상 TSC 상태

Primary 장애, Standby 미승격

Standby 승격 감지

Old Primary 복귀

제약사항

주의

1:N(Broadcasting) Standby 구성과 Cascading Standby 구성의 하위 Standby 연동은 지원하지 않는다.

ProSync는 SRC_DB_NAME과 SRC_PRIMARY_DB_NAME 두 별칭의 1:1 역할 전환만 추적하므로, 연동하지 않은 다른 DB로 역할 전환이 일어나면 이를 감지하지 못하고 Primary Routing(쓰기 라우팅 전환)이 불가능하다.

  • 1:N(Broadcasting) Standby: Primary 하나에 LOG_REPLICATION_DEST_N으로 Standby를 여러 개 연결하는 구성이다. Failover 시 TSN이 가장 높은 Standby가 Primary로 승격되어 승격 대상을 예측할 수 없으므로 New Primary를 감지할 수 없다. 또한 각 Standby가 동일한 Redo Log를 보유하므로 여러 Standby에 Extract 프로세스를 각각 기동하면 Target DB에 DML이 중복 반영될 수 있다. 이 구성은 지원하지 않는다.

  • Cascading Standby: STANDBY_ENABLE_CASCADING=Y로 Standby가 다른 Standby에 Redo Log를 중계하는 구성이다. Primary DB에 직접 연결된 최상단 Standby에 연동하는 것은 지원한다. 다만 하위 Standby(다른 Standby로부터 Redo Log를 중계받는 Standby)에 연동하는 것은 cascade 단계에 따른 지연이 있고 상위 Standby의 역할 전환을 감지할 수 없으므로 지원하지 않는다.

로그 확인

문제 상황별 확인 항목

기동에 실패하는 경우

추출 또는 Llob 조회가 지연되는 경우

Primary 장애 후 쓰기 작업이 진행되지 않는 경우

TAC-TSC에서 특정 Extract만 동기화가 반영되지 않는 경우

Primary 별칭. Source DB 측 메타데이터 조회/변경 작업에 사용한다.

SRC_DB_NAME

Dummy Transaction, Logfile Switch와 같이 특정 인스턴스에서 수행해야 하는 작업에 사용할 Primary 인스턴스 직결 별칭을 설정한다. 설정하지 않으면 SRC_PRIMARY_DB_NAME을 사용한다. TAC-TSC 환경에서는 Extract 프로세스별로 해당 Redo Thread를 소유한 Primary 인스턴스의 별칭을 설정한다. (적용: Extract)

ALTER DATABASE OPEN READ ONLY CONTINUE RECOVERY;
SELECT DATABASE_ROLE FROM V$DATABASE;
SELECT DATABASE_ROLE FROM V$DATABASE;
SELECT MIN(RECOVERED_TSN) FROM V$STANDBY;
SELECT INSTANCE_NUMBER FROM V$INSTANCE;
SRC_DB_TYPE=TIBERO
SRC_DB_NAME=tibero_s
SRC_LOCAL_SID=tibero_s

ENABLE_TSC_STANDBY=Y
SRC_PRIMARY_DB_NAME=tibero_p
SRC_PRIMARY_LOCAL_SID=tibero_p
# ext1
SRC_DB_NAME=tibero_s
SRC_LOCAL_SID=tibero_s1
ENABLE_TSC_STANDBY=Y
SRC_PRIMARY_DB_NAME=tibero_p
SRC_PRIMARY_LOCAL_SID=tibero_p1

# ext2
SRC_DB_NAME=tibero_s
SRC_LOCAL_SID=tibero_s2
ENABLE_TSC_STANDBY=Y
SRC_PRIMARY_DB_NAME=tibero_p
SRC_PRIMARY_LOCAL_SID=tibero_p2
SRC_DB_TYPE=TIBERO
SRC_DB_NAME=tibero_s

ENABLE_TSC_STANDBY=Y
SRC_PRIMARY_DB_NAME=tibero_p
SRC_DB_TYPE=TIBERO
SRC_DB_NAME=tibero_s              # Standby 별칭

USE_TSC=Y
SRC_PRIMARY_DB_NAME=tibero_p      # Primary 별칭

# (TAC-TSC) SRC_DB_ALIAS_N과 병렬인 Primary 인스턴스별 별칭 (선택)
SRC_PRIMARY_DB_ALIAS_0=tibero_p1
SRC_PRIMARY_DB_ALIAS_1=tibero_p2

# (Cluster) Thread별 Standby 인스턴스 직결 별칭
SRC_DB_CNT=2
SRC_DB_ALIAS_0=tibero_s1
SRC_DB_ALIAS_1=tibero_s2
SRC_DB_TYPE=TIBERO
SRC_DB_NAME=tibero_s
ENABLE_TSC_STANDBY=Y
SRC_PRIMARY_DB_NAME=tibero_p
TSC standby source enabled
TSC source DB role transition detected
waiting for TSC safe extraction TSN
TSC promotion detected while waiting for safe TSN; reopen current log
TSC promotion detected while waiting for log; reopen current log
waiting for TSC standby recovery before LLOB flashback read
TSC source DB is primary; skip recovered TSN wait
TSC has no writable source DB route
TSC primary source DB role validation failed
TSC writable source DB connection failed
TSC source DB role validation failed; ensure the TSC standby DB is open in read-only mode