Amazon RDS에서 Microsoft SQL Server용 읽기 전용 복제본 작업 - Amazon Relational Database Service

Amazon RDS에서 Microsoft SQL Server용 읽기 전용 복제본 작업

일반적으로 읽기 전용 복제본을 사용하여 Amazon RDS DB 인스턴스 간 복제를 구성합니다. 읽기 전용 복제본에 대한 일반적인 정보는 DB 인스턴스 읽기 전용 복제본 작업 단원을 참조하십시오.

이 단원에서는 Amazon RDS for SQL Server의 읽기 전용 복제본 작업에 대한 특정 정보를 찾을 수 있습니다.

SQL Server용 읽기 전용 복제본 구성

DB 인스턴스를 복제용 원본 인스턴스로 사용하려면 원본 DB 인스턴스의 자동 백업을 활성화해야 합니다. 이렇게 하려면 백업 보존 기간을 0 이외의 값으로 설정합니다. 원본 DB 인스턴스는 상시 가동 가용성 그룹(AG)이 있는 다중 AZ 배포여야 합니다. 이 유형의 배포를 설정하면 자동 백업도 강제로 활성화됩니다.

SQL Server 읽기 복제본을 만들 때 기본 DB 인스턴스의 운영 중단이 필요하지 않습니다. Amazon RDS는 서비스 중단 없이 소스 DB 및 읽기 전용 복제본에 필요한 파라미터와 권한을 설정합니다. 원본 DB 인스턴스를 캡처한 스냅샷이 읽기 전용 복제본이 됩니다. 읽기 전용 복제본을 삭제하더라도 중단은 발생하지 않습니다.

원본 DB 인스턴스 하나에서 최대 15개까지 읽기 전용 복제본을 생성할 수 있습니다. 효과적인 복제를 위해서는 읽기 전용 복제본도 각각 소스 DB 인스턴스와 동일한 양의 컴퓨팅 및 스토리지 리소스를 갖도록 구성해야 합니다. 원본 DB 인스턴스를 확장하는 경우 읽기 전용 복제본도 확장합니다.

소스 DB 인스턴스의 SQL Server DB 엔진 버전과 모든 읽기 전용 복제본은 동일해야 합니다. Amazon RDS는 유지 관리 기간과 상관없이 읽기 전용 복제본을 업그레이드한 후 즉시 기본 인스턴스를 업그레이드합니다. DB 엔진 버전 업그레이드에 대한 자세한 내용은 Microsoft SQL Server DB 엔진 업그레이드 단원을 참조하세요.

읽기 전용 복제본이 원본에서 변경 사항을 받아 적용하려면 충분한 컴퓨팅 및 스토리지 리소스가 있어야 합니다. 읽기 전용 복제본이 컴퓨팅, 네트워크 또는 스토리지 리소스 용량에 도달하면 읽기 전용 복제본은 해당 원본에서 변경 사항을 수신하거나 적용하는 것을 중지합니다. 읽기 전용 복제본의 스토리지 및 CPU 리소스를 해당 원본 및 다른 읽기 전용 복제본과 별도로 수정할 수 있습니다.

SQL Server의 읽기 전용 복제본 제한 사항

Amazon RDS의 SQL Server 읽기 전용 복제본에는 다음 제한 사항이 적용됩니다.

  • 읽기 전용 복제본은 SQL Server Enterprise Edition(EE) 엔진에서만 사용할 수 있습니다.

  • 읽기 복제본은 SQL Server 버전 2016~2022에서 사용할 수 있습니다.

  • 복제할 원본 DB 인스턴스는 상시 가동 AG가 있는 다중 AZ 배포여야 합니다.

  • 원본 DB 인스턴스 하나에서 최대 15개까지 읽기 전용 복제본을 생성할 수 있습니다. 소스 DB 인스턴스에 읽기 전용 복제본이 5개 이상인 경우 복제가 지연될 수 있습니다.

  • 읽기 전용 복제본은 4개 이상의 vCPU가 있는 DB 인스턴스 클래스에서 실행되는 DB 인스턴스에만 사용할 수 있습니다.

  • 다음은 Amazon RDS for SQL Server에서 지원되지 않습니다.

    • 읽기 전용 복제본의 백업 보존

    • 읽기 전용 복제본의 특정 시점으로 복구

    • 읽기 전용 복제본의 수동 스냅샷

    • 다중 AZ 읽기 전용 복제본

    • 읽기 전용 복제본의 읽기 전용 복제본 생성

    • 읽기 전용 복제본에 대한 사용자 로그인 동기화

  • Amazon RDS for SQL Server는 개입을 통해 원본 DB 인스턴스와 해당 읽기 전용 복제본 간의 긴 복제본 지연 시간을 완화하지 않습니다. 원본 DB 인스턴스와 해당 읽기 전용 복제본이 운영 로드에 맞게 컴퓨팅 파워 및 스토리지 면에서 제대로 크기가 조정되었는지 확인합니다.

