외부 복제본 구성

이 페이지에서는 Cloud SQL 외부 또는 Cloud SQL 내부 구독자에게 게시하도록 Cloud SQL 인스턴스를 설정하는 방법을 설명합니다. SQL Server용 Cloud SQL의 외부 복제에는 Cloud SQL이 구독자에 대한 게시자로 작동하는 트랜잭션 복제가 사용됩니다.

트랜잭션 복제는 Microsoft에서 설명된 것에 따라 여러 유형의 객체를 게시하도록 지원합니다. 또한 Cloud SQL에서 이 기능의 제한 사항은 Microsoft에서 설명된 것과 비슷합니다.

지원되는 일부 객체는 다음과 같습니다.

  • 테이블
  • 저장 프로시저
  • 색인 보기
  • 사용자 정의 함수

이 페이지에 게시 프로세스 예시도 있지만 자세한 내용은 Microsoft 문서에서 데이터 및 데이터베이스 객체 게시를 참조하세요. SSMS에서 사용 가능한 옵션이 더 많으므로 게시 프로세스에서 SQL Server Management Studio(SSMS)를 사용하는 것이 좋습니다.

또한 Cloud SQL의 복제 정보를 참조하세요.

트랜잭션 복제 구현

Cloud SQL 인스턴스는 트랜잭션 복제를 통해 외부 구독자를 위한 게시자 및 배포자로 작동합니다.

트랜잭션 복제를 설정하려면 다음과 같이 할 수 있습니다.

  • Cloud SQL에서 제공되는 저장 프로시져를 사용합니다. 여기에는 gcloudsql_transrepl_ 프리픽스가 추가됩니다.
  • Microsoft에서 제공되는 저장 프로시져를 사용하여 복제 세분화

제한사항 및 기본 요건

트랜잭션 복제를 계획할 때는 다음 섹션을 검토하세요.

제한사항

고가용성(HA)을 사용하는 인스턴스는 일관된 송신 IP 주소가 없습니다. 이러한 인스턴스는 공개 IP 연결을 사용할 경우 게시자가 될 수 없습니다. 따라서 인스턴스에 HA가 사용될 경우 비공개 IP 연결을 사용해야 합니다.

아티클을 정의할 때는 한도 및 제한을 포함하여 Microsoft 문서에서 아티클 정의를 참조하세요.

Cloud SQL에서 제공되는 저장 프로시저는 푸시 구독만 지원합니다.

기본 요건

Cloud SQL 인스턴스와 구독자 인스턴스 사이에 양방향 네트워크 연결을 설정해야 합니다. 구독자는 온프렘 구독자와 같은 외부 구독자이거나 Cloud SQL 내부 구독자일 수 있습니다.

공개 IP를 사용하는 Cloud SQL 인스턴스의 경우 Cloud SQL은 이그레스 및 인그레스 경로에 다른 IP 주소를 사용합니다. 복제본은 gcloud 명령어를 사용하여 검색할 수 있는 기본 인스턴스의 송신 IP 주소를 허용 목록에 추가해야 합니다.

gcloud sql instances describe [PRIMARY_NAME] --format="default(ipAddresses)"

온프렘 인스턴스에 Cloud SQL 비공개 IP를 사용하려면 비공개 서비스 액세스를 설정해야 합니다. 이를 위해서는 공지해야 하는 커스텀 IP 범위에 대한 Cloud SQL VPC 및 고객 VPC 사이의 피어링이 필요합니다.

온프렘에서 연결할 때 온프렘 방화벽은 인바운드 및 아웃바운드 연결을 허용해야 합니다. 특히 온프렘 방화벽은 특정 Google Cloud 서비스(이 경우에는 Cloud SQL)에 사용되는 비공개 서비스 액세스 서브넷 범위에 대해 포트 1433을 통해 이러한 연결을 허용해야 합니다. 생성된 각 인스턴스에 대해 특정 IP가 아닌 서브넷 범위를 허용할 수 있습니다.

관련 정보는 다음을 참조하세요.

권한 및 역할

패키지 권한

Cloud SQL에서 제공된 저장 프로시져에는 트랜잭션 복제에 필요한 권한이 포함되어 있습니다. 이것들은 경우에 따라 하나 이상의 Microsoft 저장 프로시져를 호출하는 래퍼 저장 프로시져입니다. Microsoft 저장 프로시져에 대한 자세한 내용은 Microsoft 문서를 참조하세요.

필요한 역할

사용된 계정(로그 리더 에이전트 포함)에는 sqlserver 사용자의 경우에서와 같이 db_owner 역할이 필요합니다. 필요한 정보는 복제 에이전트 보안 모델을 검토하세요.

게시, 배포, 구독을 위한 저장 프로시져 사용

이 섹션에는 트랜잭션 복제 설정을 위한 권장 단계가 포함되어 있습니다.

