소스 및 타겟 데이터 정보
SharePlex 복제는 소스 및 타겟의 개념을 사용합니다.
- 소스 데이터는 복제할 기본 데이터입니다. 이 데이터는 소스 시스템에 있습니다.
- 타겟 데이터는 기본 데이터의 전체 또는 하위 집합 복사본입니다. 이 데이터는 타겟 시스템에 있습니다.
복제의 목적은 소스 및 타겟 데이터를 동기화 상태로 유지하는 것입니다. 이는 소스 데이터의 상태가 타겟 데이터에 정확하게 반영되어 수행되는 모든 변환과 복제 스트림의 시간 지연을 조정함을 의미합니다.
타겟 데이터는 데이터베이스의 테이블, 메시징 큐나 항목의 메시지, 다른 소프트웨어 프로그램에서 사용할 수 있는 파일의 XML 또는 SQL 레코드 등 SharePlex가 지원하는 타겟 유형의 형식을 취할 수 있습니다.
SharePlex 아키텍처 정보
SharePlex 아키텍처 정보
이 항목에서는 SharePlex의 기본 구성에 대해 설명합니다. 데이터 스트림을 격리하거나 성능을 향상시키기 위해 SharePlex 구성을 사용자 지정하여 큐와 프로세스를 더 추가할 수 있습니다.
SharePlex 디렉토리
SharePlex 두 개의 주요 디렉토리를 사용합니다.
product 디렉토리: SharePlex 프로그램과 라이브러리가 저장되는 SharePlex 설치 디렉토리입니다.
variable-data 디렉토리: 현재 복제 환경을 구성하는 큐 파일, 로그 파일 및 기타 구성 요소가 저장되는 SharePlex 작업 디렉토리입니다.
참고: 이러한 디렉토리는 각각 productdir 및 vardir이라고도 합니다.
SharePlex로 설치된 파일 또는 디렉토리를 제거하거나 이름을 바꾸거나 편집하지 마십시오. 일부 디렉토리에는 복제에 필수적인 숨겨진 파일이 포함되어 있습니다. 일부 파일은 비어 있는 것처럼 보이지만 하나 이상의 SharePlex 프로세스에서 참조하기 때문에 원래 이름으로 존재해야 합니다. 디렉토리의 일부 항목은 Quest 기술 지원의 감독 하에서만 사용할 수 있습니다.
프로덕션 환경에서 일반적으로 사용되는 프로그램은 게시된 SharePlex 문서에 설명되어 있습니다. SharePlex 디렉토리에서 프로그램에 대한 문서를 찾을 수 없으면 해당 프로그램을 실행하지 마십시오. 먼저 Quest 기술 지원에 문의하십시오.
파일과 디렉토리는 SharePlex 버전마다 다를 수 있지만 기본 구조는 다음과 같습니다.
SharePlex product 디렉토리
BACKUP |
제거 정보 |
bin |
SharePlex 실행 파일 |
config |
내부적으로 사용되는 내용입니다. |
data |
기본 매개변수 설정 |
doc |
예외 메시지 카탈로그 |
install |
(Unix 및 Linux에만 해당) 설치, 라이선스 및 업그레이드와 관련된 스크립트 |
lib |
SharePlex 공유 라이브러리 |
log |
SharePlex 로그 파일 |
mks_oe |
SharePlex에서 사용하는 타사 소프트웨어용 런타임 설치 파일입니다. |
util |
SharePlex 유틸리티 |
.app-modules |
(Unix 및 Linux에만 해당) 원시 실행 파일이 포함된 숨겨진 내부 디렉토리입니다. 프로세스를 시작하는 데 이 디렉토리의 내용을 사용하지 마십시오. |
.meta-inf |
(Unix 및 Linux에만 해당) 설치 프로세스 중에 사용되는 메타 정보가 포함된 숨겨진 내부 디렉토리입니다. |
SharePlex variable-data 디렉토리
config |
이 SharePlex 설치를 위한 구성 파일입니다. |
data |
상태 데이터베이스, 구성 활성화 정보, 사용자 정의 매개변수 설정 및 복제 활동을 지시하는 기타 사용자 정의 파일입니다. |
db |
구성 파일의 각 활성화를 위한 구성 내부 데이터베이스입니다. |
downgrd |
소스보다 낮은 버전인 SharePlex 타겟에 대한 정보입니다. |
dump |
코어 파일(프로세스가 실패한 경우) |
log |
SharePlex 로그 파일 |
rim |
큐 파일(작업 데이터 파일) |
save |
활성 및 비활성 구성에 대한 정보입니다. |
state |
객체 및 시퀀스 캐시와 같은 구성이 활성화될 때 SharePlex의 현재 상태에 대한 정보입니다. |
temp |
복사 및 추가 기능과 기타 SharePlex 동기화 관련 프로세스에 사용됩니다. |
oos |
SP_OPO_SAVE_OOS_TRANSACTION 매개변수가 활성화된 경우 동기화 중단 작업이 포함된 트랜잭션을 저장합니다. |
sp_cop 프로세스
sp_cop 프로그램은 SharePlex 복제 프로세스(Capture, Read, Export, Import, Post) 및 SharePlex 큐를 조정하고, 특정 작업을 수행하는 다른 모든 백그라운드 프로세스를 시작합니다. 또한 복제 네트워크의 다른 시스템과의 통신도 유지합니다. 일반적으로 대부분의 SharePlex 사용자는 시작하거나 중지하는 것 외에는 sp_cop와 상호작용이 거의 없습니다. 시작하면 sp_cop가 백그라운드에서 실행됩니다.
- SharePlex 관리자(SharePlex admin 그룹의 구성원)만 sp_cop를 시작하거나 중지할 수 있습니다.
- sp_cop는 복제와 관련된 모든 소스 및 타겟 시스템에서 시작되어야 합니다.
- 애플리케이션이 소스 시스템의 데이터에 접근하는 즉시(또는 그 전에) sp_cop를 시작하므로 모든 SharePlex 프로세스가 트랜잭션 처리를 시작할 준비를 합니다. 이렇게 하면 Capture가 소스 데이터에 대한 변경 사항에 맞춰 대응할 수 있습니다.
sp_ctrl 프로세스
sp_ctrl을 사용하여 SharePlex 활동을 시작, 중지, 구성, 지시 및 모니터링하는 명령을 실행할 수 있습니다. sp_ctrl 프로그램은 명령을 실행하는 sp_cop의 하위 프로세스인 sp_cnc(명령 및 제어) 프로세스와 내부적으로 상호작용합니다. 사용자는 sp_cnc 자체와는 상호작용하지 않습니다.
SharePlex 복제 프로세스
SharePlex는 기본 SharePlex 프로세스인 sp_cop에 의해 시작되는 일련의 복제 프로세스를 통해 데이터를 복제합니다.

