Kopiowanie transakcyjnie spójnej kopii bazy danych w usłudze Azure SQL Database

Dotyczy: baza danych Azure SQL

Azure SQL Database udostępnia kilka metod tworzenia kopii istniejącej bazy danych na tym samym serwerze lub innym serwerze. Bazę danych można skopiować przy użyciu Azure Portal, programu PowerShell, interfejsu wiersza polecenia platformy Azure lub języka T-SQL.

Omówienie

Kopia bazy danych jest transakcyjnie spójną migawką źródłowej bazy danych jako punktu w czasie po zainicjowaniu żądania kopiowania. Możesz wybrać ten sam serwer lub inny serwer kopii. Możesz również zachować nadmiarowość kopii zapasowych i rozmiar obliczeniowy źródłowej bazy danych lub użyć innego rozmiaru magazynu kopii zapasowej i/lub rozmiaru obliczeniowego w tej samej warstwie usługi. Po zakończeniu kopiowania staje się ona w pełni funkcjonalną, niezależną bazą danych. Zarządzanie danymi logowania, użytkownikami i uprawnieniami w skopiowanej bazie danych odbywa się niezależnie od źródłowej bazy danych. Kopia jest tworzona przy użyciu technologii replikacji geograficznej. Po zakończeniu rozmieszczania repliki połączenie replikacji geograficznej zostaje przerwane. Wszystkie wymagania dotyczące korzystania z replikacji geograficznej dotyczą również operacji kopiowania bazy danych. Aby uzyskać szczegółowe informacje, zobacz Omówienie aktywnej replikacji geograficznej .

Kopiowanie bazy danych dla Azure SQL Hiperskala

W przypadku Azure SQL Hiperskala docelowa baza danych określa, czy kopia będzie szybką kopią, czy rozmiarem kopii danych.

Szybka kopia: po zakończeniu kopiowania w tym samym regionie co źródło kopia zostanie utworzona na podstawie migawek obiektów blob, ta kopia jest szybką operacją niezależnie od rozmiaru bazy danych.

Rozmiar kopii danych: jeśli docelowa baza danych znajduje się w innym regionie niż źródło lub jeśli nadmiarowość magazynu kopii zapasowej bazy danych (lokalna, strefowa, geograficzna) różni się od źródłowej bazy danych, operacja kopiowania będzie rozmiarem operacji danych. Czas kopiowania nie będzie bezpośrednio proporcjonalny do rozmiaru, ponieważ obiekty blob serwera stron są kopiowane równolegle.

Identyfikatory logowania w kopii bazy danych

Podczas kopiowania bazy danych na ten sam serwer można używać tych samych identyfikatorów logowania w obu bazach danych. Podmiot zabezpieczeń używany do kopiowania bazy danych staje się właścicielem bazy danych w nowej bazie danych.

Gdy skopiujesz bazę danych na inny serwer, podmiot zabezpieczeń, który zainicjował operację kopiowania na serwerze docelowym, staje się właścicielem nowej bazy danych.

Niezależnie od serwera docelowego kopia bazy danych zawiera wszystkich użytkowników bazy danych, ich uprawnienia i identyfikatory zabezpieczeń. Użycie użytkowników zawartej bazy danych w celu uzyskania dostępu do danych gwarantuje, że skopiowana baza danych ma te same poświadczenia użytkownika, dzięki czemu po zakończeniu kopiowania można natychmiast uzyskać do niej dostęp przy użyciu tych samych poświadczeń.

Jeśli do uzyskiwania dostępu do danych i kopiowania bazy danych na inny serwer używasz danych logowania na poziomie serwera, dostęp z wykorzystaniem danych logowania może nie zadziałać. Dzieje się tak, ponieważ na serwerze docelowym nie istnieją dane logowania lub ponieważ odpowiednie hasła i identyfikatory zabezpieczeń są inne. Aby dowiedzieć się więcej na temat zarządzania identyfikatorami logowania podczas kopiowania bazy danych na inny serwer, zobacz Jak zarządzać zabezpieczeniami bazy danych Azure SQL po odzyskiwaniu po awarii. Po pomyślnym zakończeniu operacji kopiowania na innym serwerze i przed ponownym mapowaniu innych użytkowników tylko identyfikator logowania skojarzony z właścicielem bazy danych lub administrator serwera może zalogować się do skopiowanej bazy danych. Aby rozwiązać problemy z logowaniem i ustanowić dostęp do danych po zakończeniu operacji kopiowania, zobacz Rozwiązywanie problemów z logowaniem.

Kopiowanie za pomocą witryny Azure Portal