RDS for SQL Server 복제본에 대한 옵션 고려 사항

RDS for SQL Server 복제본을 생성하기 전에 다음 요구 사항, 제한 사항 및 권장 사항을 확인하세요.

  • SQL Server 복제본이 소스 DB 인스턴스와 동일한 리전에 있는 경우 해당 복제본이 원본 DB 인스턴스와 동일한 옵션 그룹에 속해 있는지 확인하세요. 원본 옵션 그룹 또는 원본 옵션 그룹 멤버십에 대한 수정 사항은 복제본으로 전파됩니다. 이러한 변경 사항은 복제본의 유지 관리 기간과 상관없이 원본 DB 인스턴스에 적용된 직후 복제본에 적용됩니다.

    옵션 그룹에 대한 자세한 내용은 옵션 그룹 작업 단원을 참조하십시오.

  • SQL Server 리전 간 복제본을 생성하면 Amazon RDS가 전용 옵션 그룹을 생성합니다.

    전용 옵션 그룹에서 SQL Server 리전 간 복제본을 제거할 수 없습니다. 다른 DB 인스턴스는 SQL Server 리전 간 복제본에 전용 옵션 그룹을 사용할 수 없습니다.

    다음 옵션은 복제된 옵션입니다. SQL Server 리전 간 읽기 전용 복제본에 복제된 옵션을 추가하려면 원본 DB 인스턴스의 옵션 그룹에 추가하세요. 이 옵션은 모든 원본 DB 인스턴스의 복제본에도 설치됩니다.

    • TDE

    다음 옵션은 복제되지 않은 옵션입니다. 전용 옵션 그룹에 복제되지 않은 옵션을 추가하거나 제거할 수 있습니다.

    • MSDTC

    • SQLSERVER_AUDIT

    • 리전 간 읽기 전용 복제본에서 SQLSERVER_AUDIT 옵션을 활성화하려면 리전 간 읽기 전용 복제본의 전용 옵션 그룹과 원본 인스턴스의 옵션 그룹에 SQLSERVER_AUDIT 옵션을 추가하세요. SQL Server 리전 간 읽기 전용 복제본의 원본 인스턴스에 SQLSERVER_AUDIT 옵션을 추가하면 원본 인스턴스의 각 리전 간 읽기 전용 복제본에 서버 수준 감사 객체 및 서버 수준 감사 사양을 생성할 수 있습니다. 리전 간 읽기 전용 복제본에 액세스하여 완성된 감사 로그를 Amazon S3 버킷에 업로드할 수 있도록 하려면 전용 옵션 그룹에 SQLSERVER_AUDIT 옵션을 추가하고 옵션 설정을 구성하세요. 감사 파일의 대상으로 사용하는 Amazon S3 버킷은 리전 간 읽기 전용 복제본과 같은 리전에 있어야 합니다. 각 리전 간 읽기 전용 복제본에 대한 SQLSERVER_AUDIT 옵션의 옵션 설정을 개별적으로 수정하여 각 읽기 전용 복제본이 해당 리전의 Amazon S3 버킷에 액세스하도록 할 수 있습니다.

    다음 옵션은 리전 간 읽기 전용 복제본에서 지원되지 않습니다.

    • SSRS

    • SSAS

    • SSIS

    다음 옵션은 리전 간 읽기 전용 복제본에서 부분적으로 지원됩니다.

    • SQLSERVER_BACKUP_RESTORE

    • SQL Server 리전 간 복제본의 원본 DB 인스턴스에는 SQLSERVER_BACKUP_RESTORE 옵션이 있을 수 있지만 원본 DB 인스턴스의 모든 리전 간 복제본을 삭제하기 전에는 원본 DB 인스턴스에서 기본 복원을 수행할 수 없습니다. 리전 간 복제본을 생성하는 동안 기존의 모든 기본 복원 작업이 취소됩니다. 전용 옵션 그룹에는 SQLSERVER_BACKUP_RESTORE 옵션을 추가할 수 없습니다.

      기본 백업 및 복원에 대한 자세한 내용은 기본 백업 및 복원 기능을 사용하여 SQL Server 데이터베이스 가져오기 및 내보내기 섹션을 참조하세요.

    SQL Server 리전 간 읽기 전용 복제본을 승격하면 승격된 복제본은 옵션 관리를 포함해 다른 SQL Server DB 인스턴스와 동일하게 작동합니다. 옵션 그룹에 대한 자세한 내용은 옵션 그룹 작업 단원을 참조하세요.