- Capture 프로세스: Capture 프로세스는 SharePlex에 의해 복제용으로 구성된 객체의 변경 사항에 대해 소스 시스템의 트랜잭션 레코드를 읽습니다. Capture 프로세스는 데이터를 Capture 큐에 기록하며, Read 프로세스가 준비될 때까지 데이터를 누적합니다. 데이터가 둘 이상의 데이터 소스에서 복제되는 경우 각각에 대해 별도의 Capture 프로세스가 있으며 개별적으로 동시에 작동합니다. Capture 프로세스의 이름은 sp_ocap(Oracle Capture)입니다.
- Read 프로세스: Read 프로세스는 소스 시스템에서 작동하여 Capture 큐에서 데이터를 읽고 라우팅 정보를 추가합니다. 데이터를 처리한 후 Read 프로세스는 이를 Export 큐로 보냅니다. Read 프로세스의 이름은 sp_ordr입니다.
- Export 프로세스: Export 프로세스는 소스 시스템에서 작동하여 Export 큐에서 데이터를 읽고 이를 네트워크를 통해 타겟 시스템으로 보냅니다. 기본적으로 각 타겟 시스템마다 하나의 Export 프로세스가 있습니다. 예를 들어 타겟 시스템이 두 개 있으면 Export 프로세스도 두 개입니다. Export 프로세스는 TCP/IP 네트워크를 통해 시스템 간에 데이터를 이동하는 익스포트/임포트 전송 쌍의 전반부입니다. Export 프로세스의 이름은 sp_xport입니다.
-
Import 프로세스: Import 프로세스는 익스포트/임포트 전송 쌍의 후반부입니다. Import 프로세스는 타겟 시스템에서 작동하여 데이터를 수신하고 Post 큐를 빌드합니다. 해당 타겟에 데이터를 보내는 각 Export 프로세스에 대해 타겟 시스템에는 하나의 Import 프로세스가 있습니다. 예를 들어 단일 타겟 시스템에 데이터를 복제하는 두 개의 소스 시스템(각각 Export 프로세스 포함)이 있는 경우 해당 타겟에는 두 개의 Import 프로세스가 있습니다. Import 프로세스의 이름은 sp_mport입니다.
참고: 동일한 시스템의 데이터베이스 간에 데이터 복제가 가능합니다. 이 경우 Export 및 Import 프로세스가 생성되지 않습니다. Read 프로세스는 데이터를 해당 시스템의 Post 큐에 직접 배치합니다.
- Post 프로세스: Post 프로세스는 타겟 시스템에서 작동하여 Post 큐를 읽고 복제된 작업을 타겟 데이터베이스, 파일, 메시지 큐 또는 항목에 적용합니다. 타겟 시스템의 각 Post 큐에 대한 Post 프로세스가 있습니다. 여러 Post 프로세스가 시스템에서 동시에 작동할 수 있습니다. Post 프로세스는 sp_opst_mt(Oracle Post) 또는 sp_xpst(Open Target Post)입니다.
SharePlex에 의한 모든 통신 및 데이터 이동은 대용량 데이터 전송에 매우 효율적인 TCP/IP 연결이 있는 비동기 스트림 프로토콜을 사용하여 내부 메시징 및 전송 시스템을 통해 처리됩니다. 이 방법은 통신 대역폭을 보존하면서 최적의 성능, 안정성 및 재시작 기능을 보장합니다. SharePlex는 TCP/IP 네트워크를 통해 복제할 수 있습니다.
SharePlex 큐
큐는 소스 시스템에서 타겟 시스템으로 복제된 데이터가 전송될 때 이를 저장합니다. 큐는 데이터의 안전한 비동기 전송을 원활하게 하는 체크포인트 복구 시스템의 일부입니다. 데이터는 생성된 순서대로 큐를 통해 이동됩니다.
데이터는 다음 큐에 기록될 때까지 한 큐에서 읽기 해제(삭제)되지 않습니다. 네트워크, 시스템 또는 데이터베이스가 느려지거나, 오류가 발생하거나, 복제 프로세스가 중지되면 소스 및 타겟 시스템의 큐에 데이터가 누적됩니다. 문제나 중단이 해결되면 SharePlex는 중지된 지점부터 처리를 재개합니다.
SharePlex 복제는 다음과 같은 큐를 사용합니다.
- Capture 큐: Capture 큐는 소스 시스템에 있으며 SharePlex의 추가 처리를 위해 캡처된 데이터를 저장합니다. 복제되는 각 데이터 소스에는 하나의 Capture 큐가 있습니다. Capture 큐는 데이터 소스로 식별됩니다(예: o.fin1).
- Export 큐: Export 큐는 소스 시스템에 있습니다. 이는 SharePlex에 의해 처리되어 타겟 시스템으로 전송할 준비가 된 데이터를 보유합니다. 기본적으로 활성 구성 또는 타겟 시스템 수에 관계없이 소스 시스템에는 하나의 Export 큐가 있습니다. 기본 Export 큐는 큐가 있는 소스 시스템의 이름으로 식별됩니다(예: SysA). 더욱 복잡한 복제 전략을 위해 명명된 Export 큐를 생성하도록 SharePlex에 지시할 수 있습니다.
- Post 큐: Post 큐는 타겟 시스템에 있습니다. 타겟 시스템에는 Post가 타겟 데이터베이스, 파일 또는 메시지 큐나 항목에 쓸 준비가 된 데이터가 있습니다. 각 타겟 시스템에는 데이터 소스와 해당 타겟 간의 복제 스트림에 대한 하나의 Post 큐가 있습니다. 예를 들어 DatabaseA와 DatabaseB가 모두 DatabaseC에 복제되는 경우 두 개의 Post 큐가 있습니다. 기본 Post 큐는 소스 시스템의 이름과 데이터 소스 및 타겟으로 식별됩니다(예: SysA (o.DatabaseA-o.DatabaseB)) . 더욱 복잡한 복제 전략을 위해 명명된 Post 큐를 생성하도록 SharePlex에 지시할 수 있습니다.
참고: 모든 SharePlex 큐 파일은 SharePlex variable-data 디렉토리의 rim 하위 디렉토리에 생성되고 유지됩니다.
SharePlex 설치 객체
복제 프로세스의 대부분은 SharePlex설치 중에 소스 또는 타겟 데이터베이스에 설치된 일련의 내부 객체를 통해 제어되고 추적됩니다. 이는 SharePlex가 작동하는 데 필수적이므로 어떠한 방식으로도 변경하지 마십시오.
참고: 모든 객체가 모든 데이터베이스에 사용되는 것은 아닙니다. 대부분은 Oracle 데이터베이스에 사용됩니다. 데이터베이스에 객체가 표시되지 않으면 해당 객체가 데이터베이스와 관련이 없거나 정보가 SharePlex 구성 내에 내부적으로 저장되어 있는 것입니다. 데이터베이스에는 있지만 이 목록에는 없는 객체가 보이는 경우 해당 객체는 현재 릴리스에서 사용되지 않는 것입니다.
DEMO_SRC |
테이블 |
SharePlex 데모의 소스 테이블로 사용됩니다. |
DEMO_DEST |
테이블 |
SharePlex 데모의 타겟 테이블로 사용됩니다. |
SHAREPLEX_ACTID |
테이블 |
Capture에서 상태를 검사하는 데 사용됩니다. |
SHAREPLEX_ANALYZE |
테이블 |
analyze 명령에 사용됩니다. |
SHAREPLEX_CHANGE_OBJECT |
테이블 |
사용자가 객체에 대한 복제를 중지하고 재개하는 데 사용됩니다. |
SHAREPLEX_COMMAND |
테이블 |
flush, abort 및 purge 명령에 사용됩니다. |
SHAREPLEX_CONFIG |
테이블 |
활성화 및 Capture 프로세스에서 새 활성화의 시작을 표시하는 데 사용됩니다. |
SHAREPLEX_DATA |
테이블 |
Oracle TDE 복제를 위해 SharePlex 지갑에서 사용됩니다. |
SHAREPLEX_DATAEQUATOR |
테이블 |
compare 및 repair 명령과 Post 프로세스에서 해당 작업을 동기화하는 데 사용됩니다. |
SHAREPLEX_DATAEQUATOR_INSERT_TEMP |
테이블 |
compare 및 repair 명령에 의해 임시 테이블로 사용됩니다. |
SHAREPLEX_DATAEQUATOR_UPDATE_TEMP |
테이블 |
compare 및 repair 명령에 의해 임시 테이블로 사용됩니다. |
SHAREPLEX_DATAEQUATOR_DELETE_TEMP |
테이블 |
compare 및 repair 명령에 의해 임시 테이블로 사용됩니다. |
SHAREPLEX_DDL_CONTROL |
테이블 |
SP_OCT_REPLICATE_ALL_DDL 매개변수에 의해 복제가 활성화된 DDL 제어를 구체화하는 데 사용됩니다. |
SHAREPLEX_JOBID |
시퀀스 |
sp_cnc 프로세스와 compare, repair 및 copy 명령에서 고유한 작업 ID를 제공하는 데 사용됩니다. |
SHAREPLEX_JOBS |
테이블 |
sp_cnc 프로세스와 compare, repair 및 copy 명령에서 고유한 작업의 정보를 저장하는 데 사용됩니다. |
SHAREPLEX_JOB_STATS |
테이블 |
sp_cnc 프로세스와 compare, repair 및 copy 명령에서 고유한 작업의 정보를 저장하는 데 사용됩니다. |
SHAREPLEX_JOBS_CONFIG |
테이블 |
disable jobs 및 enable jobs 명령에 사용됩니다. |
SHAREPLEX_LOB_CACHE |
테이블 |
LOB로 저장된 VARRAY를 처리할 때 Capture 프로세스에서 사용됩니다. |
SHAREPLEX_LOBMAP |
테이블 |
LOB 컬럼이 있는 테이블에 PK/UK 로깅이 활성화되지 않은 경우 LOBID와 행을 매핑하기 위해 Capture 프로세스에서 사용됩니다. |
SHAREPLEX_LOGLIST |
테이블 |
비활성 RAC 인스턴스를 추적하기 위해 Capture 프로세스에서 사용됩니다. |
SHAREPLEX_MARKER |
테이블 |
PK/UK 로깅이 활성화되지 않은 경우 Read 프로세스에서 사용됩니다. |
SHAREPLEX_OBJMAP |
테이블 |
활성화 및 Capture 프로세스에서 복제의 객체를 정의하는 데 사용됩니다. |
SHAREPLEX_PARTITION_CACHE |
테이블 |
Oracle 파티션 ID를 복제 테이블에 매핑하기 위해 Capture 프로세스에서 사용됩니다. |
SHAREPLEX_SYNC_MARKER |
테이블 |
copy 명령과 Read 및 Post 프로세스에서 해당 작업을 동기화하는 데 사용됩니다. |
SHAREPLEX_TRANS
또는
SHAREPLEX_OPEN_TRANS |
테이블 |
Post 프로세스에서 체크포인트를 저장하고 기본-기본 구성에 적용된 트랜잭션을 표시하는 데 사용됩니다. |
SharePlex 복제 작동 방식
SharePlex 복제 작동 방식
SharePlex는 데이터를 복제하기 위해 소스 시스템에서 트랜잭션 데이터 스트림을 읽고 구성 파일에 지정된 객체에 대한 변경 사항을 캡처합니다. 구성 파일에서 복제할 데이터와 해당 데이터가 적용될 타겟을 지정합니다.
복제를 시작하려면 구성 파일을 활성화합니다. 이 작업은 처음으로 소스 및 타겟 데이터 동기화를 포함하는 일련의 단계에서 sp_ctrl의 activate config 명령을 통해 수행됩니다. 구성이 활성화되면 SharePlex는 전체 데이터 기록이 아닌 구성 파일에 지정된 객체에 대한 변경 사항만 복제하므로 빠르고 안정적인 복제 솔루션을 제공합니다.
자세한 내용은 다음을 참조하십시오.
SharePlex는 트랜잭션 작업에 대해 보유한 정보를 통해 소스 시스템에서 타겟 시스템으로 전송되는 하나 이상의 메시지를 생성합니다. 메시지는 SQL 작업이나 내부 SharePlex 작업을 반영할 수 있지만 대부분의 경우 INSERT, UPDATE, DELETE, COMMIT, TRUNCATE 또는 지원되는 DDL 작업입니다.
참고: LONG 또는 LOB 컬럼과 같은 대규모 작업에는 메시지에 크기 제한이 있으므로 둘 이상의 메시지가 필요할 수 있습니다. 작은 레코드의 어레이 삽입 등 다른 작업은 반대의 결과를 가져옵니다. 즉, 수많은 작업에 대해 하나의 레코드가 있을 수 있습니다. 예를 들어 70,000개 행의 어레이 삽입은 데이터에 따라 트랜잭션 스트림에 700개 메시지로만 기록될 수 있습니다. 일반적으로 이러한 종류의 데이터 유형에 대한 많은 변경 사항을 복제하지 않으면 프로세스 또는 큐의 상태 출력에 표시되는 메시지 수가 대략 동일한 수의 SQL 작업에 해당한다고 가정할 수 있습니다.
Post 프로세스는 Post 큐에서 메시지를 읽고, 복제된 데이터 변경 사항을 타겟에 적용합니다. 데이터베이스 타겟의 경우 Post는 SQL 문을 구성하여 데이터를 적용합니다. 데이터베이스 타겟이 아닌 경우 Post는 타겟에 필요한 형식(예: 파일, 메시징 큐 또는 항목)으로 데이터 레코드를 출력합니다.
다음은 SharePlex가 타겟 시스템에서 SQL 문을 빌드하는 기본적인 방법을 설명합니다.
- 변경 사항이 INSERT인 경우 SharePlex는 행의 모든 컬럼을 사용하여 INSERT 문을 빌드합니다.
- 변경 사항이 DELETE인 경우 SharePlex는 키만 사용하여 올바른 행을 찾을 WHERE 절을 빌드합니다. Oracle의 경우 테이블에 키가 없으면 SharePlex는 LONG 및 LOB 컬럼을 제외한 모든 컬럼의 값을 사용하여 키를 시뮬레이션합니다. 구성 파일을 생성할 때 키로 사용할 컬럼을 지정할 수 있습니다. SQL Server의 경우 구성된 모든 객체에는 기본 키가 있어야 합니다.
- 변경 사항이 UPDATE인 경우 SharePlex는 키와 변경된 컬럼의 값을 사용하여 올바른 행을 찾을 WHERE 절을 빌드합니다. 데이터베이스에 변경 사항을 적용하기 전에 Post 프로세스는 소스 컬럼 값의 사전 이미지를 타겟 컬럼의 기존 값과 비교합니다. 사전 이미지(이전 이미지라고도 함)는 UPDATE 이전에 변경된 각 컬럼의 값입니다. 사전 이미지와 기존 타겟 값이 일치하여 동기화된 상태를 확인하면 Post에서 변경 사항을 적용합니다. 일치하지 않는 경우 Post는 작업을 오류 파일에 기록하고 SharePlex는 "동기화 중단" 오류를 반환합니다.
- 변경 사항이 소스 시스템의 여러 행에 영향을 미치는 UPDATE 또는 DELETE 문인 경우 SharePlex는 타겟에서 여러 문을 실행하여 작업을 완료합니다. 예를 들어 UPDATE tableA set name = ‘Lisa’ where rownum < 101 문은 소스에서 단 하나의 문만 실행되었더라도 실제로 100개의 UPDATE 문을 타겟에 보냅니다.
동기화의 개념 이해
동기화 개념은 주로 테이블 간 복제에 적용됩니다. 여기서, Post는 무결성 검사를 수행하여 타겟의 한 행만 복제 중인 행 변경 사항과 일치하는지 확인합니다. Post에 의해 복제된 모든 작업의 레코드를 포함하는 파일, 메시징 타겟 및 변경 내역 타겟에는 적용되지 않으며 그 중 일부는 시간이 지남에 따라 동일할 수 있습니다. Post 프로세스는 해당 타겟에 대해 무결성 검사를 수행하지 않습니다.
동기화된 테이블의 특성
동기화된 소스 테이블과 타겟 테이블의 기본 특성은 다음과 같습니다(변환 기능을 사용하지 않는 경우).
- 소스 데이터베이스에 행이 있으면 타겟에도 존재합니다.
- 소스 테이블과 타겟 테이블의 해당 컬럼은 구조와 데이터 유형이 동일합니다.
- 해당 행의 데이터 값은 키 값을 포함하여 동일합니다.
데이터 무결성을 보장하는 것은 Post 프로세스의 책임입니다. Post는 WHERE 절을 적용하여 처리하는 SQL 작업의 키 값과 이전 값을 비교합니다. Post는 다음과 같은 논리를 사용하여 소스 테이블과 타겟 테이블 간의 동기화를 검증합니다.
-
Post가 복제된 INSERT를 적용했지만 동일한 키를 가진 행이 이미 타겟에 존재합니다. Post는 다음 논리를 적용합니다.
- 타겟 행의 현재 값이 모두 INSERT 값과 동일한 경우 Post는 행이 동기화된 것으로 간주하고 작업을 삭제합니다.
- 값 중 하나라도 INSERT의 값과 다른 경우 Post는 이를 동기화 중단 상태로 간주합니다.
참고: INSERT를 게시할 때 키가 아닌 값을 고려하지 않도록 Post를 구성할 수 있습니다(Oracle에서 Oracle로 데이터를 복제하는 경우에만 해당). SharePlex 참조 안내서의 SP_OPO_SUPPRESSED_OOS 매개변수를 참조하십시오.
-
Post는 복제된 UPDATE를 적용하지만 타겟에서 UPDATE의 키 값과 동일한 키 값을 가진 행을 찾을 수 없거나, Post가 올바른 행을 찾았지만 행 값이 UPDATE의 이전 값과 일치하지 않습니다. Post는 다음 논리를 적용합니다.
- 타겟 행의 현재 값이 UPDATE 이후 값과 일치하는 경우 Post는 행이 동기화된 것으로 간주하고 작업을 삭제합니다.
- 타겟 행의 값이 UPDATE 이전 또는 이후 값과 일치하지 않는 경우 Post는 이를 동기화 중단 상태로 간주합니다.
참고: 타겟 행의 현재 값이 UPDATE 이후 값과 일치하는 경우 동기화 중단 메시지를 반환하도록 Post를 구성할 수 있습니다(Oracle에서 Oracle로 데이터를 복제하는 경우에만 해당). SharePlex 참조 안내서의 SP_OPO_SUPPRESSED_OOS 매개변수를 참조하십시오.
- 소스 데이터에 대해 DELETE가 수행되었지만 Post가 키를 사용하여 타겟 행을 찾을 수 없습니다. Post가 DELETE 문을 구성할 때 WHERE 절에 키 값만 포함됩니다. 행이 타겟에 없으면 Post는 작업을 삭제합니다.
숨겨진 동기화 중단 상태
Post는 현재 SQL 작업에 의해 변경되는 행의 무결성만 확인합니다. 해당 테이블이나 다른 테이블의 다른 행이 타겟 데이터베이스에서 동기화가 중단되었는지 여부는 확인하지 않습니다. 숨겨진 동기화 중단 상태는 영향을 받은 행에 대한 변경 사항이 결국 SharePlex에 의해 복제되거나 해당 데이터를 사용하는 과정에서 불일치가 감지되는 경우 훨씬 나중에까지 표시되지 않을 수 있습니다.
감지 가능한 동기화 중단 상태의 예
누군가가 타겟에 로그인하여 타겟 테이블의 COLOR 컬럼을 Row1의 “blue”에서 “red”로 업데이트합니다. 그런 다음, 소스 시스템의 애플리케이션 사용자가 소스 테이블에 동일한 변경을 수행하고 SharePlex가 이를 타겟에 복제합니다. Post에서 사용하는 WHERE 절에서 타겟 테이블의 사전 이미지는 "blue"이지만 타겟 행의 현재 값은 "red"입니다. Post는 동기화 중단 상태를 경고하는 동기화 중단 오류를 표시합니다.
숨겨진 동기화 중단 상태의 예
누군가가 타겟에 로그인하여 타겟 테이블의 COLOR 컬럼을 Row2의 “blue”에서 “red”로 업데이트하지만 소스 테이블에는 변경 사항이 적용되지 않고 복제되지 않습니다. 두 테이블은 현재 동기화 중단 상태이지만 해당 행에서 복제가 수행되지 않았기 때문에 Post는 오류 메시지를 반환하지 않습니다. 행의 다른 컬럼(SIZE, WEIGHT)에 대한 후속 업데이트 횟수에 관계없이 누군가가 소스 테이블의 COLOR 컬럼을 업데이트할 때까지 COLOR 컬럼에 대한 숨겨진 동기화 중단 상태가 지속됩니다(그리고 타겟의 사용자는 부정확한 정보를 가집니다). 해당 변경 사항이 복제되면 Post는 사전 이미지를 비교하고 오류 메시지를 반환합니다.
대부분의 경우 동기화 중단 데이터의 원인은 복제로 인한 잘못된 작업이 아니라 타겟에 적용된 DML, 불완전한 백업 복원 또는 기타 숨겨진 동기화 중단 상태이며, 이는 복제가 행에 영향을 미칠 때까지 감지되지 않습니다. 동기화 중단 상태를 해결하는 작업은 시간이 많이 걸리고 사용자 활동에 지장을 줄 수 있습니다. 복제가 시작되면 다음을 수행하는 것이 권장됩니다.
- DML 및 DDL이 적용될 수 없도록 타겟 테이블에 대한 쓰기 접근을 방지합니다.
- compare 명령을 사용해 소스 및 타겟 데이터를 정기적으로 비교하여 동기화를 확인하고 숨겨진 동기화 중단 상태를 감지합니다. repair 명령을 사용하여 동기화 중단 행을 복원합니다. 이러한 명령에 대한 자세한 내용은 SharePlex 참조 안내서를 참조하십시오.
SharePlex가 동기화 중단 상태에 응답하는 방식
동기화 중단 오류를 생성하는 트랜잭션에 SharePlex가 응답하는 방식을 결정할 수 있습니다.
-
트랜잭션에 동기화 중단 작업이 포함된 경우 기본 게시 동작은 트랜잭션의 다른 유효한 작업을 계속 처리하여 지연 시간을 최소화하고 타겟을 가능한 한 최신 상태로 유지하는 것입니다. 지연 시간은 소스 트랜잭션이 발생하는 시점과 타겟에 적용되는 시점 사이의 시간입니다. 비정상적으로 높은 트랜잭션 볼륨이나 네트워크 트래픽 중단 등 다양한 요인이 복제 지연 시간에 영향을 미칩니다.
Post는 동기화 중단 작업에 대한 SQL 문과 데이터를 ID_errlog.sql 로그 파일에 기록합니다. 여기서, ID는 데이터베이스 식별자입니다. 이 파일은 타겟 시스템에 있는 variable-data 디렉토리의 log 하위 디렉토리에 있습니다.
-
다음 매개변수를 1로 설정하여 동기화 중단 상태가 발생하면 Post가 중지되도록 구성할 수 있습니다.
- Oracle 타겟: SP_OPO_OUT_OF_SYNC_SUSPEND
- Open Target 타겟: SP_OPX_OUT_OF_SYNC_SUSPEND
-
해당 트랜잭션의 작업으로 인해 동기화 중단 오류가 발생하는 경우 트랜잭션을 롤백하고 삭제하도록 Post를 구성할 수 있습니다. 전체 트랜잭션은 SQL 파일에 기록되지만 타겟에는 적용되지 않습니다. SQL 파일을 편집하여 유효하지 않은 DML을 수정한 후 SQL 파일을 실행하여 트랜잭션을 적용할 수 있습니다. 이 기능은 SP_OPO_SAVE_OOS_TRANSACTION을 1로 설정하여 활성화됩니다.