기타 복제 문제 해결
이 섹션에서는 기타 복제 문제에 대한 해결 방법을 살펴봅니다.
현재 발생한 문제가 이 문서에 나오지 않은 경우 SharePlex 기술 문서를 https://support.quest.com에서 검색하십시오.
기술 문서에서는 SharePlex 사용 및 문제 해결에 도움이 될 수 있는 필터링 옵션과 기타 리소스에 대한 링크를 제공합니다.
일반적인 연결 오류
다음은 sp_ctrl을 시작하거나 sp_ctrl에서 host, port 또는 [on host] 명령을 사용하여 연결을 구성할 때 발생하는 일반적인 오류에 대한 해결 방법입니다.
연결 오류 메시지 설명
Host unknown: cannot form connection |
host 명령이나 [on host] 옵션이 실행될 때 발생합니다. |
연결할 시스템이 실행 중이고 올바른 시스템 이름을 사용하고 있는지 확인합니다. |
Network unreachable |
네트워크가 중단되었습니다. |
네트워크 관리자가 예상하는 지속 시간을 찾아봅니다. 다운타임으로 인해 SharePlex 큐가 디스크 공간을 초과할 수 있는 경우 데이터를 재동기화하지 않도록 조치를 취하십시오. 자세한 내용은 디스크 공간 부족을 해결하는 방법를 참조하십시오. |
Export cannot connect to import on hostname: timeout waiting for ack |
네트워크 구성으로 인해 연결 시간이 초과되었기 때문에 Export를 타겟에 연결할 수 없습니다. 이는 복제 활동이 거의 없고 네트워크에 시간 초과 설정이 있는 경우에 발생할 수 있습니다. |
SP_XPT_KEEPALIVE 매개변수를 1로 설정합니다. 이 설정은 Export 프로세스가 TCP 시간 초과를 방지하기 위해 정기적으로 Import에 "hello" 메시지를 보내도록 지시합니다. |
User is not authorized as a SharePlex user -- check /etc/group |
작업을 실행할 수 있는 사용자 권한이 없습니다. |
SharePlex 사용자는 SharePlex 사용자 그룹인 SharePlex Admin, spoper, spview 중 하나의 /etc/group 파일(Unix 및 Linux)에 나열되어야 합니다. |
unauthorized connection attempt from host hostname. net |
이름이 auth_hosts 파일에 나열되어 있지 않기 때문에 원격 시스템으로부터의 연결이 거부되었습니다. |
시스템 이름은 오류 메시지를 참조하십시오. 해당 시스템이 로컬 시스템의 sp_cop에 연결되도록 허용하려면 해당 이름을 auth_hosts 파일에 추가합니다. |
일반적인 명령 오류
Deactivate/flush a nonactive datasource |
활성화되지 않은 구성을 플러시하려고 합니다. |
필요하지 않습니다. |
Bad routing specification |
라우팅 맵의 구문이 올바르지 않습니다. |
자세한 내용은 구성 파일의 라우팅 사양를 참조하십시오. |
Status db file is corrupt. |
상태 데이터베이스가 손상되었습니다. |
SharePlex를 종료하고 SharePlex variable-data 디렉토리의 data 하위 디렉토리에 있는 statusdb 파일을 제거합니다. SharePlex는 sp_cop을 다시 시작하면 다른 하나를 생성합니다. |
Parameter does not exist in database. |
매개변수를 설정하려고 했으나 잘못된 이름을 입력했거나 매개변수가 SharePlex 버전에서 더 이상 사용되지 않습니다. |
list param 명령을 사용하여 해당 버전의 SharePlex 매개변수를 보고 철자를 확인합니다. |
Parameter type checking failed - look in param - defaults file. |
매개변수에 잘못된 데이터 유형을 입력했을 수 있습니다. |
유효한 데이터 유형을 확인하려면 list param 명령을 사용합니다. |
Unknown service specified.
or...
No such module.
or...
Service may be only one of: post, read, import, export, capture, all. |
유효한 서비스(프로세스) 이름은 Capture, Read, Export, Import, Post입니다. |
올바른 이름으로 명령을 다시 실행합니다. |
Command was called with an invalid argument.
or…
Unknown keyword used in command. |
명령에 유효하지 않은 입력이 포함되어 있습니다. |
명령에 대한 유효한 입력을 보려면 help 명령을 실행합니다. |
Permission denied for command - check your authorization level. |
이 명령을 실행할 수 있는 사용자 그룹의 구성원이 아닙니다. |
인증 수준을 보려면 authlevel 명령을 실행합니다. |
Default host is not defined: use the ‘host’ command or [on host] option. |
SharePlex는 명령이 영향을 미치기를 원하는 시스템을 결정할 수 없습니다. |
host 명령을 사용하여 기본 호스트를 설정하거나 실행할 명령과 함께 [on host]를 사용합니다(사용 가능한 경우). |
소스 및 타겟 테이블을 재동기화하는 방법
다음 지침은 동기화 중단 테이블을 재동기화하는 방법을 확인하는 데 도움이 됩니다.
동기화 중단 테이블을 수동으로 패치
유효 항목: 모든 데이터베이스 유형
동기화 오류 수가 적은 경우 동기화 중단 테이블을 수동으로 복원해 볼 수 있습니다. Post 프로세스가 동기화 중단 상태를 감지하면 오류를 무시하고 Post 큐의 다음 작업을 계속 적용합니다. 그러나 Post는 동기화 중단 오류를 초래하는 소스 SQL 문을 오류 파일인 ID_errlog.sql에 기록합니다. (ID는 SharePlex가 ORACLE_SID 또는 데이터베이스 이름과 같은 타겟 인스턴스에 사용하는 식별자입니다.) 데이터베이스의 기본 SQL 인터페이스를 통해 해당 SQL 문을 타겟 테이블에 적용할 수 있습니다. 이 프로시저는 Post에 의한 비교를 우회하기 때문에 타겟 테이블의 구조가 변경되지 않았다고 가정하여 작업이 성공해야 합니다.
SharePlex는 타겟 시스템의 variable-data 디렉토리의 data 하위 디렉토리에서 ID_errlog.sql을 저장합니다. 파일의 항목은 다음 예와 비슷합니다.
-- Host (irvlabua) Sid (al920u64)
-- session 2, 1 error --
--
-- [1] Tue Dec 11 13:31:32 2007
-- redolog seq#/offset 26622/26980368
-- redolog timestamp 641050290 (12/11/15 13:31:30)
-- original rowid AAE0m8AAWAAAAFEAAA
-- -- NOT FOUND
delete from “SP_5”.”QA_LOB_DISABLE_INROW” t where rownum = 1 and “KEY”='01';
SQL을 수동으로 적용하려면 다음을 수행합니다.
- 영향을 받은 소스 테이블에 대한 사용자 접근을 중지합니다.
- 타겟 시스템에서 ID_errlog.sql 파일을 엽니다.
- SQL 문을 타겟 테이블에 적용합니다.
-
구성을 변경해야 하는 경우 구성을 다시 활성화합니다.
sp_ctrl> activate config filename
- 소스 테이블에 대한 사용자 접근을 허용합니다.
소스 테이블을 복사하여 재동기화
유효 항목: 모든 데이터베이스 유형
이 프로시저는 소스 테이블의 복사본을 적용하여 동기화 중단 타겟 테이블에 대한 동기화를 복원합니다. 동기화 중단 상태인 테이블만 재동기화하면 사용자가 다른 모든 테이블에 계속 접근할 수 있습니다.
중요! 시작하기 전에 이 프로시저를 살펴보고 사용되는 명령에 대한 자세한 내용은 SharePlex 참조 안내서를 참조하십시오.
- 소스 및 타겟 시스템에서 sp_cop이 실행 중인지 확인합니다.
- 타겟 시스템에서 sp_ctrl을 실행합니다.
-
[필요한 경우] 타겟 시스템에서 show sync 명령을 실행하여 동기화 중단 상태인 테이블을 식별합니다.
sp_ctrl> show sync
- 소스 시스템에서 동기화 중단 테이블에 대한 활동을 중지합니다.
- 소스 시스템에서 sp_ctrl을 실행합니다.
-
소스 시스템에서 flush 명령을 실행합니다.
참고: 이 명령에는 명명된 큐 또는 여러 타겟과 함께 사용할 수 있는 추가 옵션이 있습니다. 이 명령에 대한 자세한 내용은 SharePlex 참조 안내서를 참조하십시오.
sp_ctrl> flush datasource
- 소스 시스템에서 테이블을 복사합니다.
-
구성을 변경해야 하는 경우 소스 시스템에서 구성을 다시 활성화합니다.
sp_ctrl> activate config filename
- 소스 시스템에서 사용자가 소스 테이블로 돌아가는 것을 허용합니다.
-
타겟 시스템에서 Post가 중지되었음을 표시할 때까지 status 명령을 실행합니다.
sp_ctrl> status
-
타겟 시스템에서 테이블을 복원합니다.
- 타겟 시스템에서 복제 전략의 요구 사항에 따라 트리거, 참조 무결성 제약 조건 및 체크 제약 조건을 비활성화하거나 수정합니다.
-
타겟 시스템에서 상태 데이터베이스를 확인하여 각 메시지의 상태 ID를 확인합니다.
sp_ctrl> show statusdb detail
-
타겟 시스템에서 다음 명령을 사용하여 각 메시지를 지웁니다.
sp_ctrl> clear status statusID
-
타겟 시스템에서 Post 프로세스를 시작합니다.
sp_ctrl> start post
Oracle 전송 가능 테이블스페이스와 재동기화
유효 항목: Oracle 데이터베이스
전송 가능 테이블스페이스 기능을 사용하면 수많은 동기화 중단 테이블을 최소한의 다운타임으로 신속하게 재동기화할 수 있습니다. 전송 가능 테이블스페이스 기능을 사용하려면 테이블스페이스 세트 생성, 테이블스페이스 세트를 타겟 데이터베이스로 이동 및 데이터베이스에 세트 연결에 대한 Oracle 문서의 지침을 따르십시오. 다음 지침에는 이 기능을 사용하여 데이터를 재동기화하는 단계만 포함되어 있습니다. 이 지침은 전송 가능 테이블스페이스 기능을 사용하는 것에 익숙하다고 가정합니다.
중요! 시작하기 전에 이 프로시저를 살펴보고 사용되는 명령에 대한 자세한 내용은 SharePlex 참조 안내서를 참조하십시오.
-
소스 시스템에서 소스 테이블스페이스를 READ ONLY로 설정합니다.
SQL> ALTER TABLESPACE name READ ONLY;
- 소스 시스템에서 sp_ctrl을 실행합니다.
-
소스 시스템에서 sp_ctrl의 flush 명령을 실행합니다.
참고: 이 명령에는 명명된 큐 또는 여러 타겟과 함께 사용할 수 있는 추가 옵션이 있습니다. 자세한 내용은 SharePlex 참조 안내서를 참조하십시오.
sp_ctrl> flush datasource
- Oracle 문서에 따라 메타데이터를 Export 파일로 내보냅니다.
- Export가 완료되면 데이터 파일을 소스 시스템의 보조 위치에 복사합니다. 이렇게 하면 파일을 타겟 시스템에 복사할 때 소스 데이터베이스에 미치는 영향이 최소화됩니다.
-
소스 시스템에서 소스 테이블스페이스를 READ WRITE 모드로 설정합니다.
SQL> ALTER TABLESPACE name READ WRITE;
- 타겟 시스템에서 복사된 파일이 적용되도록 타겟 데이터베이스의 기존 데이터파일과 테이블스페이스를 삭제합니다.
- 소스 시스템의 보조 위치에서 파일을 타겟 시스템으로 복사합니다.
- 타겟 시스템에서 Oracle 가져오기 유틸리티를 사용하여 메타데이터 및 테이블스페이스 정의를 가져옵니다.
-
타겟 시스템에서 테이블스페이스를 READ WRITE 모드로 설정합니다.
SQL> ALTER TABLESPACE name READ WRITE;
참고: SharePlex는 피어-투-피어 복제를 사용하지 않는 한 타겟 테이블에 대한 쓰기 접근 권한이 허용된 유일한 사용자여야 합니다.
-
구성을 변경해야 하는 경우 소스 시스템에서 구성을 다시 활성화합니다.
sp_ctrl> activate config filename
- 타겟 시스템에서 sp_ctrl을 실행합니다.
-
타겟 시스템에서 Post 프로세스를 시작합니다.
sp_ctrl> start post
활성 데이터베이스의 Oracle 핫 백업과 재동기화
유효 항목: Oracle 데이터베이스
Oracle 핫 백업과 reconcile 명령을 사용하여 타겟 인스턴스를 재동기화하면 사용자는 백업이 생성되고 적용되는 동안 계속해서 프로덕션 데이터에 접근할 수 있습니다.
중요:
- 데이터 웨어하우스와 같은 중앙 집중식 보고를 재동기화하기 위해 모든 소스 시스템의 핫 백업을 사용할 수는 없습니다. 하나의 백업은 이전 백업의 데이터를 재정의합니다. 소스 인스턴스 중 하나의 핫 백업을 사용하여 타겟 인스턴스를 설정한 다음, 익스포트/임포트 또는 전송 가능 테이블스페이스와 같은 다른 방법을 사용하여 다른 인스턴스에서 테이블을 복사할 수 있습니다.
- 피어-투-피어 복제를 재동기화하려면 이 프로시저가 진행되는 동안 모든 보조 소스 시스템을 Quiet 설정해야 합니다. 모든 사용자를 기본 시스템으로 이동한 후 프로시저를 따릅니다. 모든 보조 시스템에서 프로시저를 수행하면 사용자가 해당 시스템에서 활동을 재개할 수 있습니다.
- 시작하기 전에 이 프로시저를 살펴보고 사용되는 명령에 대한 자세한 내용은 SharePlex 참조 안내서를 참조하십시오.
|
핫 백업과 재동기화하려면 다음을 수행합니다.
- 소스 및 타겟 시스템에서 sp_ctrl을 실행합니다.
-
타겟 시스템에서 Post 프로세스를 중지합니다. 이를 통해 타겟 인스턴스가 복구되고 조정될 때까지 복제된 데이터가 Post 큐에 누적될 수 있습니다.
sp_ctrl> stop post
- 소스 시스템에서 Oracle 핫 백업을 실행합니다.
-
소스 및 타겟 시스템에서 sp_cop, sp_ctrl 및 모든 SharePlex 프로세스(Capture, Read, Export, Import, Post)가 실행 중인지 확인합니다.
sp_ctrl> status
-
소스 시스템의 로그 파일을 전환합니다.
-
핫 백업에서 타겟 데이터베이스를 복구합니다.
- 시퀀스 번호로 복구하는 경우 RECOVER 절의 UNTIL CANCEL 옵션을 사용하여 핫 백업에서 데이터베이스를 복구하고, Oracle이 이전 단계의 로그를 완전히 적용하면 복구를 취소합니다.
- SCN으로 복구하는 경우 RECOVER 절의 UNTIL CHANGE SCN 옵션을 사용하여 핫 백업에서 데이터베이스를 복구하고, Oracle이 이전 단계의 SCN과 일치하는 로그를 적용하면 복구를 취소합니다.
-
RESETLOGS 옵션을 사용하여 데이터베이스를 엽니다.
-
타겟 시스템에서 reconcile 명령을 실행합니다. 명명된 Post 큐를 사용하는 경우 각 큐에 대해 명령을 실행합니다. 큐 이름이 확실하지 않은 경우 qstatus 명령을 실행합니다.
-
시퀀스 번호로 복구하는 경우 5단계에서 기록한 로그의 시퀀스 번호를 대체합니다.
sp_ctrl> reconcile queue queuename for datasource-datadest seq sequence_number
예: reconcile queue SysA for o.oraA-o.oraA seq 1234
-
SCN으로 복구하는 경우 5단계에서 기록한 SCN을 대체합니다.
sp_ctrl> reconcile queue queuename for datasource-datadest scn scn_number
예: reconcile queue SysA for o.oraA-o.oraA scn 0123456789
조정 프로세스는 완료될 때까지 sp_ctrl에 대한 제어권을 유지한 다음, sp_ctrl 프롬프트를 반환합니다.
-
타겟 시스템에서 SharePlex Oracle 사용자로 SQL*Plus에 로그인하고 SharePlex product 디렉토리의 bin 하위 디렉토리에 있는 cleanup.sql 유틸리티를 실행합니다. 이 스크립트는 SharePlex 사용자가 소유한 SharePlex 테이블을 자르고 업데이트합니다. 여러 variable-data 디렉토리가 있는 sp_cop의 여러 인스턴스를 실행하는 경우 각 인스턴스마다 SharePlex Oracle 사용자가 있습니다. 복원할 테이블을 소유한 SharePlex 사용자로 이 스크립트를 실행해야 합니다. 스크립트는 SharePlex 사용자 이름과 비밀번호를 묻는 메시지를 표시합니다.
SQL> @/productdir/bin/cleanup.sql
-
타겟 시스템에서 복제 전략에 따라 다음을 비활성화하거나 수정합니다.
- 트리거
- 외래 키 제약 조건
- 단계화 삭제 제약 조건(또는 이를 무시하도록 SharePlex 구성)
- 체크 제약 조건
- DML을 수행하는 scheduled job
-
구성을 변경해야 하는 경우 소스 시스템에서 구성을 다시 활성화합니다.
sp_ctrl> activate config filename
-
타겟 시스템에서 Post 프로세스를 시작합니다. 이제 두 인스턴스가 동기화되었으며 SharePlex는 계속 복제됩니다.
sp_ctrl> start post
Oracle 아카이브 로그를 복원하는 방법
캡처 및 복제를 재개하기 위해 SharePlex를 활성화하여 아카이브 로그를 복원하기로 결정한 경우 다음 프로시저를 사용하여 필요한 아카이브 로그를 결정합니다.
필요한 아카이브 로그를 결정하려면 다음 단계를 수행합니다.
-
Capture가 처리를 재개해야 하는 시퀀스 번호를 결정합니다. 로그 래핑이 발생하면 Capture가 중지되고 필요한 리두 로그 시퀀스 번호가 포함된 이벤트 로그(event_log)에 메시지가 기록됩니다. 또한 다음 예와 같이 SHAREPLEX_ACTID 테이블을 쿼리하고 SEQNO 컬럼을 확인하여 이 숫자를 찾을 수도 있습니다.
SQL> select * from splex.shareplex_actid;
ACTID |
SEQNO |
OFFSET |
AB_FLAG |
QUE_SEQ_NO_1 |
QUE_SEQ_NO_2 |
COMMAND |
----- |
------ |
-------- |
-------- |
------------- |
-------------- |
------------ |
14 |
114 |
9757200 |
0 |
672101000 |
0 |
|
-
Oracle V$LOG_HISTORY 테이블을 쿼리하여 해당 시퀀스 번호가 아카이브된 시기를 확인한 다음, 해당 지점의 로그를 소스 시스템으로 복사합니다.
SQL> select * from V$LOG_HISTORY;
RECID |
STAMP |
THREAD# |
SEQUENCE# |
FIRST_CHANGE# |
FIRST_TIM NEXT_CHANGE# |
----- |
------ |
-------- |
-------- |
------------- |
-------------- |
111 |
402941650 |
1 |
111 |
2729501 |
14-JUL-00 2729548 |
112 |
402941737 |
1 |
112 |
2729548 |
14-JUL-00 2729633 |
113 |
402941930 |
1 |
113 |
2729633 |
14-JUL-00 2781791 |
114 |
402942019 |
1 |
114 |
2781791 |
14-JUL-00 2836155 |
115 |
402942106 |
1 |
115 |
2836155 |
14-JUL-00 2890539 |
데이터베이스 손상이나 기타 시스템 문제로 인해 SharePlex를 종료해야 하는 경우 SharePlex가 사용 중이던 세마포어와 공유 메모리를 해제했는지 확인합니다.
세마포어를 확인하고 해제하려면 다음을 수행합니다.
-
종료되지 않은 SharePlex 프로세스를 찾아 종료합니다.
$ ps -ef | grep sp_
$ kill -9 PID
-
디렉토리를 SharePlex variable-data 디렉토리의 rim 하위 디렉토리로 변경한 다음, shmaddr.loc 및 shstinfo.ipc 파일에 대해 od -x 명령을 실행합니다.
# od -x shmaddr.loc
0000000 0000 00e1 ed40 0000 4400 9328 0080 0000
0000020 0002 0021
0000024
# od -x shstinfo.ipc
0000000 0000 00e0 ee90 0000 4100 9328 0010 0000
0000020 0002 0020
0000024
-
다음 값을 기록해 둡니다.
- 위의 각 파일의 첫 번째 32비트 단어는 공유 메모리 세그먼트의 ID에 해당하는 16진수를 나타냅니다. 이 값을 10진수로 변환합니다. 예를 들어, 2단계에 표시된 shmaddr.loc 파일에서 첫 번째 단어는 0000 00e1이며 이는 10진수 값 225에 해당합니다. shstinfo.ipc 파일에서 첫 번째 단어는 0000 00e0이며 이는 10진수 값 224에 해당합니다.
- shmaddr.loc 및 shstinfo.ipc 파일의 세 번째 단어는 공유 메모리 세그먼트 및 세마포어의 KEY에 해당하는 16진수를 나타냅니다. (각 세트에는 동일한 키 값이 있습니다.) 이 값을 10진수로 변환하지 마십시오. 예를 들어 shmaddr.loc 파일에서 세 번째 단어는 4400 9328입니다. shstinfo.ipc 파일에서 세 번째 단어는 4100 9328입니다.
- 각 파일의 다섯 번째 단어는 SEMAPHORE ID입니다. 이 값을 10진수로 변환합니다. 예의 세마포어 ID는 16진수 0002 0021 및 0020 0020이며, 10진수는 각각 131105 및 131104입니다.
-
모든 공유 메모리 세그먼트와 세마포어를 보려면 ipcs -smaa 명령을 실행합니다. (공유 메모리 세그먼트가 먼저 나열되며 "m"으로 표시됩니다. 세마포어는 "s"로 표시됩니다.) 표시는 다음과 비슷하지만 더 광범위합니다.
-
shmaddr.loc 및 shstinfo.ipc의 공유 메모리 ID가 목록에 있고 키가 일치하는지 확인합니다.
-
각 공유 메모리 세그먼트에 대해 NATTCH 컬럼의 값이 0인지 확인합니다. 이렇게 하면 종료한 SharePlex 프로세스가 메모리 세그먼트를 해제했는지 확인할 수 있습니다.
-
세마포어의 경우 세마포어 ID와 키가 파일 값과 일치하는지 확인합니다.
-
루트로 ID 값(예에서는 224 및 225)에 대해 ipcrm -m 명령을 실행하여 메모리 세그먼트를 제거합니다.
# ipcrm -m 224
# ipcrm -m 225
-
루트로 키 값(예에서는 131104 및 131105)에 대해 ipcrm -m 명령을 실행하여 세마포어를 제거합니다.
# ipcrm -s 131104
# ipcrm -s 131105