Aby skopiować bazę danych przy użyciu Azure Portal, otwórz stronę bazy danych, a następnie kliknij przycisk Kopiuj.

Kopiowanie bazy danych

Kopiowanie przy użyciu programu PowerShell lub interfejsu wiersza polecenia platformy Azure

Aby skopiować bazę danych, skorzystaj z poniższych przykładów.

W przypadku programu PowerShell użyj polecenia cmdlet New-AzSqlDatabaseCopy .

Ważne

Moduł Azure Resource Manager (RM) programu PowerShell jest nadal obsługiwany przez usługę Azure SQL Database, ale cały przyszły rozwój jest przeznaczony dla modułu Az.Sql. Moduł AzureRM będzie nadal otrzymywać poprawki błędów do co najmniej grudnia 2020 r. Argumenty poleceń w module Az i modułach AzureRm są znacznie identyczne. Aby uzyskać więcej informacji na temat ich zgodności, zobacz Wprowadzenie do nowego modułu Azure PowerShell Az.

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

Kopia bazy danych jest operacją asynchroniczną, ale docelowa baza danych jest tworzona natychmiast po zaakceptowaniu żądania. Jeśli musisz anulować operację kopiowania w toku, usuń docelową bazę danych przy użyciu polecenia cmdlet Remove-AzSqlDatabase .

Aby uzyskać pełny przykładowy skrypt programu PowerShell, zobacz Kopiowanie bazy danych na nowy serwer.

Kopiowanie przy użyciu języka Transact-SQL

Zaloguj się do bazy danych master przy użyciu nazwy logowania administratora serwera lub identyfikatora logowania, który utworzył bazę danych, którą chcesz skopiować. Aby kopiowanie bazy danych powiodło się, identyfikatory logowania, które nie są administratorem serwera, muszą być członkami dbmanager roli. Aby uzyskać więcej informacji na temat logowania i nawiązywania połączenia z serwerem, zobacz Zarządzanie identyfikatorami logowania.

Zacznij kopiować źródłową bazę danych za pomocą polecenia CREATE DATABASE ... AS COPY OF , instrukcja. Instrukcja T-SQL będzie działać do momentu ukończenia operacji kopiowania bazy danych.

Uwaga

Zakończenie instrukcji T-SQL nie kończy operacji kopiowania bazy danych. Aby zakończyć operację, usuń docelową bazę danych.

Kopiowanie bazy danych przy użyciu języka T-SQL nie jest obsługiwane podczas nawiązywania połączenia z serwerem docelowym za pośrednictwem prywatnego punktu końcowego. Jeśli prywatny punkt końcowy jest skonfigurowany, ale jest dozwolony dostęp do sieci publicznej, kopiowanie bazy danych jest obsługiwane w przypadku połączenia z serwerem docelowym z publicznego adresu IP. Po zakończeniu operacji kopiowania można odmówić dostępu publicznego.

Ważne

Wybieranie nadmiarowości magazynu kopii zapasowej podczas korzystania z bazy danych T-SQL CREATE DATABASE... POLECENIE COPY OF nie jest jeszcze obsługiwane.

Kopiowanie na ten sam serwer

Zaloguj się do bazy danych master przy użyciu nazwy logowania administratora serwera lub identyfikatora logowania, który utworzył bazę danych, którą chcesz skopiować. Aby kopiowanie bazy danych powiodło się, identyfikatory logowania, które nie są administratorem serwera, muszą być członkami dbmanager roli.

To polecenie kopiuje bazę danych Database1 do nowej bazy danych o nazwie Database2 na tym samym serwerze. W zależności od rozmiaru bazy danych operacja kopiowania może zająć trochę czasu.

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

Kopiowanie do elastycznej puli

Zaloguj się do bazy danych master przy użyciu nazwy logowania administratora serwera lub identyfikatora logowania, który utworzył bazę danych, którą chcesz skopiować. Aby kopiowanie bazy danych powiodło się, identyfikatory logowania, które nie są administratorem serwera, muszą być członkami dbmanager roli.

To polecenie kopiuje bazę danych Database1 do nowej bazy danych o nazwie Database2 w elastycznej puli o nazwie pool1. W zależności od rozmiaru bazy danych operacja kopiowania może zająć trochę czasu.

Baza danych1 może być pojedynczą bazą danych lub bazą danych w puli. Kopiowanie między różnymi pulami warstw jest obsługiwane, ale niektóre kopie między warstwami nie powiedzie się. Można na przykład skopiować pojedynczą lub elastyczną bazę danych w warstwie Standardowa do puli Ogólnego przeznaczenia, ale nie można skopiować standardowej elastycznej bazy danych do puli premium.

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