sqlserver 사용자에게는 게시자로 작동하도록 Cloud SQL 인스턴스를 설정하기 위한 저장 프로시져가 있습니다. 자세한 내용은 Cloud SQL 저장 프로시져를 참조하세요.

테스트 데이터베이스로 트랜잭션 복제 준비

프로덕션 데이터베이스에 대해 트랜잭션 복제를 설정하기 전 인스턴스를 테스트 데이터베이스 객체의 게시자로 설정할 수 있습니다. 이 페이지에서는 테스트 데이터베이스를 pub_demo 데이터베이스라고 부릅니다.

sqlserver 사용자를 사용하여 Cloud SQL 인스턴스에 연결하고 테스트 목적으로 데이터베이스를 만듭니다. 예를 들면 다음과 같습니다.

Create Database pub_demo;
GO
USE pub_demo;
CREATE TABLE Employee(employeeId INT primary key);
INSERT INTO Employee([employeeId]) VALUES (1);
INSERT INTO Employee([employeeId]) VALUES (2);

-- Add procedure
CREATE OR ALTER PROCEDURE dbo.p_GetDate
AS
SELECT getdate()

-- Add view
CREATE OR ALTER VIEW dbo.v_GetDbs
AS
SELECT name from sys.databases

-- Function
CREATE OR ALTER FUNCTION dbo.fn_ListDbFiles(@id int)
RETURNS TABLE
AS
RETURN
(
select * from sys.master_files where database_id = @id
)

배포 데이터베이스 설정

배포 데이터베이스의 경우 다음 Microsoft 저장 프로시져에 대한 래퍼 저장 프로시져인 msdb.dbo.gcloudsql_transrepl_setup_distribution을 사용할 수 있습니다.

예를 들면 다음과 같습니다.

EXEC msdb.dbo.gcloudsql_transrepl_setup_distribution @login='sqlserver', @password='<password>'

게시에 데이터베이스 사용 설정

데이터베이스의 게시 옵션을 사용 설정 또는 사용 중지하려면 msdb.dbo.gcloudsql_transrepl_replicationdboption을 사용하면 됩니다. 이 저장 프로시져는 sp_replicationdboption을 사용하는 게시자의 게시 옵션에 적용됩니다.

예를 들면 다음과 같습니다.

EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption @db='pub_demo', @value='true'

로그 리더 에이전트 추가

sp_addlogreader_agent를 사용하는 데이터베이스에 대해 로그 리더 에이전트를 설정할 수 있습니다.

예를 들면 다음과 같습니다.

EXEC msdb.dbo.gcloudsql_transrepl_addlogreader_agent @db='pub_demo', @login='sqlserver', @password='<password>'

데이터베이스의 게시 만들기

msdb.dbo.gcloudsql_transrepl_addpublication을 사용하여 지정한 데이터베이스에 대해 트랜잭션 게시를 만들 수 있습니다. 이 저장 프로시져는 sp_addpublication을 래핑합니다.

예를 들면 다음과 같습니다.

EXEC msdb.dbo.gcloudsql_transrepl_addpublication @db='pub_demo', @publication='pub1'

지정된 게시의 스냅샷 에이전트 만들기

게시자 데이터베이스에 대해 스냅샷 에이전트를 만들려면 sp_addpublication_snapshot을 래핑하는 msdb.dbo.gcloudsql_transrepl_addpublication_snapshot을 사용할 수 있습니다.

예를 들면 다음과 같습니다.

EXEC msdb.dbo.gcloudsql_transrepl_addpublication_snapshot @db='pub_demo',  @publication='pub1', @login='sqlserver', @password='<password>'

아티클을 만들고 게시에 추가

게시자 데이터베이스 내에서 아티클을 만들고 이를 게시에 추가할 수 있습니다. sqlserver 사용자로서 sp_addarticle을 사용합니다.

또한 SSMS를 사용하여 아티클을 추가할 수도 있습니다. 자세한 내용은 게시에서 아티클 추가 및 삭제를 참조하세요.

예를 들면 다음과 같습니다.

USE pub_demo;
GO

EXEC sp_addarticle @publication = 'pub1',
                   @article = 'csql_dbo.employee',
                   @source_owner = 'dbo',
                   @source_object = 'Employee',
                   @description = N'cloudsql_article_table',
                   @schema_option = 0x000000000903409D,
                   @identityrangemanagementoption = N'manual',
                   @destination_table = 'Employee',
                   @destination_owner = 'dbo';

-- add function
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'fn_ListDbFiles',
                   @source_owner = N'dbo',
                   @source_object = N'fn_ListDbFiles',
                   @type = N'func schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'fn_ListDbFiles',
                   @destination_owner = N'dbo',
                   @status = 16

