Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:Azure SQL Database
Usługa Azure SQL Database udostępnia kilka metod tworzenia kopii istniejącej bazy danych na tym samym serwerze logicznym usługi Azure SQL Database lub innym serwerze logicznym. Bazę danych można skopiować przy użyciu witryny Azure Portal, programu PowerShell, interfejsu wiersza polecenia platformy Azure lub języka Transact-SQL.
Uwaga
Microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).
Omówienie
Kopia bazy danych jest transakcyjnie spójną migawką źródłowej bazy danych w momencie zainicjowania żądania kopiowania. Dla kopii można wybrać ten sam serwer logiczny lub inny serwer logiczny. Możesz również zachować nadmiarowość kopii zapasowych i rozmiar obliczeniowy źródłowej bazy danych lub użyć innej nadmiarowości magazynu kopii zapasowych i/lub rozmiaru obliczeniowego w ramach tej samej warstwy usługi. Istnieje również możliwość skopiowania bazy danych w warstwie usługi Standardowa do warstwy Standardowa lub Ogólnego przeznaczenia oraz bazy danych w warstwie Usługi Premium do warstwy Premium lub Krytyczne dla działania firmy.
Po zakończeniu kopiowania nowa baza danych jest w pełni funkcjonalną i niezależną bazą danych źródłowej bazy 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.
Uwaga
Witryna Azure Portal, program PowerShell i interfejs wiersza polecenia platformy Azure nie obsługują kopiowania bazy danych do innej subskrypcji.
Kopiowanie bazy danych dla baz danych w warstwie Hiperskala
W przypadku baz danych w warstwie usługi Hiperskala docelowa baza danych określa, czy kopia jest szybką kopią, czy kopią o rozmiarze danych:
Szybka kopia: po zakończeniu kopiowania w tym samym regionie co źródło kopia jest tworzona na podstawie migawek obiektów blob, ta kopia jest szybką operacją niezależnie od rozmiaru bazy danych.
Kopiowanie rozmiaru 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 jest operacją rozmiaru danych. Czas kopiowania nie jest bezpośrednio proporcjonalny do rozmiaru, ponieważ obiekty blob serwera stronicowania są kopiowane równolegle.
Identyfikatory logowania w kopii bazy danych
Podczas kopiowania bazy danych na ten sam serwer logiczny te same identyfikatory logowania mogą być używane w obu bazach danych. Podmiot zabezpieczeń używany do kopiowania bazy danych staje się właścicielem bazy danych w nowej bazie danych.
Podczas kopiowania bazy danych na inny serwer logiczny podmiot zabezpieczeń, który zainicjował operację kopiowania na docelowym serwerze logicznym, staje się właścicielem nowej bazy danych.
Niezależnie od serwera docelowego wszyscy użytkownicy bazy danych, uprawnienia i identyfikatory zabezpieczeń (SID) są kopiowane do kopii bazy danych. 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ć. Może się tak zdarzyć, ponieważ identyfikatory logowania nie istnieją na docelowym serwerze logicznym lub te hasła i identyfikatory zabezpieczeń (SID) są różne. Aby uzyskać więcej informacji na temat zarządzania loginami przy kopiowaniu bazy danych na inny serwer, zobacz Konfigurowanie i zarządzanie zabezpieczeniami Azure SQL Database na potrzeby przywracania geograficznego lub trybu failover. Po pomyślnym zakończeniu operacji kopiowania na innym serwerze logicznym 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 bazy danych
Bazę danych można skopiować przy użyciu programu PowerShell, interfejsu wiersza polecenia platformy Azure i języka Transact-SQL (T-SQL).
Aby skopiować bazę danych przy użyciu witryny Azure Portal, otwórz stronę bazy danych, a następnie wybierz pozycję Kopiuj , aby otworzyć stronę Tworzenie bazy danych SQL Database — kopiowanie bazy danych . Wypełnij wartości docelowego serwera logicznego, do którego chcesz skopiować bazę danych.
Kopiowanie bazy danych przy użyciu Transact-SQL
Zaloguj się do bazy danych master przy użyciu nazwy logowania administratora serwera lub nazwy logowania, która utworzyła 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 roli dbmanager . Aby uzyskać więcej informacji na temat logowania i nawiązywania połączenia z serwerem logicznym, zobacz Autoryzowanie dostępu do bazy danych.
Zacznij kopiować źródłową bazę danych za pomocą polecenia CREATE DATABASE ... AS COPY OF, instrukcja. Instrukcja T-SQL będzie nadal działać do momentu zakończenia operacji kopiowania bazy danych.
Ta sekcja zawiera Transact-SQL polecenia dla następujących operacji:
- Kopiowanie na ten sam serwer logiczny
- Kopiowanie do elastycznej puli
- Kopiowanie na inny serwer logiczny
- Kopiowanie do innej subskrypcji
Uwaga
Zakończenie instrukcji T-SQL nie powoduje zakończenia operacji kopiowania bazy danych. Aby zakończyć operację, usuń docelową bazę danych.
Kopiowanie na ten sam serwer logiczny
Zaloguj się do bazy danych master przy użyciu nazwy logowania administratora serwera lub nazwy logowania, która utworzyła 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 roli dbmanager .
To polecenie kopiuje Database1 do nowej bazy danych o nazwie Database2 na tym samym serwerze logicznym. W zależności od rozmiaru bazy danych operacja kopiowania może trochę potrwać.
-- 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 nazwy logowania, która utworzyła 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 roli dbmanager .
To polecenie kopiuje 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 trochę potrwać.
Database1 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 kończą się niepowodzeniem. Na przykład można 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 w warstwie 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 logiczny
Połącz się z bazą danych master docelowego serwera logicznego, 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 źródłowej bazy danych na źródłowym serwerze logicznym. Konto logowania na docelowym serwerze logicznym musi być również członkiem roli dbmanager lub mieć uprawnienia administratora serwera.
To polecenie kopiuje Database1 na server1 do nowej bazy danych o nazwie Database2 w server2. W zależności od rozmiaru bazy danych operacja kopiowania może trochę potrwać.
-- Execute on the master database of the target logical server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1;
Ważne
Obie zapory serwera logicznego muszą być skonfigurowane tak, aby zezwalały na połączenie przychodzące z adresu IP klienta wydającego polecenie T-SQL CREATE DATABASE ... AS COPY OF. 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;
Uwaga
Kopiowanie bazy danych przy użyciu języka T-SQL nie jest obsługiwane podczas nawiązywania połączenia z docelowym serwerem logicznym za pośrednictwem prywatnego punktu końcowego . Jeśli prywatny punkt końcowy jest skonfigurowany, ale dostęp do sieci publicznej jest dozwolony, kopiowanie bazy danych jest obsługiwane po nawiązaniu połączenia z docelowym serwerem logicznym z publicznego adresu IP przy użyciu uwierzytelniania SQL. Po zakończeniu operacji kopiowania można odmówić dostępu publicznego.
Podobnie, następujące polecenie kopiuje Database1 na server1 do nowej bazy danych o nazwie Database2 w puli elastycznej o nazwie pool2, na server2.
-- Execute on the master database of the target logical 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 Kopiowanie bazy danych SQL Database do innego serwera logicznego można wykonać, aby skopiować bazę danych na serwer logiczny 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. Dodatkowo, identyfikator logowania musi należeć do roli dbmanager lub być administratorem serwera na obu logicznych serwerach: źródłowym i docelowym.
Napiwek
Podczas kopiowania baz danych w tej samej dzierżawie Microsoft Entra ID, autoryzacja na serwerach logicznych źródłowym i docelowym jest uproszczona, jeśli zainicjujesz polecenie kopiowania, używając logowania uwierzytelniającego z odpowiednim dostępem do obu serwerów logicznych. Minimalny wymagany poziom dostępu to członkostwo w roli dbmanager w bazie danych master na obu serwerach logicznych. Na przykład możesz użyć identyfikatora logowania entra firmy Microsoft, który jest członkiem grupy wyznaczonej jako administrator serwera na obu serwerach logicznych.
W poniższych skryptach nazwa logowania do skopiowania jest loginname.
Najpierw połącz się z bazą danych master źródłowego serwera logicznego. Utwórz konto logowania i użytkownika w bazie danych master źródłowego serwera logicznego usługi Azure SQL Database.
--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
Połącz się ze źródłową bazą danych użytkownika. Następnie w źródłowej bazie użytkowników utwórz użytkownika i dodaj go do roli dbowner.
--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
Następnie znajdź identyfikator zabezpieczeń (SID) użytkownika loginname z bazy danych master źródłowego serwera logicznego.
--Step# 3
--Capture the SID of the user "loginname" from master database
SELECT [sid] FROM sysusers WHERE [name] = 'loginname';
Uruchom następny skrypt w bazie danych master nowego lub docelowego serwera logicznego. Najpierw utwórz login i użytkownika w bazie danych master docelowego serwera logicznego, dodając go do roli serwera dbmanager. Podaj <strong password>, a następnie zastąp <SID of loginname login on source server> identyfikatorem SID ze źródłowego serwera logicznego.
--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 = '<strong password>', 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
W bazie danych master docelowego serwera logicznego utwórz nową bazę danych. Zastąp new_database_name żądaną nazwą. Zastąp source_server_name i source_database_name nazwami źródła.
--Step# 5
--Execute the copy of database script from the destination logical server using the credentials created
CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;
Napiwek
Kopiowanie bazy danych z subskrypcji w innej dzierżawie platformy Azure jest obsługiwane tylko w przypadku używania T-SQL i loginu z uwierzytelnianiem SQL do logowania się do docelowego serwera logicznego. Tworzenie kopii bazy danych na logicznym serwerze w innym dzierżawcy Azure nie jest obsługiwane z użyciem uwierzytelniania Microsoft Entra dla usługi Azure SQL.
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 . Gdy kopiowanie jest w toku, kolumna state_descsys.databases widoku dla nowej bazy danych jest ustawiona na COPYINGwartość .
- Jeśli kopiowanie zakończy się niepowodzeniem, kolumna
state_descsys.databaseswidoku dla nowej bazy danych jest ustawiona naSUSPECTwartość . Wykonaj instrukcję DROP w nowej bazie danych i spróbuj ponownie później. - Jeśli kopiowanie zakończy się pomyślnie,
state_desckolumnasys.databaseswidoku dla nowej bazy danych jest ustawiona naONLINEwartość . 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 logicznym i/lub w innym regionie. Aby uzyskać więcej informacji, zobacz Odzyskiwanie bazy danych Azure SQL Database przy użyciu kopii zapasowych bazy danych.
Uprawnienia
Aby utworzyć kopię bazy danych, musisz mieć następujące role:
- Właściciel subskrypcji lub
- Rola współautora programu SQL Server lub
- Rola niestandardowa na źródłowym serwerze logicznym z następującymi uprawnieniami:
Microsoft.Sql/servers/databases/read-
Microsoft.Sql/servers/databases/writei
- Rola niestandardowa na docelowym serwerze logicznym z następującymi uprawnieniami:
Microsoft.Sql/servers/readMicrosoft.Sql/servers/databases/readMicrosoft.Sql/servers/databases/write
Aby anulować kopię bazy danych, musisz mieć następujące role:
- Właściciel subskrypcji lub
- Rola współautora programu SQL Server lub
- Rola niestandardowa w docelowej bazie danych z następującym uprawnieniem:
Microsoft.Sql/servers/databases/delete
Do zarządzania kopiowaniem bazy danych przy użyciu witryny Azure Portal potrzebne są również następujące uprawnienia:
Microsoft.Resources/subscriptions/resources/readMicrosoft.Resources/deployments/readMicrosoft.Resources/deployments/writeMicrosoft.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 operacjami SQL, potrzebne są następujące dodatkowe uprawnienia:
Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/readMicrosoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read
Rozwiązywanie problemów z identyfikatorami logowania
Gdy nowa baza danych działa online na docelowym serwerze logicznym, użyj instrukcji ALTER USER, aby mapować ponownie użytkowników z nowej bazy danych do logowania się na docelowym serwerze logicznym. Aby rozwiązać problemy z oddzielonych użytkownikami, zobacz Rozwiązywanie problemów z oddzielonych użytkowników. Zobacz również Konfigurowanie zabezpieczeń usługi Azure SQL Database i zarządzanie nimi w kontekście przywracania geograficznego lub przełączania awaryjnego.
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 na temat zarządzania użytkownikami i identyfikatorami logowania podczas kopiowania bazy danych na inny serwer logiczny, zobacz Configure and manage Azure SQL Database security for geo-restore or failover(Konfigurowanie zabezpieczeń usługi Azure SQL Database i zarządzanie nimi na potrzeby przywracania geograficznego lub trybu failover).
Błędy kopiowania bazy danych
Podczas kopiowania bazy danych w usłudze Azure SQL Database mogą wystąpić następujące błędy. Aby uzyskać więcej informacji, zobacz Kopiowanie transakcyjnie spójnej kopii bazy danych w usłudze 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. Porzuć 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. Porzuć docelową bazę danych i spróbuj ponownie później. |
| 40566 | 16 | Kopiowanie bazy danych nie powiodło się z powodu błędu wewnętrznego. Porzuć docelową bazę danych i spróbuj ponownie. |
| 40567 | 16 | Kopiowanie bazy danych nie powiodło się z powodu błędu wewnętrznego. Porzuć 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. Porzuć docelową bazę danych i spróbuj ponownie. |
| 40569 | 16 | Kopiowanie bazy danych nie powiodło się. Docelowa baza danych stała się niedostępna. Porzuć docelową bazę danych i spróbuj ponownie. |
| 40570 | 16 | Kopiowanie bazy danych nie powiodło się z powodu błędu wewnętrznego. Porzuć docelową bazę danych i spróbuj ponownie później. |
| 40571 | 16 | Kopiowanie bazy danych nie powiodło się z powodu błędu wewnętrznego. Porzuć docelową bazę danych i spróbuj ponownie później. |
Powiązana zawartość
- Autoryzowanie dostępu do bazy danych w usługach SQL Database, SQL Managed Instance i Azure Synapse Analytics
- Konfiguracja zabezpieczeń usługi Azure SQL Database i zarządzanie nimi pod kątem przywracania lub trybu failover obszaru geograficznego
- Eksportowanie do pliku BACPAC — usługi Azure SQL Database i Azure SQL Managed Instance