Kopiowanie na inny serwer

Zaloguj się do głównej bazy danych serwera docelowego, na którym ma zostać utworzona nowa baza danych. Użyj nazwy logowania, która ma taką samą nazwę i hasło, jak właściciel bazy danych źródłowej bazy danych na serwerze źródłowym. Logowanie na serwerze docelowym musi być również członkiem dbmanager roli lub być identyfikatorem logowania administratora serwera.

To polecenie kopiuje bazę danych Database1 na serwerze1 do nowej bazy danych o nazwie Database2 na serwerze2. W zależności od rozmiaru bazy danych operacja kopiowania może zająć trochę czasu.

-- 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;

Ważne

Zapory obu serwerów muszą być skonfigurowane tak, aby zezwalały na połączenie przychodzące z adresu IP klienta wystawiającego bazę danych T-SQL CREATE DATABASE... JAKO KOPIA POLECENIA. Aby określić źródłowy adres IP bieżącego połączenia, wykonaj polecenie SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Podobnie poniższe polecenie kopiuje bazę danych Database1 na serwerze1 do nowej bazy danych o nazwie Database2 w puli elastycznej o nazwie pool2 na serwerze 2.

-- 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 ) );

Kopiowanie do innej subskrypcji

Kroki opisane w sekcji Copy a SQL Database to a different server (Kopiowanie SQL Database do innego serwera), aby skopiować bazę danych na serwer w innej subskrypcji przy użyciu języka T-SQL. Upewnij się, że używasz nazwy logowania, która ma taką samą nazwę i hasło, jak właściciel bazy danych źródłowej bazy danych. Ponadto logowanie musi być członkiem dbmanager roli lub administratora serwera na serwerach źródłowych i docelowych.

Porada

Podczas kopiowania baz danych w tej samej dzierżawie usługi Azure Active Directory autoryzacja na serwerach źródłowych i docelowych jest uproszczona, jeśli zainicjujesz polecenie kopiowania przy użyciu logowania uwierzytelniania usługi AAD z wystarczającą ilością dostępu na obu serwerach. Minimalny wymagany poziom dostępu to członkostwo w dbmanager roli głównej bazy danych na obu serwerach. Na przykład można użyć logowania usługi AAD jest członkiem grupy usługi AAD wyznaczonej jako administrator serwera na obu serwerach.

--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;

Uwaga

Azure Portal, PowerShell i interfejs wiersza polecenia platformy Azure nie obsługują kopiowania bazy danych do innej subskrypcji.

Porada

Kopiowanie bazy danych przy użyciu języka T-SQL obsługuje kopiowanie bazy danych z subskrypcji w innej dzierżawie platformy Azure. Jest to obsługiwane tylko w przypadku logowania się do serwera docelowego przy użyciu logowania uwierzytelniania SQL. Tworzenie kopii bazy danych na serwerze logicznym w innej dzierżawie platformy Azure nie jest obsługiwane, gdy uwierzytelnianie usługi Azure Active Directory jest aktywne (włączone) na źródłowym lub docelowym serwerze logicznym.

Monitorowanie postępu operacji kopiowania

Monitoruj proces kopiowania, wykonując zapytania dotyczące widoków sys.databases, sys.dm_database_copies i sys.dm_operation_status . Podczas kopiowania w toku kolumna state_desc widoku sys.databases dla nowej bazy danych jest ustawiona na WARTOŚĆ COPYING.

  • Jeśli kopiowanie nie powiedzie się, kolumna state_desc widoku sys.databases dla nowej bazy danych jest ustawiona na PODEJRZANY. Wykonaj instrukcję DROP w nowej bazie danych i spróbuj ponownie później.
  • Jeśli kopiowanie zakończy się pomyślnie, w kolumnie state_desc widoku sys.databases dla nowej bazy danych ustawiono wartość ONLINE. Kopiowanie zostało ukończone, a nowa baza danych jest zwykłą bazą danych, którą można zmienić niezależnie od źródłowej bazy danych.

Uwaga

Jeśli zdecydujesz się anulować kopiowanie w toku, wykonaj instrukcję DROP DATABASE w nowej bazie danych.

Ważne

Jeśli musisz utworzyć kopię z znacznie mniejszym celem usługi niż źródło, docelowa baza danych może nie mieć wystarczających zasobów do ukończenia procesu rozmieszczania i może spowodować niepowodzenie operacji kopiowania. W tym scenariuszu użyj żądania przywracania geograficznego, aby utworzyć kopię na innym serwerze i/lub w innym regionie. Aby uzyskać więcej informacji, zobacz Odzyskiwanie bazy danych Azure SQL database using database backups (Odzyskiwanie bazy danych przy użyciu kopii zapasowych bazy danych).