-- add procedure
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'p_GetDate',
                   @source_owner = N'dbo',
                   @source_object = N'p_GetDate',
                   @type = N'proc schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'p_GetDate',
                   @destination_owner = N'dbo',
                   @status = 16

-- add view
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'v_GetDbs',
                   @source_owner = N'dbo',
                   @source_object = N'v_GetDbs',
                   @type = N'view schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'v_GetDbs',
                   @destination_owner = N'dbo',
                   @status = 16

게시에 구독 추가

데이터베이스 내에서 게시에 구독을 추가할 수 있습니다. sqlserver 사용자로서 sp_addsubscription을 사용하여 구독자 상태를 설정합니다.

예를 들면 다음과 같습니다.

Use pub_demo;
GO
EXEC sp_addsubscription @publication ='pub1',
                        @subscriber = N'10.10.100.1,1433',
                        @destination_db = pub_demo,
                        @subscription_type = N'Push',
                        @sync_type = N'automatic',
                        @article = N'all',
                        @update_mode = N'read only',
                        @subscriber_type = 0

구독자에 연결하고 구독 데이터베이스 만들기

구독자에 연결하고 작성하려는 관련 데이터를 위한 구독 데이터베이스를 만들 수 있습니다.

예를 들면 다음과 같습니다.

 Create Database pub_demo

새 예약된 에이전트를 추가하여 푸시 구독 동기화

게시에 푸시 구독을 동기화하기 위해 새 예약된 에이전트 작업을 추가할 수 있습니다. 예를 들어 게시자 데이터베이스에서 아래와 비슷한 명령어를 실행합니다. 이 명령어는 sp_addpushsubscription_agent의 래퍼 저장 프로시져인 msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent를 사용합니다.

EXEC msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent
@db='pub_demo',
@publication = 'pub1',
@subscriber_db= 'pub_demo',
@subscriber_login='sqlserver',
@subscriber_password='<password>',
@subscriber='11.11.111.1,1433'

게시 스냅샷 에이전트 작업 시작

다음과 같이 게시 스냅샷 에이전트 작업을 시작할 수 있습니다.

USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'

Replication Monitor를 사용하도록 계정에 액세스 부여

msdb.dbo.gcloudsql_transrepl_addmonitoraccess를 사용하여 다음을 수행합니다.

  • SSMS에서 Replication Monitor에 액세스 제공
  • 배포 데이터베이스에서 테이블 쿼리

따라서 이 저장 프로시져에서는 MSrepl_errors 테이블과 같은 배포 데이터베이스의 복제 관련 테이블에서 SELECT 문을 사용할 수 있습니다.

EXEC msdb.dbo.gcloudsql_transrepl_addmonitoraccess
@login = 'sqlserver'

배포 데이터베이스 속성 변경

heartbeat_interval을 변경할 수 있습니다. sp_changedistributor_property를 래핑하는 msdb.dbo.gcloudsql_transrepl_changedistributor_property 프로시져를 사용합니다.

자세한 내용은 sp_changedistributor_property 문서를 참조하세요. heartbeat_interval 값에 대한 자세한 내용은 해당 문서도 참조하세요.

예를 들면 다음과 같습니다.

EXEC msdb.dbo.gcloudsql_transrepl_changedistributor_property
@property = N'heartbeat_interval',
@value = 90

Replication Monitor 사용

SSMS에서 복제 노드를 마우스 오른쪽 버튼으로 클릭하고 Replication Monitor 실행을 선택합니다.

에이전트 탭을 클릭하면 다음과 비슷한 뷰가 표시됩니다.

에이전트 탭의 폴더

저장 프로시저를 사용하여 복제 삭제

이 섹션에는 트랜잭션 복제를 삭제하기 위해 권장된 단계가 포함되어 있습니다.

구독 삭제

구독을 삭제하려면 sp_dropsubscription 저장 프로시져를 사용합니다.

다음은 구독 삭제를 위한 명령어 예시입니다

USE  pub_demo;
GO
EXEC sp_dropsubscription
          @publication = 'csql_pub_pub_demo',
          @article     = N'all',
          @subscriber  = N'11.11.111.1,1433'

구독자 삭제

구독자를 삭제하려면 msdb.dbo.gcloudsql_transrepl_dropsubscriber 저장 프로시져를 사용합니다.

EXEC msdb.dbo.gcloudsql_transrepl_dropsubscriber
 @subscriber  = N'11.11.111.1,1433'

게시 삭제

게시를 삭제하려면 msdb.dbo.gcloudsql_transrepl_droppublication 저장 프로시져를 사용합니다.

EXEC msdb.dbo.gcloudsql_transrepl_droppublication
  @db = 'pub_demo', @publication='pub1'

게시 데이터베이스 사용 중지

게시 데이터베이스를 사용 중지하려면 msdb.dbo.gcloudsql_transrepl_replicationdboption 저장 프로시져를 사용합니다.

EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption
@db='pub_demo',
@value=N'false'

배포 데이터베이스 삭제

배포 데이터베이스를 삭제하려면 msdb.dbo.gcloudsql_transrepl_remove_distribution 저장 프로시저를 사용합니다.

EXEC msdb.dbo.gcloudsql_transrepl_remove_distribution

문제 해결 팁과 단계

올바른 데이터베이스에서 저장 프로시져 실행

sp_addarticle, sp_addsubscription, sp_startpublication_snapshot을 실행할 때 다음 오류가 발생할 수 있습니다.

Only members of the sysadmin fixed server role or db_owner fixed database role can perform this operation.

또한 sp_dropsubscription을 실행할 때 다음 오류가 발생할 수 있습니다.

This database is not enabled for publication.

이러한 오류가 발생하면 적용할 데이터베이스 내에서 저장 프로시저를 실행해야 합니다. 다음을 사용하여 올바른 데이터베이스에서 실행되었는지 확인할 수 있습니다.

USE <database_name>;
GO
<Run stored proc>

복제

복제 오류는 SQL 오류 로그 및 그 외 장소에 제공됩니다. 배포 데이터베이스의 일부 테이블에 직접 복제 오류를 쿼리할 수 있습니다. 예를 들면 다음과 같습니다.

select * from [cloudsql_distribution]..msrepl_errors
select * from [cloudsql_distribution]..MSreplication_monitordata

Replication Monitor 사용 시 오류 조회에 관한 Microsoft의 추가 예시는 여기를 참조하세요. 예를 들어 sqlserver 사용자에게 명령어 액세스가 부족할 수 있습니다.

복제 에이전트 작업

복제가 설정된 후 새 SQL 에이전트 작업이 SSMS에서 sqlserver 사용자에게 표시되지 않습니다. 하지만 다음을 사용하여 이를 볼 수 있습니다.

USE msdb
select * from dbo.sysjobs

Replication Monitor에서 게시자 누락

Replication Monitor를 사용하여 복제 상태를 보고 복제 문제를 해결할 수 있습니다.

예를 들어 복제를 설정하고 게시자 Cloud SQL 인스턴스가 IP 주소를 사용하는 경우 SSMS가 게시자를 찾지 못할 수 있습니다. 이것은 호스트 이름과 IP 주소 간 매핑을 알지 못하기 때문입니다.

Replication Monitor에는 빈 게시 탭이 포함되어 있습니다.

게시 탭에 행이 없습니다.

문제 해결을 위해서는 SQL Server 구성 관리자에서 게시자의 SQL Server 호스트 이름과 SSMS에서 연결에 사용되는 IP 주소 사이에 별칭을 만들 수 있습니다.

  1. SQL Server 구성 관리자를 시작합니다.

    SQL Server 구성 관리자

  2. 별칭 노드를 찾아서 선택합니다.

    별칭 노드가 선택되어 있습니다.

  3. 별칭 이름 아래 상자를 마우스 오른쪽 버튼으로 클릭하여 새 별칭을 만듭니다. 32비트 별칭과 64비트 별칭 모두 동일한 절차가 적용됩니다.

    별칭 이름 아래의 드롭다운 상자

  4. 이 쿼리를 사용하여 게시자 인스턴스의 실제 호스트 이름을 검색합니다.

    게시자 인스턴스의 실제 호스트 이름 쿼리

  5. 별칭 창에서 확인을 선택하기 전 다음 필드를 입력합니다.

    별칭 이름: 4단계의 쿼리에서 서버 이름을 제공합니다.

    포트 번호: 포트 1433을 제공합니다.

    프로토콜: 값을 TCP/IP 기본값으로 둡니다.

    서버: 게시자 인스턴스의 IP 주소를 제공합니다.

    별칭 이름, 서버 등의 값입니다.

  6. 새 별칭을 사용하여 연결하고 Replication Monitor를 실행합니다.

    서버 대화상자에 연결

게시 정보는 다음과 비슷합니다.

이제 Replication Monitor에서 복제 탭에 행이 표시됩니다.

복제 문제 해결에 대한 자세한 내용은 문제 해결 도구: SQL Server 트랜잭션 복제 오류 찾기를 참조하세요.

복제에 필요한 아티클 크기 예측

Cloud SQL 인스턴스를 게시자로 사용할 때는 복제를 시작하기 위해 생성할 아티클의 초기 스냅샷이 필요합니다. 이 스냅샷은 로컬로 저장됩니다. 아티클 수, 크기, 데이터 유형에 따라 스토리지 요구사항이 늘어날 수 있습니다. sp_spaceused 저장 프로시져는 아티클에 필요한 디스크 공간을 대략적으로만 추정할 수 있습니다.

스냅샷에는 스키마 및 데이터를 저장하는 파일이 포함되어 있습니다.

다음 단계