참고: 계속하려면 먼저 SharePlex 데모 객체가 설치되어 있는지 확인하십시오. 데모를 위한 사전 작업 를 참조하십시오.
이 데모에서는 SharePlex를 구성하여 일반적인 충돌 해결 프로시저를 사용해 복제 충돌을 해결합니다. 일반적인 충돌 해결을 사용하면 하나의 PL/SQL 프로시저를 사용하여 여러 테이블의 충돌을 해결할 수 있습니다.
다음과 같은 충돌 해결 전략이 시연됩니다.
중요! 피어-투-피어 복제가 모든 비즈니스 애플리케이션과 호환되지는 않습니다. 사용 환경에 적합한 경우 일반적으로 이 데모의 프로시저보다 더 복잡한 사용자 지정 충돌 해결 프로시저 생성을 비롯하여 신중한 분석 및 실행이 필요합니다. 이 데모를 프로덕션 피어-투-피어 배포의 기초로 사용하지 마십시오. 피어-투-피어 복제에 대한 자세한 내용은 SharePlex 관리 안내서를 참조하십시오.
참고: 이 데모에서는 데모 객체가 demo라는 스키마에 있다고 가정합니다. 이와 다른 경우 실제 스키마로 대체합니다.
두 시스템 모두에서(두 데이터베이스 모두에 대해) 다음 단계를 수행합니다.
SharePlex를 종료합니다.
sp_ctrl(peer1)> shutdown
데모 객체를 소유한 사용자에게 sp_cr 패키지를 실행할 수 있는 시스템 권한을 부여합니다. 이 패키지는 SharePlex가 처음 설치되었을 때 SharePlex 스키마에 설치되었습니다.
SQL>grant execute on sp_cr to user_name
SharePlex product 디렉토리의 util 하위 디렉토리에서 p2p.sql 스크립트를 실행합니다. 그러면 od_employee_gen 데모 충돌 해결 루틴이 설치됩니다.
다음 사항을 안내하는 메시지가 표시됩니다.
SharePlex를 구성하려면 다음 단계를 수행합니다.
각 시스템에서 텍스트 편집기의 conflict_solution.SID 파일(여기서, SID는 로컬 데이터베이스의 ORACLE_SID)을 엽니다. 이 파일은 SharePlex variable-data 디렉토리의 data 하위 디렉토리에 있습니다.
참고: Post는 복제 충돌이 있을 때 이 파일을 확인하여 호출할 해결 프로시저가 있는지 확인합니다.
다음 항목을 각 시스템의 conflict_resolution.SID 파일에 생성합니다. 몇 개 이상의 공백이나 한 개의 탭 문자로 각 컬럼을 구분합니다.
demo.od_employee | IUD | demo.od_employee_gen |
참고: 첫 번째 구성 요소는 테이블이고, 두 번째 구성 요소는 해당 테이블에 충돌이 있는 경우 해결 루틴이 호출될 작업 유형을 지정하며, 세 번째 구성 요소는 사용될 해결 루틴의 이름입니다.
peer1(신뢰할 수 있는 소스)에서 od_employee 테이블을 peer2의 od_employee 테이블에 복제하는 od_peer1이라는 구성 파일을 생성합니다.
sp_ctrl(peer1)> create config od_peer1
demo.od_employee | demo.od_employee | peer2@o.SID |
peer2(보조 소스)에서 od_employee 테이블을 peer2의 od_employee 테이블에 복제하는 od_peer1이라는 구성 파일을 생성합니다.
sp_ctrl(peer2)> create config od_peer2
demo.od_employee | demo.od_employee | peer1@o.SID |
참고: Post가 동기화 중단 상태인 삽입(모든 컬럼이 동일함)을 감지하려면 SP_OPO_SUPPRESSED_OOS를 0으로 설정합니다. sp_ctrl에서 이 명령 실행: SP_OPO_SUPPRESSED_OOS 매개변수를 0으로 설정하고 list param modified 명령을 사용하여 매개변수가 설정되었는지 확인합니다.
복제를 활성화 및 시작하려면 다음 단계를 수행합니다.
peer1에서 od_peer1 구성을 활성화합니다.
peer2에서 od_peer2 구성을 활성화합니다.
각 시스템에서 구성이 성공적으로 활성화되었는지 확인합니다. od_peer1 또는 od_peer2라는 이름(시스템에 따라 다름)이 File Name 아래에 나타나고 Active라는 단어가 State 아래에 나타나야 합니다.
sp_ctrl (source)>list config
이 데모에서는 peer1에서 시작된 INSERT가 peer2에서 복제된 충돌하는 INSERT를 재정의합니다.
Peer2에서 od_employee에 행을 삽입하되 COMMIT을 실행하지 마십시오.
SQL(peer2) > INSERT INTO OD_EMPLOYEE VALUES (1,'John','Doe',to_date('04/01/1949','MM/DD/RRRR'),1,to_date('01/01/2017','MM/DD/RRRR'));
Peer1에서 동일한 행(동일한 값)을 삽입하되 COMMIT을 실행하지 마십시오.
SQL(peer1) > INSERT INTO OD_EMPLOYEE VALUES (1,'John','Doe',to_date('04/01/1949','MM/DD/RRRR'),1,to_date('01/01/2017','MM/DD/RRRR'));
이 데모에서는 충돌이 있는 경우 마지막으로 업데이트된 행이 우선합니다.
참고: 타임스탬프 우선순위가 작동하려면 EMP_TIMESTAMP 필드를 다른 컬럼과 함께 null이 아닌 값으로 수정해야 합니다. UPDATE 문의 타임스탬프 컬럼이 업데이트되지 않거나 null 값으로 수정되는 경우 저장된 프로시저가 충돌을 해결할 수 없습니다. 그러면 동기화 중단 문제가 나타납니다.
peer1에서 od_employee 테이블의 EMP_FIRST_NAME 및 EMP_TIMESTAMP 컬럼을 다음과 같이 UPDATE를 수행합니다.
SQL(peer1) > UPDATE OD_EMPLOYEE SET EMP_FIRST_NAME = 'James', EMP_TIMESTAMP = to_date('01/01/2017','MM/DD/RRRR') WHERE EMP_NO = 1;
Peer2에서 다른 업데이트 값과 동일한 키 값을 사용하여 동일한 컬럼에 UPDATE를 수행합니다.
SQL(peer2) > UPDATE OD_EMPLOYEE SET EMP_FIRST_NAME = 'Harry', EMP_TIMESTAMP = to_date('02/02/2017','MM/DD/RRRR') WHERE EMP_NO = 1;
두 시스템에서 동시에 COMMIT을 실행합니다.
두 시스템에서 Post 큐를 보고 업데이트 작업이 큐에 있는지 확인합니다. 각 큐에 메시지가 표시됩니다.
sp_ctrl(peer1)>qstatus
sp_ctrl(peer2)>qstatus
데모 객체를 설치할 때 지정한 스키마에 ex_table이라는 테이블이 설치되었습니다. SQL*Plus를 통해 이를 확인하여 각 충돌에 대한 정보를 볼 수 있습니다. 다음은 테이블 설명입니다.
컬럼 | 설명 |
---|---|
EXC_NO | 충돌의 예외 번호입니다. |
EXC_TYPE | INSERT, UPDATE 또는 DELETE 등 SQL 문의 유형입니다. |
EXC_TARGET_TABLE | 충돌이 발생한 테이블입니다. |
EXC_FIXED |
충돌 해결 루틴의 결과입니다. YES는 루틴이 성공했음을 의미합니다. NO는 루틴이 실패했으며 행을 올바른 값으로 수동으로 변경해야 함을 의미합니다. |
EXC_INFO | 충돌의 원인입니다. |
EXC_TIMESTAMP | 이 시스템에서 충돌이 발생한 시간입니다. |
이 데모에서는 SharePlex가 설치될 때 활성화되는 기본 DDL 복제 지원을 보여줍니다. 필요에 따라 매개변수를 사용하여 다른 DDL 복제를 활성화할 수 있습니다.
참고: 이 데모는 Oracle 소스 및 타겟만 지원합니다.
소스에서 SP_OCT_REPLICATE_DDL 매개변수가 기본값인 3으로 설정되어 있는지 확인합니다. 이 매개변수는 기본 DDL 복제를 제어합니다.
sp_ctrl(source)>list param modified capture
SP_OCT_REPLICATE_DDL 매개변수가 출력에 나열되면 안 됩니다. 나열된 경우 다음 명령을 실행합니다.
sp_ctrl(source)>reset param SP_OCT_REPLICATE_DDL
DDL 복제를 테스트하려면 다음 단계를 수행합니다.
소스에서 splex.demo_src에 대해 TRUNCATE를 수행하여 비어 있는지 확인합니다.
SQL> truncate table splex.demo_src;
SharePlex가 TRUNCATE 명령을 타겟에 복제합니다.
소스에서 splex.demo_src에 컬럼을 추가합니다.
SQL> alter table splex.demo_src add (department varchar2(30) not null default 'unknown');
타겟에서 splex.demo_dest 테이블을 설명합니다.
SQL> describe splex.demo_src;
이제 테이블에는 새로운 부서 컬럼을 포함하여 4개의 컬럼이 포함되어야 합니다.
소스에서 부서 컬럼을 삭제합니다.
SQL> alter table splex.demo_src drop column department;
타겟에서 splex.demo_dest 테이블을 설명합니다.
SQL> describe splex.demo_src;
이제 테이블에는 기존의 세 개 컬럼만 포함되어야 합니다.
데이터베이스 설정 유틸리티는 SharePlex 연결을 허용하고 복제를 지원하는 필수 데이터베이스 구성 요소를 설정하도록 소스 또는 타겟 데이터베이스를 자동으로 구성합니다.
타겟 HANA 시스템에서 HANA용 데이터베이스 설정 유틸리티(hana_setup)를 실행하여 SharePlex에서 사용할 사용자 계정, 스키마 및 테이블을 설정합니다.
지원되는 플랫폼의 HANA
HANA에 대해 지원되는 유일한 연결 방법은 connection string을 사용하는 것입니다. DSN을 통한 연결은 지원되지 않습니다.
데이터베이스에서 작동하고 SharePlex 데이터베이스 계정을 생성하는 데 필요한 권한을 SharePlex에 부여하려면 설정 유틸리티를 HANA 관리자로 실행해야 합니다.
SharePlex product 디렉토리의 bin 하위 디렉토리에서 hana_setup 프로그램을 실행합니다.
중요! 기본값인 2100이 아닌 포트에 SharePlex 인스턴스를 설치한 경우 -p 옵션을 사용하여 포트 번호를 지정합니다. 예를 들어 다음 명령에서 포트 번호는 9400입니다.
$ /users/splex/bin> hana_setup -p9400 |
표5: 설정 프롬프트 및 응답
프롬프트 | 응답 |
---|---|
Enter the HANA connection string [] : |
HANA 데이터베이스 시스템에 연결하는 connection string을 입력합니다. SharePlex가 HANA에 연결하기 위한 connection string의 필수 구성 요소는 다음과 같습니다.
예: SERVERNODE=server1.dept.abc.corp:30015;DRIVER=/usr/sap/hdbclient/libodbcHDB.so;CHAR_AS_UTF8=1 사용자, 비밀번호 및 기본 데이터베이스에 대한 프롬프트가 표시되므로 이를 제공할 필요가 없습니다. |
Enter the HANA Administrator name : |
HANA 관리자의 이름을 입력합니다. 이 사용자는 SharePlex 계정에서 작업을 수행합니다. |
Enter the password for the Administrator account : |
관리자의 비밀번호를 입력합니다. |
Enter the name of the database : |
SharePlex에서 사용할 테이블과 기타 객체를 포함할 데이터베이스의 이름을 입력합니다. 새 데이터베이스 또는 기존 데이터베이스의 이름을 입력할 수 있습니다. |
Database name database does not exist. Would you like to create it? [y] : |
이 프롬프트가 표시되면 지정된 데이터베이스가 존재하지 않는 것입니다. Enter 키를 눌러 설정 유틸리티가 자동으로 생성하도록 합니다. |
Would you like to create a new SharePlex user [y]: |
지정된 데이터베이스에 동일한 이름의 새 SharePlex 데이터베이스 사용자 계정 및 스키마를 생성하도록 기본값을 적용하려면 Enter 키를 누르고, 기존 SharePlex 계정을 사용하려면 n을 입력합니다. |
Enter the name of the new SharePlex user: Enter the name of the existing SharePlex user: |
새 사용자를 생성할지 아니면 기존 사용자를 사용할지 선택했는지에 따라 이러한 프롬프트 중 하나가 표시됩니다. SharePlex 사용자의 이름을 입력합니다.
|
Enter the password of the SharePlex user : |
SharePlex 사용자 계정의 비밀번호를 입력합니다. |
Re-enter the password for the SharePlex user : |
이 프롬프트는 새 사용자를 생성한 경우에만 표시됩니다. SharePlex 비밀번호를 다시 입력합니다. |
성공적으로 설정되면 다음과 유사한 메시지와 함께 종료됩니다.
Completed SharePlex for HANA database configuration
SharePlex User name: splex
Database name: ndb5
Target specification in SharePlex configuration: r.ndb5
HANA 타겟에 대한 SharePlex 복제를 시작하기 전에 해당 타겟의 SharePlex 데이터베이스 사용자에게 다음 권한을 부여합니다(여기서, SP_USER는 SharePlex 데이터베이스 사용자의 이름임).
또한 복제하려는 객체가 포함된 각 스키마의 소유자로 로그인한 후 스키마에 대해 다음 권한을 부여합니다.
© 2025 Quest Software Inc. ALL RIGHTS RESERVED. 이용 약관 개인정보 보호정책 Cookie Preference Center