Azure SQL Database의 데이터베이스에 대한 트랜잭션 일치 복사본 복사

적용 대상:Azure SQL Database

Azure SQL Database는 동일한 서버 또는 다른 서버에서 기존 데이터베이스의 복사본을 만들기 위한 여러 가지 방법을 제공합니다. Azure Portal, PowerShell, Azure CLI 또는 Transact-SQL을 사용하여 데이터베이스를 복사할 수 있습니다.

참고 항목

Microsoft Entra ID는 이전의 Azure Active Directory(Azure AD)입니다.

개요

데이터베이스 복사본은 복사 요청이 시작된 후의 시점으로 원본 데이터베이스의 트랜잭션 일치 스냅샷입니다. 복사본에 대해 동일한 서버 또는 다른 서버를 선택할 수 있습니다. 또한 원본 데이터베이스의 백업 중복 및 컴퓨팅 크기를 유지하거나 동일한 서비스 계층 내에서 다른 백업 스토리지 중복 및/또는 컴퓨팅 크기를 사용하도록 선택할 수 있습니다. 표준 서비스 계층의 데이터베이스를 표준 또는 범용 계층에 복사하거나 프리미엄 서비스 계층의 데이터베이스를 프리미엄 또는 중요 비즈니스용 계층으로 복사할 수 있는 몇 가지 예외가 있습니다. 복사가 완료되면 완전히 작동하는 독립 데이터베이스가 됩니다. 복사된 데이터베이스의 로그인, 사용자 및 사용 권한은 원본 데이터베이스와 독립적으로 관리됩니다. 이 복사본은 지역에서 복제 기술을 사용하여 만들어집니다. 복제본 시드가 완료되면 지역에서 복제 링크가 자동으로 종료됩니다. 지역에서 복제 사용에 대한 모든 요구 사항은 데이터베이스 복사 작업에 적용됩니다. 자세한 내용은 활성 지역 복제 개요를 참조하세요.

참고 항목

Azure Portal, PowerShell 및 Azure CLI는 다른 구독에 대한 데이터베이스 복사를 지원하지 않습니다.

Azure SQL 하이퍼스케일용 데이터베이스 복사

Azure SQL 하이퍼스케일의 경우 대상 데이터베이스는 복사본이 빠른 복사인지 아니면 size-of-data 복사인지를 결정합니다.

  • 빠른 복사: 복사가 원본과 동일한 지역에서 수행되면 Blob의 스냅샷에서 복사본이 만들어집니다. 이 복사본은 데이터베이스 크기에 관계없이 빠른 작업입니다.

  • Size-of-data 복사: 대상 데이터베이스가 원본과 다른 지역에 있거나 대상의 데이터베이스 백업 스토리지 중복성(로컬, 영역, 지역)이 원본 데이터베이스와 다른 경우 복사 작업은 size-of-data 작업이 됩니다. 페이지 서버 Blob이 병렬로 복사되기 때문에 복사 시간은 크기에 직접 비례하지 않습니다.

데이터베이스 복사본에서 로그인

데이터베이스를 동일한 서버에 복사할 때 두 데이터베이스에서 동일한 로그인을 사용할 수 있습니다. 데이터베이스를 복사하는 데 사용하는 보안 주체는 새 데이터베이스의 데이터베이스 소유자가 됩니다.

다른 서버에 데이터베이스를 복사하는 경우 대상 서버에서 복사 작업을 시작한 보안 주체가 새 데이터베이스의 소유자가 됩니다.

대상 서버에 관계없이 모든 데이터베이스 사용자, 권한 및 SID(보안 식별자)가 데이터베이스 사본에 복사됩니다. 데이터 액세스에 대해 포함된 데이터베이스 사용자를 사용하면 복사된 데이터베이스에 동일한 사용자 자격 증명이 있으므로 복사를 완료한 후 동일한 자격 증명을 사용하여 해당 데이터베이스에 즉시 액세스할 수 있습니다.

데이터 액세스에 서버 수준 로그인을 사용하고 데이터베이스를 다른 서버에 복사하는 경우 로그인 기반 액세스가 작동하지 않을 수 있습니다. 이는 로그인이 대상 서버에 없거나 암호 및 SID(보안 식별자)가 다르기 때문에 발생할 수 있습니다. 다른 서버로 데이터베이스를 복사할 때 로그인을 관리하는 방법에 대한 자세한 내용은 재해 복구 후에 Azure SQL Database 보안을 관리하는 방법을 참조하세요. 다른 서버에 대한 복사 작업이 성공하고 다른 사용자를 다시 매핑하기 전에는 데이터베이스 소유자나 서버 관리자와 연결된 로그인만 복사된 데이터베이스에 로그인할 수 있습니다. 복사 작업이 완료된 후 로그인을 확인하고 데이터 액세스를 설정하려면 로그인 확인을 참조하세요.