Role i uprawnienia RBAC platformy Azure do zarządzania kopiowaniem bazy danych

Aby utworzyć kopię bazy danych, musisz mieć następujące role

  • Właściciel subskrypcji lub

  • rola współautora SQL Server lub

  • Rola niestandardowa w źródłowych i docelowych bazach danych z następującymi uprawnieniami:

    Microsoft.Sql/servers/databases/read Microsoft.Sql/servers/databases/write

Aby anulować kopię bazy danych, musisz mieć następujące role

  • Właściciel subskrypcji lub

  • rola współautora SQL Server lub

  • Rola niestandardowa w źródłowych i docelowych bazach danych z następującymi uprawnieniami:

    Microsoft.Sql/servers/databases/read Microsoft.Sql/servers/databases/write

Do zarządzania kopią bazy danych przy użyciu Azure Portal potrzebne są również następujące uprawnienia:

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

Jeśli chcesz wyświetlić operacje we wdrożeniach w grupie zasobów w portalu, operacje między wieloma dostawcami zasobów, w tym operacje SQL, będą potrzebne następujące dodatkowe uprawnienia:

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

Rozwiązywanie problemów z identyfikatorami logowania

Gdy nowa baza danych jest w trybie online na serwerze docelowym, użyj instrukcji ALTER USER , aby ponownie mapować użytkowników z nowej bazy danych na identyfikatory logowania na serwerze docelowym. Aby rozwiązać problemy z użytkownikami oddzielonym, zobacz Rozwiązywanie problemów z użytkownikami oddzielonych. Zobacz też Jak zarządzać zabezpieczeniami bazy danych Azure SQL po odzyskiwaniu po awarii.

Wszyscy użytkownicy w nowej bazie danych zachowują uprawnienia, które mieli w źródłowej bazie danych. Użytkownik, który zainicjował kopię bazy danych, staje się właścicielem nowej bazy danych. Po pomyślnym zakończeniu kopiowania i ponownym zamapowaniu innych użytkowników tylko właściciel bazy danych może zalogować się do nowej bazy danych.

Aby dowiedzieć się więcej o zarządzaniu użytkownikami i nazwami logowania podczas kopiowania bazy danych na inny serwer, zobacz Jak zarządzać zabezpieczeniami bazy danych Azure SQL po odzyskiwaniu po awarii.

Błędy kopiowania bazy danych

Podczas kopiowania bazy danych w usłudze Azure SQL Database mogą wystąpić następujące błędy. Więcej informacji znajdziesz w artykule Kopiowanie bazy danych usługi Azure SQL Database.

Kod błędu Ważność Opis
40635 16 Klient z adresem IP "%.*ls" jest tymczasowo wyłączony.
40637 16 Tworzenie kopii bazy danych jest obecnie wyłączone.
40561 16 Kopiowanie bazy danych nie powiodło się. Źródłowa lub docelowa baza danych nie istnieje.
40562 16 Kopiowanie bazy danych nie powiodło się. Źródłowa baza danych została usunięta.
40563 16 Kopiowanie bazy danych nie powiodło się. Docelowa baza danych została usunięta.
40564 16 Kopiowanie bazy danych nie powiodło się z powodu błędu wewnętrznego. Usuń docelową bazę danych i spróbuj ponownie.
40565 16 Kopiowanie bazy danych nie powiodło się. Dozwolona jest nie więcej niż 1 równoczesna kopia bazy danych z tego samego źródła. Upuść docelową bazę danych i spróbuj ponownie później.
40566 16 Kopiowanie bazy danych nie powiodło się z powodu błędu wewnętrznego. Usuń docelową bazę danych i spróbuj ponownie.
40567 16 Kopiowanie bazy danych nie powiodło się z powodu błędu wewnętrznego. Usuń docelową bazę danych i spróbuj ponownie.
40568 16 Kopiowanie bazy danych nie powiodło się. Źródłowa baza danych stała się niedostępna. Usuń docelową bazę danych i spróbuj ponownie.
40569 16 Kopiowanie bazy danych nie powiodło się. Docelowa baza danych stała się niedostępna. Usuń docelową bazę danych i spróbuj ponownie.
40570 16 Kopiowanie bazy danych nie powiodło się z powodu błędu wewnętrznego. Upuść docelową bazę danych i spróbuj ponownie później.
40571 16 Kopiowanie bazy danych nie powiodło się z powodu błędu wewnętrznego. Upuść docelową bazę danych i spróbuj ponownie później.

Następne kroki