데이터베이스 사용자 및 객체를 SQL Server 읽기 전용 복제본과 동기화

읽기 전용 복제본을 생성할 때 프라이머리 DB 인스턴스에 있는 모든 로그인, 사용자 지정 서버 역할, SQL 에이전트 작업 또는 기타 서버 수준 객체가 새로 생성된 읽기 전용 복제본에 있어야 합니다. 하지만 읽기 전용 복제본을 생성한 후에 프라이머리 DB 인스턴스에 생성된 서버 수준 객체는 자동으로 복제되지 않으므로 읽기 전용 복제본에서 수동으로 생성해야 합니다.

데이터베이스 사용자는 프라이머리 DB 인스턴스에서 읽기 전용 복제본으로 자동 복제됩니다. 읽기 전용 복제본 데이터베이스는 읽기 전용 모드이므로 데이터베이스 사용자의 보안 식별자(SID)를 데이터베이스에서 업데이트할 수 없습니다. 따라서 읽기 전용 복제본에서 SQL 로그인을 생성할 때는 해당 로그인의 SID가 프라이머리 DB 인스턴스의 해당 SQL 로그인 SID와 일치하는지 확인해야 합니다. SQL 로그인의 SID를 동기화하지 않으면 읽기 전용 복제본의 데이터베이스에 액세스할 수 없습니다. Windows Active Directory(AD) 인증 로그인은 SQL Server가 Active Directory에서 SID를 가져오기 때문에 이 문제가 발생하지 않습니다.

프라이머리 DB 인스턴스에서 읽기 전용 복제본으로 SQL 로그인 동기화
  1. 프라이머리 DB 인스턴스에 연결합니다.

  2. 프라이머리 DB 인스턴스에 새 SQL 로그인을 생성합니다.

    USE [master] GO CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD';
    참고

    보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

  3. 데이터베이스에 SQL 로그인을 위한 새 데이터베이스 사용자를 생성합니다.

    USE [REPLACE WITH YOUR DB NAME] GO CREATE USER TestLogin1 FOR LOGIN TestLogin1; GO
  4. 프라이머리 DB 인스턴스에서 새로 생성한 SQL 로그인의 SID를 확인합니다.

    SELECT name, sid FROM sys.server_principals WHERE name = TestLogin1;
  5. 읽기 전용 복제본에 연결합니다. 새 SQL 로그인을 생성합니다.

    CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=[REPLACE WITH sid FROM STEP #4];
또는 읽기 전용 복제본 데이터베이스에 액세스할 수 있는 경우 다음과 같이 분리된 사용자를 수정할 수 있습니다.
  1. 읽기 전용 복제본에 연결합니다.

  2. 데이터베이스에서 분리된 사용자를 식별합니다.

    USE [REPLACE WITH YOUR DB NAME] GO EXEC sp_change_users_login 'Report'; GO
  3. 분리된 데이터베이스 사용자를 위한 새 SQL 로그인을 생성합니다.

    CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=[REPLACE WITH sid FROM STEP #2];

    예제

    CREATE LOGIN TestLogin1 WITH PASSWORD = 'TestPa$$word#1', SID=[0x1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P];
    참고

    보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

SQL Server 읽기 전용 복제본 문제 해결

Amazon CloudWatch에서 Amazon RDS ReplicaLag 지표를 보고 복제 지연을 모니터링할 수 있습니다. 복제 지연 시간에 대한 자세한 내용은 읽기 전용 복제본 모니터링 단원을 참조하십시오.

복제 지연 시간이 너무 긴 경우 다음 쿼리를 사용하여 지연 시간에 대한 정보를 얻을 수 있습니다.

SELECT AR.replica_server_name , DB_NAME (ARS.database_id) 'database_name' , AR.availability_mode_desc , ARS.synchronization_health_desc , ARS.last_hardened_lsn , ARS.last_redone_lsn , ARS.secondary_lag_seconds FROM sys.dm_hadr_database_replica_states ARS INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id --WHERE DB_NAME(ARS.database_id) = 'database_name' ORDER BY AR.replica_server_name;