Azure Portal을 사용하여 복사

Azure Portal을 사용하여 데이터베이스를 복사하려면 데이터베이스에 대한 페이지를 연 다음, 복사를 선택하여 SQL Database 만들기 - 데이터베이스 복사 페이지를 엽니다. 데이터베이스를 복사할 대상 서버의 값을 입력합니다.

Screenshot of Azure portal, showing Database copy option highlighted on the database overview page.

PowerShell 또는 Azure CLI를 사용하여 복사

데이터베이스를 복사하려면 다음 예제를 사용합니다.

PowerShell의 경우 AzSqlDatabaseCopy cmdlet을 사용합니다.

중요

PowerShell Azure RM(Resource Manager) 모듈은 여전히 Azure SQL Database에서 지원되지만 향후 모든 개발은 Az.Sql 모듈을 위한 것입니다. AzureRM 모듈은 적어도 2020년 12월까지 버그 수정을 계속 수신할 예정입니다. Az 모듈 및 AzureRm 모듈의 명령에 대한 인수는 실질적으로 동일합니다. 호환성에 대한 자세한 내용은 새로운 Azure PowerShell Az 모듈 소개를 참조하세요.

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

데이터베이스 복사는 비동기 작업이지만 요청이 수락된 직후에 대상 데이터베이스가 생성됩니다. 진행 중인 동안 복사 작업을 취소해야 하는 경우 Remove-AzSqlDatabase cmdlet을 사용하여 대상 데이터베이스를 삭제합니다.

전체 샘플 PowerShell 스크립트는 새 서버에 데이터베이스 복사를 참조하세요.

Transact-SQL을 사용하여 복사

서버 관리자 로그인이나 복사하려는 데이터베이스에서 만든 로그인을 사용하여 master 데이터베이스에 로그인합니다. 데이터베이스 복사가 성공하려면 로그인이 서버 관리자가 아닌 dbmanager 역할의 구성원이어야 합니다. 서버에 로그인 및 연결하는 방법에 대한 자세한 내용은 로그인 관리를 참조하세요.

CREATE DATABASE ... AS COPY OF 문으로 원본 데이터베이스 복사를 시작합니다. T-SQL 문은 데이터베이스 복사 작업이 완료될 때까지 계속 실행됩니다.

참고 항목

T-SQL 문을 종료해도 데이터베이스 복사 작업은 종료되지 않습니다. 작업을 종료하려면 대상 데이터베이스를 삭제합니다.

동일한 서버에 복사

서버 관리자 로그인이나 복사하려는 데이터베이스에서 만든 로그인을 사용하여 master 데이터베이스에 로그인합니다. 데이터베이스 복사가 성공하려면 로그인이 서버 관리자가 아닌 dbmanager 역할의 구성원이어야 합니다.

이 명령은 Database1(을)를 동일한 서버에서 이름이 Database2인 새 데이터베이스에 복사합니다. 데이터베이스 크기에 따라 복사 작업을 완료하는 데 다소 시간이 걸릴 수 있습니다.

-- Execute on the master database to start copying
CREATE DATABASE Database2 AS COPY OF Database1;

탄력적 풀에 복사

서버 관리자 로그인이나 복사하려는 데이터베이스에서 만든 로그인을 사용하여 master 데이터베이스에 로그인합니다. 데이터베이스 복사가 성공하려면 로그인이 서버 관리자가 아닌 dbmanager 역할의 구성원이어야 합니다.

이 명령은 pool1이라는 Elastic Pool에서라는 Database2(이)라는 새 데이터베이스에 Database1(을)를 복사합니다. 데이터베이스 크기에 따라 복사 작업을 완료하는 데 다소 시간이 걸릴 수 있습니다.

Database1(은)는 단일 또는 풀링된 데이터베이스가 될 수 있습니다. 다른 계층 풀 간 복사는 지원되지만 일부 교차 계층 복사본은 실패합니다. 예를 들어 단일 또는 탄력적 표준 db를 범용 풀로 복사할 수 있지만 탄력적 표준 db를 프리미엄 풀로 복사할 수는 없습니다.

-- Execute on the master database to start copying
CREATE DATABASE Database2
AS COPY OF Database1
(SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool1 ));

다른 서버에 복사

새 데이터베이스를 만들 대상 서버의 master 데이터베이스에 연결합니다. 원본 서버에서 원본 데이터베이스의 데이터베이스 소유자와 동일한 이름과 암호를 가진 로그인을 사용합니다. 또한 대상 서버의 로그인은 dbmanager 역할의 구성원이거나 서버 관리자 로그인이어야 합니다.

