다음 질문과 답변은 복제된 데이터베이스의 관리자가 직면한 다양한 작업에 대한 지침을 제공합니다.
복제 구성
활동을 게시할 때 데이터베이스에서 중지해야 합니까?
아니요. 게시를 만드는 동안 데이터베이스에서 작업을 계속할 수 있습니다. 스냅샷 생성은 리소스를 많이 소비할 수 있으므로 데이터베이스에서 활동이 낮은 기간 동안 스냅샷을 생성하는 것이 가장 좋습니다(기본적으로 새 게시 마법사를 완료할 때 스냅샷이 생성됨).
스냅샷 생성 중에 테이블이 잠겨 있나요?
잠금이 수행되는 시간은 사용된 복제 유형에 따라 달라집니다.
병합 게시의 경우 스냅샷 에이전트는 잠금을 수행하지 않습니다.
트랜잭션 게시의 경우 기본적으로 스냅샷 에이전트는 스냅샷 생성의 초기 단계에서만 잠금을 사용합니다.
스냅샷 게시의 경우, 스냅샷 에이전트는 전체 스냅샷 생성 프로세스 동안 잠금을 수행합니다.
잠금을 사용하면 다른 사용자가 테이블을 업데이트할 수 없으므로 특히 스냅샷 게시의 경우 데이터베이스에서 활동이 낮은 기간 동안 스냅샷 에이전트를 실행하도록 예약해야 합니다.
구독을 사용할 수 있는 경우 구독 데이터베이스는 언제 사용할 수 있나요?
구독 데이터베이스에 스냅샷이 적용된 후에 구독을 사용할 수 있습니다. 이전에 구독 데이터베이스에 액세스할 수 있더라도 스냅샷이 적용된 후에야 데이터베이스를 사용할 수 있습니다. 복제 모니터를 사용하여 스냅샷 생성 및 애플리케이션의 상태를 확인합니다.
스냅샷은 스냅샷 에이전트에 의해 생성됩니다. 복제 모니터에서 게시에 대한 스냅샷 생성 상태를 에이전트 탭에서 확인합니다. 자세한 내용은 복제 모니터를 사용하여 정보 보기 및 태스크 수행을 참조하세요.
스냅샷은 배포 에이전트 또는 병합 에이전트에 의해 적용됩니다. 복제 모니터의 배포 에이전트 또는 병합 에이전트 페이지에서 스냅샷 애플리케이션의 상태를 확인합니다.
배포 또는 병합 에이전트가 시작될 때 스냅샷 에이전트가 완료되지 않은 경우 어떻게 되나요?
배포 에이전트 또는 병합 에이전트가 스냅샷 에이전트와 동시에 실행되는 경우 오류가 발생하지 않습니다. 그러나 다음 사항에 유의해야 합니다.
배포 에이전트 또는 병합 에이전트가 지속적으로 실행되도록 구성된 경우 에이전트는 스냅샷 에이전트가 완료된 후 자동으로 스냅샷을 적용합니다.
배포 에이전트 또는 병합 에이전트가 일정 또는 주문형으로 실행되도록 구성되어 있고 에이전트가 실행될 때 사용할 수 있는 스냅샷이 없는 경우 에이전트는 스냅샷을 아직 사용할 수 없다는 메시지와 함께 종료됩니다. 스냅샷 에이전트가 완료된 후 스냅샷을 적용하려면 에이전트를 다시 실행해야 합니다. 에이전트 실행에 대한 자세한 내용은 밀어넣기 구독 동기화, 끌어오기 구독 동기화 및 복제 에이전트 실행 파일 개념을 참조하세요.
내 복제 구성을 스크립션해야 하나요?
예. 복제 구성 스크립팅은 복제 토폴로지 재해 복구 계획의 핵심 부분입니다. 스크립팅에 대한 자세한 내용은 복제 스크립팅을 참조하세요.
복제된 데이터베이스에 필요한 복구 모델은 무엇인가요?
복제는 단순, 대량 로그 또는 전체 복구 모델 중 어떤 것을 사용하더라도 제대로 작동합니다. 병합 복제는 메타데이터 테이블에 정보를 저장하여 변경 내용을 추적합니다. 트랜잭션 복제는 트랜잭션 로그를 표시하여 변경 내용을 추적하지만 이 표시 프로세스는 복구 모델의 영향을 받지 않습니다.
복제가 복제된 테이블에 열을 추가하는 이유는 무엇인가요? 테이블이 게시되지 않으면 그 열은 제거되나요?
변경 내용을 추적하려면 지연 업데이트 구독을 사용하여 복제 및 트랜잭션 복제를 병합하여 게시된 모든 테이블의 모든 행을 고유하게 식별할 수 있어야 합니다. 이를 위해 다음 작업이 수행됩니다.
병합 복제는 ROWGUIDCOL 속성이 설정된 데이터 형식 uniqueidentifier 열이 이미 없는 한 모든 테이블에 열 rowguid를 추가합니다(이 경우 이 열이 사용됨). 발행물에서 테이블을 삭제하면 rowguid 열이 제거됩니다. 기존 열이 추적에 사용되었으면 열이 제거되지 않습니다.
트랜잭션 게시가 지연 업데이트 구독을 지원하는 경우 복제는 모든 테이블에 열 msrepl_tran_version 추가합니다. 발행물에서 테이블을 삭제하면 msrepl_tran_version 열이 제거되지 않습니다.
필터에는 행을
rowguidcol식별하기 위해 복제에 사용되는 필터가 포함되어서는 안 됩니다. 기본적으로 이 열은 병합 복제를 설정할 때 추가된 열이며 rowguid로 명명됩니다.
게시된 테이블에 대한 제약 조건을 관리하려면 어떻게 해야 하나요?
게시된 테이블의 제약 조건과 관련하여 고려해야 할 여러 가지 문제가 있습니다.
트랜잭션 복제에는 게시된 각 테이블에 대한 기본 키 제약 조건이 필요합니다. 병합 복제에는 기본 키가 필요하지 않지만 기본 키가 있는 경우 복제해야 합니다. 스냅샷 복제에는 기본 키가 필요하지 않습니다.
기본적으로 기본 키 제약 조건, 인덱스 및 CHECK 제약 조건은 구독자에 복제됩니다.
FOREIGN KEY 제약 조건과 CHECK 제약 조건에 대해서는 NOT FOR REPLICATION 옵션이 기본적으로 지정됩니다. 이러한 제약 조건은 사용자 작업에는 적용되지만 에이전트 작업에는 적용되지 않습니다.
제약 조건이 복제되는지 여부를 제어하는 스키마 옵션을 설정하는 방법에 대한 자세한 내용은 스키마 옵션 지정을 참조하세요.
ID 열을 관리하려면 어떻게 해야 하나요?
복제는 구독자의 업데이트를 포함하는 복제 토폴로지의 자동 ID 범위 관리를 제공합니다. 자세한 내용은 ID 열 복제를 참조하세요.
동일한 개체를 다른 게시에 게시할 수 있나요?
예, 하지만 몇 가지 제한 사항. 자세한 내용은 데이터 및 데이터베이스 개체 게시 항목의 "둘 이상의 게시에 테이블 게시" 섹션을 참조하세요.
여러 게시에서 동일한 배포 데이터베이스를 사용할 수 있나요?
예. 동일한 배포 데이터베이스를 사용할 수 있는 게시의 수 또는 형식에는 제한이 없습니다. 지정된 게시자의 모든 게시는 동일한 배포자 및 배포 데이터베이스를 사용해야 합니다.
게시가 여러 개 있는 경우 배포자에서 여러 배포 데이터베이스를 구성하여 각 배포 데이터베이스를 통해 흐르는 데이터가 단일 게시에서 전송되도록 할 수 있습니다. 배포자 속성 대화 상자 또는 sp_adddistributiondb(Transact-SQL)를 사용하여 배포 데이터베이스를 추가합니다. 대화 상자에 액세스하는 방법에 대한 자세한 내용은 배포자 및 게시자 속성 보기 및 수정을 참조하세요.
배포자 및 게시자에 대한 정보(예: 게시되는 데이터베이스의 개체)를 찾으려면 어떻게 하나요?
이 정보는 SQL Server Management Studio 및 여러 복제 저장 프로시저를 통해 사용할 수 있습니다. 자세한 내용은 배포자 및 게시자 정보 스크립트를 참조하세요.
복제에서 데이터를 암호화하나요?
아니요. 복제는 데이터베이스에 저장되거나 네트워크를 통해 전송되는 데이터를 암호화하지 않습니다. 자세한 내용은 SQL Server 복제 보안 항목의 "암호화" 섹션을 참조하세요.
인터넷을 통해 데이터를 복제하려면 어떻게 해야 하나요?
다음을 사용하여 인터넷을 통해 데이터를 복제합니다.
VPN(가상 사설망)입니다. 자세한 내용은 VPN을 사용하여 인터넷을 통해 데이터 게시를 참조하세요.
병합 복제에 대한 웹 동기화 옵션입니다. 자세한 내용은 병합 복제에 대한 웹 동기화를 참조하세요.
모든 유형의 Microsoft SQL Server 복제는 VPN을 통해 데이터를 복제할 수 있지만 병합 복제를 사용하는 경우 웹 동기화를 고려해야 합니다.
연결이 끊어지면 복제를 다시 시작하나요?
예. 연결이 끊어지면 중단된 지점에서 복제 처리가 다시 시작됩니다. 신뢰할 수 없는 네트워크를 통해 병합 복제를 사용하는 경우 관련된 변경 내용이 단위로 처리되도록 하는 논리 레코드를 사용하는 것이 좋습니다. 자세한 내용은 논리적 레코드가 있는 관련 행에 대한 그룹 변경 내용을 참조하세요.
낮은 대역폭 연결을 통해 복제가 작동하나요? 압축을 사용하나요?
예, 낮은 대역폭 연결을 통해 복제가 작동합니다. TCP/IP를 통해 연결의 경우 프로토콜에서 제공하는 압축을 사용하지만 추가 압축을 제공하지는 않습니다. HTTPS를 통한 웹 동기화 연결의 경우 프로토콜에서 제공하는 압축과 변경 내용을 복제하는 데 사용되는 XML 파일의 추가 압축을 사용합니다.
로그인 및 개체 소유권
로그인 및 암호가 복제됩니까?
아니요. 게시자에서 하나 이상의 구독자에게 로그인 및 암호를 전송하는 DTS 패키지를 만들 수 있습니다.
스키마란 무엇이며 어떻게 복제됩니까?
Microsoft SQL Server 2005부터 스키마 에는 두 가지 의미가 있습니다.
CREATE TABLE 문과 같은 개체의 정의입니다. 기본적으로 복제는 복제된 모든 개체의 정의를 구독자에 복사합니다.
개체가 생성되는 네임스페이스: <데이터베이스>.<스키마>.<개체>. 스키마는 CREATE SCHEMA 문을 사용하여 정의됩니다.
복제에는 스키마 및 개체 소유권과 관련하여 새 게시 마법사에서 다음과 같은 기본 동작이 있습니다.
호환성 수준이 90 이상인 병합 게시의 아티클, 스냅샷 게시 및 트랜잭션 게시의 경우 기본적으로 구독자의 개체 소유자는 Publisher에서 해당 개체의 소유자와 동일합니다. 개체를 소유한 스키마가 구독자에 없는 경우 자동으로 만들어집니다.
호환성 수준이 90보다 낮은 병합 게시의 아티클의 경우: 기본적으로 소유자는 비워 두고 구독자에서 개체를 만드는 동안 dbo 로 지정됩니다.
Oracle 게시의 아티클의 경우: 기본적으로 소유자는 dbo로 지정됩니다.
문자 모드 스냅샷(SQL Server 이외 구독자 및 SQL Server Compact 구독자에 사용됨)을 사용하는 게시의 아티클의 경우 기본적으로 소유자는 비워 둡니다. 소유자는 기본적으로 배포 에이전트 또는 병합 에이전트에서 구독자에 연결하는 데 사용하는 계정과 연결된 소유자로 설정됩니다.
개체 소유자는 아티클 속성 - <아티클> 대화 상자 및 저장 프로시저 (sp_addarticle, sp_addmergearticle, sp_changearticle 및 sp_changemergearticle 통해 변경할 수 있습니다. 자세한 내용은 게시 속성 보기 및 수정, 아티클 정의 및 아티클속성 보기 및 수정을 참조하세요.
게시 데이터베이스의 권한 부여와 일치하도록 구독 데이터베이스에 대한 부여를 구성하려면 어떻게 해야 하나요?
기본적으로 복제는 구독 데이터베이스에서 GRANT 문을 실행하지 않습니다. 구독 데이터베이스에 대한 사용 권한이 게시 데이터베이스의 사용 권한과 일치하도록 하려면 다음 방법 중 하나를 사용합니다.
구독 데이터베이스에서 GRANT 문을 직접 실행합니다.
스냅샷 후 스크립트를 사용하여 명령문을 실행합니다. 자세한 내용은 스냅샷이 적용되기 전과 후에 스크립트 실행을 참조하세요.
저장 프로시저 sp_addscriptexec 사용하여 문을 실행합니다.
구독을 다시 초기화하면 구독 데이터베이스에 부여된 사용 권한은 어떻게 되나요?
기본적으로 구독자의 개체는 구독을 다시 초기화할 때 삭제되고 다시 생성되므로 해당 개체에 대해 부여된 모든 권한이 삭제됩니다. 이 작업을 처리하는 방법에는 두 가지가 있습니다.
이전 섹션에서 설명한 기술을 통해 초기화한 후, 부여를 다시 적용합니다.
구독을 다시 초기화할 때 개체를 삭제하지 않도록 지정합니다. 다시 초기화하기 전에 다음 중 하나를 수행합니다.
sp_changearticle 실행하거나 sp_changemergearticle. 매개 변수 @property에 대한 값으로 'pre_creation_cmd'(sp_changearticle) 또는 'pre_creation_command'(sp_changemergearticle) 중 하나를 지정하고, 매개 변수 @value에 대해서는 'none', 'delete' 또는 'truncate' 값을 지정합니다.
아티클 속성 - <아티클> 대화 상자의 대상 개체 섹션에서 이름이 사용 중인 경우 작업 옵션에 대해 기존 개체를 그대로 유지, 데이터 삭제. 아티클에 행 필터가 있는 경우 필터와 일치하는 데이터만 삭제 또는 기존 개체의 모든 데이터를 삭제 값을 선택합니다. 이 대화 상자에 액세스하는 방법에 대한 자세한 내용은 게시 속성 보기 및 수정을 참조하세요.
데이터베이스 유지 관리
게시된 테이블에서 TRUNCATE TABLE을 실행할 수 없는 이유는 무엇인가요?
TRUNCATE TABLE은 트리거를 발생시키지 않는 로그되지 않은 작업입니다. 복제에서 작업으로 인한 변경 내용을 추적할 수 없으므로 허용되지 않습니다. 트랜잭션 복제는 트랜잭션 로그를 통해 변경 내용을 추적합니다. 병합 복제는 게시된 테이블의 트리거를 통해 변경 내용을 추적합니다.
복제된 데이터베이스에서 대량 삽입 명령을 실행하면 어떤 영향이 있나요?
트랜잭션 복제의 경우 대량 삽입은 다른 삽입처럼 추적 및 복제됩니다. 병합 복제의 경우 변경 내용 추적 메타데이터가 제대로 업데이트되었는지 확인해야 합니다.
백업 및 복원에 대한 복제 고려 사항이 있나요?
예. 복제와 관련된 데이터베이스에는 여러 가지 특별한 고려 사항이 있습니다. 자세한 내용은 복제 데이터베이스 백업 및 복원을 참조하세요.
복제가 트랜잭션 로그의 크기에 영향을 주나요?
병합 복제 및 스냅샷 복제는 트랜잭션 로그 크기에 영향을 미치지 않지만 트랜잭션 복제는 영향을 줄 수 있습니다. 데이터베이스에 하나 이상의 트랜잭션 게시가 포함된 경우 게시와 관련된 모든 트랜잭션이 배포 데이터베이스에 전달될 때까지 로그가 잘리지 않습니다. 트랜잭션 로그가 너무 커지고 로그 판독기 에이전트가 예약된 기준으로 실행되는 경우 실행 간격을 줄이는 것이 좋습니다. 또는 연속 모드에서 실행되도록 설정합니다. 연속 모드(기본값)로 실행되도록 설정된 경우 실행 중인지 확인합니다. 로그 판독기 에이전트 상태를 확인하는 방법에 대한 자세한 내용은 복제 모니터를 사용하여 정보 보기 및 작업 수행을 참조하세요.
또한 게시 데이터베이스 또는 배포 데이터베이스에서 '백업과 동기화' 옵션을 설정한 경우 모든 트랜잭션이 백업될 때까지 트랜잭션 로그가 잘리지 않습니다. 트랜잭션 로그가 너무 커지고 이 옵션을 설정한 경우 트랜잭션 로그 백업 간의 간격을 줄이는 것이 좋습니다. 트랜잭션 복제와 관련된 데이터베이스 백업 및 복원에 대한 자세한 내용은 스냅샷 및 트랜잭션 복제 백업 및 복원 전략을 참조하세요.
복제된 데이터베이스에서 인덱스 또는 테이블을 다시 빌드하려면 어떻게 해야 하나요?
인덱스를 다시 작성하기 위한 다양한 메커니즘이 있습니다. 트랜잭션 게시의 테이블에는 기본 키가 필요하므로 이러한 테이블에서 기본 키를 삭제하고 다시 만들 수 없으므로 복제에 대한 특별한 고려 사항 없이 모두 사용할 수 있습니다.
게시 및 구독 데이터베이스에서 인덱스를 추가하거나 변경하려면 어떻게 해야 하나요?
인덱스는 복제에 대한 특별한 고려 사항 없이 게시자 또는 구독자에서 추가할 수 있습니다(인덱스가 성능에 영향을 줄 수 있음). CREATE INDEX 및 ALTER INDEX는 복제되지 않으므로 게시자와 같이 인덱스 추가 또는 변경 시 구독자에서 인덱스가 반영되도록 하려면 구독자에서 동일한 추가 또는 변경을 수행해야 합니다.
복제와 관련된 데이터베이스의 파일은 어떻게 이동하거나 이름을 바꾸나요?
SQL Server 2005 이전 버전의 SQL Server에서는 데이터베이스 파일을 이동하거나 이름을 변경하려면 데이터베이스를 분리하고 다시 연결해야 했습니다. 복제된 데이터베이스를 분리할 수 없으므로 먼저 이러한 데이터베이스에서 복제를 제거해야 했습니다. SQL Server 2005부터 데이터베이스를 분리하고 다시 연결하지 않고도 복제에 영향을 주지 않고 파일을 이동하거나 이름을 바꿀 수 있습니다. 파일 이동 및 이름 바꾸기에 대한 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하세요.
복제 중인 테이블을 삭제하려면 어떻게 해야 하나요?
먼저 sp_droparticle, sp_dropmergearticle 또는 게시 특성 - <게시물> 대화 상자를 사용하여 발행물에서 아티클을 삭제한 다음 DROP <Object>로 데이터베이스에서 삭제합니다. 구독이 추가된 후에는 스냅샷 또는 트랜잭션 게시에서 아티클을 삭제할 수 없습니다. 먼저 구독을 삭제해야 합니다. 자세한 내용은 기존 게시에 아티클 추가 및 삭제를 참조하세요.
게시된 테이블에 열을 추가하거나 삭제하려면 어떻게 해야 하나요?
SQL Server는 열 추가 및 삭제를 포함하여 게시된 개체에 대한 다양한 스키마 변경을 지원합니다. 예를 들어, 게시자에서 ALTER TABLE ... DROP COLUMN을 실행하면, 구문은 구독자들에게 복제되고, 그 후 실행되어 열이 삭제됩니다. SQL Server 2005 이전 버전을 실행하는 구독자는 저장 프로시저 sp_repladdcolumn 및 sp_repldropcolumn을 통해 열을 추가하고 삭제할 수 있습니다. 자세한 내용은 게시 데이터베이스의 스키마 변경을 참조하세요.
복제 유지 관리
구독자의 데이터가 게시자의 데이터와 동기화되는지 확인하려면 어떻게 해야 하나요?
유효성 검사를 사용합니다. 유효성 검사는 지정된 구독자가 게시자와 동기화되는지 여부를 보고합니다. 자세한 내용은 복제된 데이터의 유효성 검사를 참조하세요. 유효성 검사는 올바르게 동기화되지 않은 경우 어떤 행에 대한 정보를 제공하지 않지만 tablediff 유틸리티 는 이를 수행합니다.
기존 발행물에 테이블을 추가하려면 어떻게 해야 하나요?
테이블(또는 다른 개체)을 추가하기 위해 게시 또는 구독 데이터베이스에 대한 작업을 중지할 필요가 없습니다. 게시 속성 - <게시> 대화 상자 또는 저장 프로시저 sp_addarticle 및 sp_addmergearticle를 통해 게시에 테이블을 추가합니다. 자세한 내용은 기존 게시에 아티클 추가 및 삭제를 참조하세요.
발행물에서 테이블을 제거하려면 어떻게 해야 하나요?
sp_droparticle,sp_dropmergearticle 또는 게시 속성 - <게시 대화 상자를 사용하여 발행물>에서 테이블을 제거합니다. 구독이 추가된 후에는 스냅샷 또는 트랜잭션 게시에서 아티클을 삭제할 수 없습니다. 먼저 구독을 삭제해야 합니다. 자세한 내용은 기존 게시에 아티클 추가 및 삭제를 참조하세요.
구독을 다시 초기화해야 하는 작업은 무엇인가요?
구독을 다시 초기화해야 하는 아티클 및 게시 변경 내용이 많이 있습니다. 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.
스냅샷이 무효화되는 작업은 무엇인가요?
스냅샷을 무효화하고 새 스냅샷을 생성해야 하는 아티클 및 게시 변경 내용이 많이 있습니다. 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.
복제를 제거하려면 어떻게 해야 하나요?
데이터베이스에서 복제를 제거하는 데 필요한 작업은 데이터베이스가 게시 데이터베이스, 구독 데이터베이스 또는 둘 다로 제공되었는지 여부에 따라 달라집니다.
복제할 트랜잭션 또는 행이 있는지 확인하려면 어떻게 해야 하나요?
트랜잭션 복제의 경우 복제 모니터의 저장 프로시저 또는 배포되지 않은 명령 탭을 사용합니다. 자세한 내용은 배포 데이터베이스에서 복제된 명령 및 기타 정보 보기(복제 Transact-SQL 프로그래밍) 및 복제 모니터를 사용하여 정보 보기 및 작업 수행을 참조하세요.
병합 복제의 경우 저장 프로시저 sp_showpendingchanges 사용합니다. 자세한 내용은 sp_showpendingchanges(Transact-SQL)를 참조하세요.
배포 에이전트는 얼마나 뒤처지나요? 다시 초기화해야 하나요?
복제 모니터에서 sp_replmonitorsubscriptionpendingcmds 저장 프로시저 또는 배포되지 않은 명령 탭을 사용합니다. 저장 프로시저 및 탭 표시:
선택한 구독자에게 배달되지 않은 배포 데이터베이스의 명령 수입니다. 명령은 하나의 Transact-SQL DML(데이터 조작 언어) 문 또는 하나의 DDL(데이터 정의 언어) 문으로 구성됩니다.
구독자에게 명령을 배달하는 데 소요되는 예상 시간입니다. 이 값이 스냅샷을 생성하고 구독자에 적용하는 데 필요한 시간보다 큰 경우 구독자를 다시 초기화하는 것이 좋습니다. 자세한 내용은 구독 다시 초기화를 참조하세요.
자세한 내용은 sp_replmonitorsubscriptionpendingcmds(Transact-SQL) 및 복제 모니터를 사용하여 정보 보기 및 작업 수행을 참조하세요.
복제 및 기타 데이터베이스 기능
복제는 로그 전달 및 데이터베이스 미러링과 함께 작동하나요?
예. 자세한 내용은 로그 전달 및 복제(SQL Server) 및 데이터베이스 미러링 및 복제(SQL Server)를 참조하세요.
복제가 클러스터링과 함께 작동하나요?
예. 모든 데이터가 클러스터의 한 디스크 집합에 저장되므로 특별한 고려 사항이 필요하지 않습니다.