이 명령은 server1의 Database1(을)를 server2의 Database2(이)라는 새 데이터베이스에 복사합니다. 데이터베이스 크기에 따라 복사 작업을 완료하는 데 다소 시간이 걸릴 수 있습니다.

-- Execute on the master database of the target server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1;

중요

두 서버 방화벽이 모두 T-SQL CREATE DATABASE ... AS COPY OF 명령을 실행하는 클라이언트의 IP에서 인바운드 연결을 허용하도록 구성해야 합니다. 현재 연결의 원본 IP 주소를 확인하려면 SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;를 실행합니다.

참고 항목

프라이빗 엔드포인트에서 대상 서버에 연결할 때 T-SQL 사용한 데이터베이스 복사는 지원되지 않습니다. 프라이빗 엔드포인트가 구성되었지만 공용 네트워크 액세스가 허용되는 경우 공용 IP 주소에서 SQL 인증을 사용하여 대상 서버에 연결할 때 데이터베이스 복사가 지원됩니다. 복사 작업이 완료되면 공용 액세스를 거부할 수 있습니다.

마찬가지로 아래 명령은 server1의 Database1(을)를 server2의 pool2라는 Elastic Pool 내에 있는 Database2(이)라는 새 데이터베이스에 복사합니다.

-- Execute on the master database of the target server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1 (SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool2 ) );

다른 구독으로 복사

T-SQL을 사용하여 다른 구독에 있는 서버에 데이터베이스를 복사하려면 다른 서버에 SQL Database 복사 섹션의 단계를 수행하면 됩니다. 원본 데이터베이스의 데이터베이스 소유자와 동일한 이름과 암호를 가진 로그인을 사용해야 합니다. 또한 로그인은 원본 및 대상 서버 둘 다에서 dbmanager 역할 또는 서버 관리자의 구성원이어야 합니다.

동일한 Microsoft Entra ID 테넌트에서 데이터베이스를 복사할 때 두 서버 모두에서 충분한 액세스 권한이 있는 인증 로그인을 사용하여 복사 명령을 시작하면 원본 및 대상 서버에 대한 권한 부여가 간소화됩니다. 필요한 최소 액세스 수준은 두 서버의 master 데이터베이스에 있는 dbmanager 역할의 멤버 자격입니다. 예를 들어 두 서버에서 서버 관리자로 지정된 그룹의 구성원인 Microsoft Entra ID 로그인을 사용할 수 있습니다.

--Step# 1
--Create login and user in the master database of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx'
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

--Step# 2
--Create the user in the source database and grant dbowner permission to the database.

CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE db_owner ADD MEMBER loginname;
GO

--Step# 3
--Capture the SID of the user "loginname" from master database

SELECT [sid] FROM sysusers WHERE [name] = 'loginname';

--Step# 4
--Connect to Destination server.
--Create login and user in the master database, same as of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx', SID = [SID of loginname login on source server];
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

--Step# 5
--Execute the copy of database script from the destination server using the credentials created

CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;

T-SQL을 사용한 데이터베이스 복사는 다른 Azure 테넌트의 구독에서 데이터베이스를 복사 하는 것을 지원합니다. 이는 SQL 인증 로그인을 사용하여 대상 서버에 로그인하는 경우에만 지원됩니다. 원본 또는 대상 논리 서버에서 Microsoft Entra 인증이 활성화(사용하도록 설정)된 경우 다른 테넌트에서 데이터베이스 복사본을 만드는 것은 지원되지 않습니다.

복사 작업 진행률 모니터링

sys.databases, sys.dm_database_copiessys.dm_operation_status 뷰를 쿼리하여 복사 프로세스를 모니터링합니다. 복사가 진행되는 동안 새 데이터베이스에 대해 sys.databases 뷰의 state_desc 열이 COPYING(으)로 설정됩니다.

  • 복사에 실패할 경우 새 데이터베이스에 대해 sys.databases 뷰의 state_desc 열이 SUSPECT(으)로 설정됩니다. 새 데이터베이스에서 DROP 문을 실행하고 나중에 다시 시도합니다.
  • 복사에 성공할 경우 새 데이터베이스에 대해 sys.databases 뷰의 state_desc 열이 ONLINE(으)로 설정됩니다. 복사가 완료되었으며 새 데이터베이스가 원본 데이터베이스와는 독립적으로 변경 가능한 일반 데이터베이스가 됩니다.

참고 항목

진행 중인 복사를 취소하려면 새 데이터베이스에서 DROP DATABASE 문을 실행합니다.

Important

원본보다 훨씬 더 작은 서비스 목표를 가진 복사본을 만들어야 하는 경우, 대상 데이터베이스에 시드 프로세스를 완료하는 데 필요한 리소스가 부족하여 복사 작업이 실패할 수 있습니다. 이 시나리오에서는 지역 복원 요청을 사용하여 다른 서버 및/또는 다른 지역에 복사본을 만듭니다. 자세한 내용은 데이터베이스 백업을 사용하여 Azure SQL Database 복구하기를 참조하세요.

Azure RBAC 역할 및 데이터베이스 복사본 관리 권한

데이터베이스 복사본을 만들려면 다음 역할을 부여받아야 합니다.

  • 구독 소유자 또는
  • SQL Server 기여자 역할 또는
  • 다음 권한이 있는 사용자 지정 역할:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write and
  • 대상 서버에 대한 다음 권한이 있는 사용자 지정 역할:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

데이터베이스 복사를 취소하려면 다음 역할을 부여받아야 합니다.

  • 구독 소유자 또는
  • SQL Server 기여자 역할 또는
  • 대상 데이터베이스에 대한 다음 권한이 있는 사용자 지정 역할:
    • Microsoft.Sql/servers/databases/delete

Azure Portal을 사용하여 데이터베이스 복사를 관리하려면 다음 사용 권한도 필요합니다.

  • Microsoft.Resources/subscriptions/resources/read
  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/operationstatuses/read

포털에서 리소스 그룹의 배포 아래에 있는 작업, SQL 작업을 비롯한 여러 리소스 공급자의 작업을 확인하려면 다음과 같은 추가 권한이 필요합니다.

  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

로그인 확인

대상 서버에서 새 데이터베이스가 온라인 상태가 되면 ALTER USER 문을 사용하여 새 데이터베이스의 사용자를 대상 서버의 로그인과 다시 매핑합니다. 분리된 사용자를 확인하려면 분리된 사용자 문제 해결을 참조하세요. 재해 복구 후에 Azure SQL Database 보안을 관리하는 방법도 참조하세요.

새 데이터베이스의 모든 사용자가 원본 데이터베이스에서 가졌던 사용 권한을 그대로 유지합니다. 데이터베이스 복사를 실행한 사용자가 새 데이터베이스의 소유자가 됩니다. 복사 성공 후 다른 사용자를 다시 매핑하기 전에는 데이터베이스 소유자만 새 데이터베이스에 로그인할 수 있습니다.

다른 서버로 데이터베이스를 복사할 때 사용자 및 로그인을 관리하는 방법에 대한 자세한 내용은 재해 복구 후에 Azure SQL Database 보안을 관리하는 방법을 참조하세요.

데이터베이스 복사 오류

Azure SQL Database에서 데이터베이스를 복사하는 동안 다음 오류가 발생할 수 있습니다. 자세한 내용은 Azure SQL Database 복사를 참조하세요.

오류 코드 심각도 설명
40635 16 IP 주소가 '%.*ls'인 클라이언트를 일시적으로 사용할 수 없습니다.
40637 16 데이터베이스 복사본 만들기를 현재 사용할 수 없습니다.
40561 16 데이터베이스를 복사하지 못했습니다. 원본 또는 대상 데이터베이스가 존재하지 않습니다.
40562 16 데이터베이스를 복사하지 못했습니다. 원본 데이터베이스가 삭제되었습니다.
40563 16 데이터베이스를 복사하지 못했습니다. 대상 데이터베이스가 삭제되었습니다.
40564 16 내부 오류로 인해 데이터베이스를 복사하지 못했습니다. 대상 데이터베이스를 삭제하고 다시 시도하십시오.
40565 16 데이터베이스를 복사하지 못했습니다. 동일한 소스에서 1개의 동시 데이터베이스 복사본이 허용됩니다. 대상 데이터베이스를 삭제하고 나중에 다시 시도하십시오.
40566 16 내부 오류로 인해 데이터베이스를 복사하지 못했습니다. 대상 데이터베이스를 삭제하고 다시 시도하십시오.
40567 16 내부 오류로 인해 데이터베이스를 복사하지 못했습니다. 대상 데이터베이스를 삭제하고 다시 시도하십시오.
40568 16 데이터베이스를 복사하지 못했습니다. 원본 데이터베이스를 사용할 수 없습니다. 대상 데이터베이스를 삭제하고 다시 시도하십시오.
40569 16 데이터베이스를 복사하지 못했습니다. 대상 데이터베이스를 사용할 수 없습니다. 대상 데이터베이스를 삭제하고 다시 시도하십시오.
40570 16 내부 오류로 인해 데이터베이스를 복사하지 못했습니다. 대상 데이터베이스를 삭제하고 나중에 다시 시도하십시오.
40571 16 내부 오류로 인해 데이터베이스를 복사하지 못했습니다. 대상 데이터베이스를 삭제하고 나중에 다시 시도하십시오.