Een transactioneel consistente kopie van een database kopiëren in Azure SQL Database

van toepassing op:Azure SQL Database-

Azure SQL Database biedt verschillende methoden voor het maken van een kopie van een bestaande -database op dezelfde logische server van Azure SQL Database of een andere logische server. U kunt een database kopiëren met behulp van Azure Portal, PowerShell, Azure CLI of Transact-SQL.

Notitie

Microsoft Entra ID voorheen Azure Active Directory (Azure AD) werd genoemd.

Overzicht

Een databasekopie is een transactioneel consistente momentopname van de brondatabase op het moment waarop de kopieeraanvraag wordt gestart. U kunt dezelfde logische server of een andere logische server voor de kopie selecteren. U kunt er ook voor kiezen om de back-upopslagredundantie en rekenkrachtgrootte van de brondatabase te behouden, of een andere back-upopslagredundantie en/of rekenkrachtgrootte binnen dezelfde servicelaag te gebruiken. Het is ook mogelijk om een database in de Standard-servicelaag te kopiëren naar de laag Standard of Algemeen gebruik en een database in de Premium-servicelaag naar de laag Premium of Bedrijfskritiek.

Nadat het kopiëren is voltooid, is de nieuwe database een volledig functionele en onafhankelijke database naar de brondatabase. De aanmeldingen, gebruikers en machtigingen in de gekopieerde database worden onafhankelijk van de brondatabase beheerd. De kopie wordt gemaakt met behulp van geo-replicatietechnologie. Zodra het seeden van replica's is voltooid, wordt de geo-replicatiekoppeling automatisch beëindigd. Alle vereisten voor het gebruik van geo-replicatie zijn van toepassing op de databasekopiebewerking. Zie Overzicht van actieve geo-replicatie voor meer informatie.

Notitie

De Azure Portal, PowerShell en de Azure CLI bieden geen ondersteuning voor databasekopie naar een ander abonnement.

Databasekopie voor Hyperscale-databases

Voor databases in de Hyperscale-servicelaag bepaalt de doeldatabase of de kopie een snelle kopie of een tragere kopie op basis van gegevensgrootte is:

  • Snelle kopie: Wanneer de kopie in hetzelfde gebied als de bron wordt gemaakt, wordt de kopie gemaakt uit snapshots van blobs; deze kopie is een snelle operatie.

  • Kopie op basis van gegevensgrootte: Wanneer de doeldatabase zich in een andere regio bevindt dan de brondatabase, of als de redundantie van de databaseback-upopslag (lokaal, zonaal, geo) van de doeldatabase verschilt van de brondatabase, is de kopieerbewerking een langzamere bewerking op basis van gegevensgrootte. De kopieertijd is niet direct evenredig met de grootte omdat de data van de pageserver parallel wordt gekopieerd.

Aanmeldingen in de databasekopie

Wanneer u een database naar dezelfde logische server kopieert, kunnen dezelfde aanmeldingen op beide databases worden gebruikt. De beveiligingsprincipaal die u gebruikt om de database te kopiëren, wordt de eigenaar van de database in de nieuwe database.

Wanneer u een database naar een andere logische server kopieert, wordt de beveiligingsprincipaal die de kopieerbewerking op de logische doelserver heeft gestart, de eigenaar van de nieuwe database.

Ongeacht de doelserver worden alle databasegebruikers, machtigingen en beveiligings-id's (SID's) gekopieerd naar de databasekopie. Als u ingesloten databasegebruikers gebruikt voor gegevenstoegang, zorgt u ervoor dat de gekopieerde database dezelfde gebruikersreferenties heeft, zodat nadat de kopie is voltooid, u deze onmiddellijk met dezelfde referenties kunt openen.

Als u aanmeldingen op serverniveau gebruikt voor gegevenstoegang en de database naar een andere server kopieert, werkt de toegang op basis van aanmelding mogelijk niet. Dit kan gebeuren omdat de aanmeldingen niet bestaan op de logische doelserver of omdat deze wachtwoorden en beveiligings-id's (SID's) verschillend zijn. Zie Azure SQL Database-beveiliging configureren en beheren voor geo-herstel of failovervoor meer informatie over het beheren van aanmeldingen wanneer u een database naar een andere server kopieert. Nadat de kopieerbewerking naar een andere logische server succesvol is voltooid en voordat andere gebruikers opnieuw worden toegewezen, kan alleen de aanmelding gekoppeld aan de database-eigenaar of de serverbeheerder zich aanmelden bij de gekopieerde database. Zie Aanmeldingen oplossenom aanmeldingen op te lossen en gegevenstoegang tot stand te brengen nadat de kopieerbewerking is voltooid.

Een database kopiëren

U kunt een database kopiëren met behulp van PowerShell, de Azure CLI en Transact-SQL (T-SQL).

Als u een database wilt kopiëren met behulp van Azure Portal, opent u de pagina voor uw database en kiest u vervolgens Kopiëren om de pagina SQL Database maken - Database kopiëren - Database kopiëren te openen. Vul de waarden in voor de logische doelserver waarnaar u de database wilt kopiëren.

Schermopname van Azure Portal met de optie Database kopiëren gemarkeerd op de overzichtspagina van de database.

Een database kopiëren met Transact-SQL

Meld u aan bij de master-database met de aanmeldgegevens van de serverbeheerder of de aanmelding waarmee u de database hebt gemaakt die u wilt kopiëren. Opdat het kopiëren van de database slaagt, moeten gebruikersaccounts die niet de serverbeheerder zijn, lid zijn van de dbmanager rol. Zie Databasetoegang autoriseren voor meer informatie over aanmeldingen en verbinding maken met de logische server.

Begin met het kopiëren van de oorspronkelijke database met de CREATE DATABASE ... AS COPY OF instructie. De T-SQL-instructie wordt uitgevoerd totdat de databasekopiebewerking is voltooid.

Deze sectie bevat Transact-SQL opdrachten voor de volgende bewerkingen:

Notitie

Als u de T-SQL-instructie beëindigt, wordt de kopieerbewerking van de database niet beëindigd. Als u de bewerking wilt beëindigen, moet u de doeldatabase verwijderen.

Kopiëren naar dezelfde logische server

Meld u aan bij de master-database met de aanmeldgegevens van de serverbeheerder of de aanmelding waarmee u de database hebt gemaakt die u wilt kopiëren. Voor het succesvol kopiëren van de database moeten logins die geen serverbeheerder zijn lid zijn van de dbmanager- rol.

Met deze opdracht kopieert u Database1 naar een nieuwe database met de naam Database2 op dezelfde logische server. Afhankelijk van de grootte van uw database kan het enige tijd duren voordat de kopieerbewerking is voltooid.

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

Kopiëren naar een elastische pool

Meld u aan bij de master-database met de aanmeldgegevens van de serverbeheerder of de aanmelding waarmee u de database hebt gemaakt die u wilt kopiëren. Voor het succesvol kopiëren van de database moeten logins die geen serverbeheerder zijn lid zijn van de dbmanager- rol.

Met deze opdracht kopieert u Database1 naar een nieuwe database met de naam Database2 in een elastische pool met de naam pool1. Afhankelijk van de grootte van uw database kan het enige tijd duren voordat de kopieerbewerking is voltooid.

Database1 kan een individuele of pooldatabase zijn. Kopiëren tussen verschillende laaggroepen wordt ondersteund, maar sommige cross-tier kopieën mislukken. U kunt, bijvoorbeeld, een individuele of elastische standaarddatabase kopiëren naar een Algemeen pool, maar u kunt een standaard elastische database niet kopiëren naar een Premium-pool.

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

Kopiëren naar een andere logische server

Maak verbinding met de master-database van de logische doelserver waar de nieuwe database moet worden gemaakt. Gebruik een aanmelding met dezelfde naam en hetzelfde wachtwoord als de database-eigenaar van de brondatabase op de logische bronserver. De login op de logische doelserver moet ook lid zijn van de dbmanager rol, of de serverbeheerder login zijn.

Met deze opdracht kopieert u Database1 op server1 naar een nieuwe database met de naam Database2 op server2. Afhankelijk van de grootte van uw database kan het enige tijd duren voordat de kopieerbewerking is voltooid.

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

Belangrijk

Beide logische serverfirewalls moeten worden geconfigureerd om binnenkomende verbinding vanaf het IP-adres van de client die de T-SQL-opdracht CREATE DATABASE ... AS COPY OF uitgeeft toe te staan. Als u het bron-IP-adres van de huidige verbinding wilt bepalen, voert u het volgende uit: SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Notitie

Databasekopie met T-SQL wordt niet ondersteund bij het maken van verbinding met de logische doelserver via een privé-eindpunt. Als een privé-eindpunt is geconfigureerd, maar openbare netwerktoegang is toegestaan, wordt databasekopie ondersteund wanneer deze is verbonden met de logische doelserver vanaf een openbaar IP-adres met behulp van SQL-verificatie. Zodra de kopieerbewerking is voltooid, kan openbare toegang worden geweigerd.

Op dezelfde manier kopieert de volgende opdracht Database1 op server1 naar een nieuwe database met de naam Database2 in een elastische pool met de naam pool2, op 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 ) );

Kopiëren naar een ander abonnement

U kunt de stappen in het Een SQL Database kopiëren naar een andere logische server sectie gebruiken om uw database te kopiëren naar een logische server in een ander abonnement met behulp van T-SQL. Zorg ervoor dat u een aanmelding gebruikt met dezelfde naam en hetzelfde wachtwoord als de database-eigenaar van de brondatabase. Bovendien moet de login lid zijn van de dbmanager rol of een serverbeheerder, op zowel de bron- als de doellogische server.

Tip

Wanneer u databases kopieert in dezelfde Microsoft Entra ID-tenant, wordt autorisatie op de logische bron- en doelserver vereenvoudigd als u de kopieeropdracht start met behulp van een verificatieaanmelding met voldoende toegang op beide logische servers. Het minimale vereiste toegangsniveau is lidmaatschap van de dbmanager rol in de master-database op beide logische servers. U kunt bijvoorbeeld een Microsoft Entra ID-aanmelding gebruiken die lid is van een groep die is aangewezen als de serverbeheerder op beide logische servers.

In de volgende scripts is de aanmeldingsnaam die gekopieerd moet worden loginname.

Maak eerst verbinding met de master-database van de logische bronserver. Maak een aanmelding en gebruiker in de master-database van de logische bronserver van Azure SQL Database. Vervang <password> door een sterk wachtwoord.

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

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

Maak verbinding met de brongebruikersdatabase. Maak vervolgens in de brongebruiker database de gebruiker in de brondatabase aan en voeg deze toe aan de dbowner-rol in de brondatabase.

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

Zoek vervolgens de beveiligings-id (SID) van de gebruiker loginname uit de master-database van de logische bronserver.

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

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

Voer het volgende script uit op de master-database van de nieuwe of doellogische server. Maak eerst een aanmelding en gebruiker in de master-database van de logische doelserver en voeg deze toe aan de dbmanager-serverfunctie. Vervang <password> door een sterk wachtwoord en vervang <SID of loginname login on source server> door de SID van de bronlogische server.

--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 = '<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

Maak in de master database van de logische doelserver de nieuwe database. Vervang new_database_name door de gewenste naam. Vervang source_server_name en source_database_name door de namen van de bron.

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

Tip

Het kopiëren van een database vanuit een abonnement in een andere Azure-tenant wordt alleen ondersteund wanneer u T-SQL en een SQL-verificatieaanmelding gebruikt om u aan te melden bij de logische doelserver. Het maken van een databasekopie op een logische server in een andere Azure-tenant wordt niet ondersteund met Microsoft Entra-verificatie voor Azure SQL.

Voortgang van de kopieerbewerking controleren

Bewaak het kopieerproces door een query uit te voeren op de sys.databases, sys.dm_database_copiesen sys.dm_operation_status weergaven. Terwijl het kopiëren wordt uitgevoerd, wordt de kolom state_desc van de sys.databases weergave voor de nieuwe database ingesteld op COPYING.

  • Als het kopiëren mislukt, wordt de kolom state_desc van de sys.databases weergave voor de nieuwe database ingesteld op SUSPECT. Voer de DROP-instructie uit op de nieuwe database en probeer het later opnieuw.
  • Als het kopiëren slaagt, wordt de kolom state_desc van de sys.databases weergave voor de nieuwe database ingesteld op ONLINE. Het kopiëren is voltooid en de nieuwe database is een gewone database die onafhankelijk van de brondatabase kan worden gewijzigd.

Notitie

Als u besluit het kopiëren te annuleren terwijl het wordt uitgevoerd, voert u de DROP DATABASE-instructie uit voor de nieuwe database.

Belangrijk

Als u een kopie wilt maken met een aanzienlijk kleinere servicedoelstelling dan de bron, beschikt de doeldatabase mogelijk niet over voldoende resources om het seedingproces te voltooien en kan de kopieerbewerking mislukken. In dit scenario gebruikt u een aanvraag voor geo-herstel om een kopie te maken in een andere logische server en/of een andere regio. Zie Een Azure SQL Database herstellen met behulp van databaseback-upsvoor meer informatie.

Machtigingen

Om een databasekopie te maken, moet je lid zijn van een van de volgende functies:

  • Abonnementseigenaar of
  • Rol SQL Server-inzender of
  • Aangepaste rol op de logische bronserver met de volgende machtigingen:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write en
  • Aangepaste rol op de logische doelserver met de volgende machtigingen:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

Om een databasekopie te annuleren, moet je lid zijn van een van de volgende functies:

  • Abonnementseigenaar of
  • Rol SQL Server-inzender of
  • Aangepaste rol in de doeldatabase met de volgende machtiging:
    • Microsoft.Sql/servers/databases/delete

Als u databasekopie wilt beheren met behulp van Azure Portal, hebt u ook de volgende machtigingen nodig:

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

Als u de bewerkingen onder implementaties in de resourcegroep in de portal wilt zien, hebt u deze aanvullende machtigingen nodig voor bewerkingen tussen meerdere resourceproviders, waaronder SQL-bewerkingen:

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

Aanmeldingen oplossen

Nadat de nieuwe database online is op de logische doelserver, gebruikt u de instructie ALTER USER om de gebruikers van de nieuwe database opnieuw toe te kennen aanmeldingen op de logische doelserver. Zie Problemen met zwevende gebruikers oplossenom zwevende gebruikers op te lossen. Zie ook Configureer en beheer Azure SQL Database-beveiliging voor geo-herstel of failover.

Alle gebruikers in de nieuwe database behouden de machtigingen die ze in de brondatabase hadden. De gebruiker die de databasekopie heeft gestart, wordt de eigenaar van de nieuwe database. Nadat het kopiëren is geslaagd en voordat andere gebruikers worden herverdeeld, kan alleen de eigenaar van de database zich aanmelden bij de nieuwe database.

Zie Azure SQL Database-beveiliging configureren en beheren voor geo-herstel of failover-voor meer informatie over het beheren van gebruikers en aanmeldingen wanneer u een database naar een andere logische server kopieert.

Netwerkbeveiligingsperimeter (voorbeeld)

Een netwerkbeveiligingsperimeter (preview) beheert inkomend en uitgaand netwerkverkeer voor een logische server. Databasekopie verplaatst data tussen logische servers via interne, platformbeheerde connectiviteit, waardoor een perimeter dat verkeer beoordeelt en de kopie kan blokkeren.

Hoe databasekopieën netwerktoegang gebruiken

Databasekopie gebruikt geo-replicatietechnologie om de doeldatabase te seeden, waarna de link wordt verwijderd zodra de kopie klaar is. Wanneer een van beide logische servers tot een perimeter behoort, is die server-tot-server-connectiviteit onderworpen aan de toegangsregels van die perimeter.

Belangrijk

De perimeter evalueert de toegangsregels één keer, wanneer het kopieerverzoek begint. Het evalueert ze niet opnieuw terwijl de kopieertaak loopt of als de kopieertaak eindigt. Een regelwijziging of een associatiewijziging die tijdens de kopie wordt aangebracht, stopt het niet, en de kopie loopt tot voltooiing.

Ondersteunde configuraties

Databasekopie werkt zowel in overgangs- als in de geforceerde modus. In de overgangsmodus registreert de perimeter het verkeer zonder het te blokkeren, dus een kopie slaagt zelfs als je geen regels configureert. Configureer de regels toch, zodat kopieën blijven werken nadat je naar de geforceerde modus bent overgeschakeld.

In de geforceerde modus hangen de regels die je nodig hebt af van de topologie:

Topologie kopiëren Toegangsregels zijn vereist
Het doel bevindt zich op dezelfde logische server als de bron None.
Beide logische servers bevinden zich binnen dezelfde perimeter None. Toegang tussen resources binnen dezelfde perimeter is altijd toegestaan.
De logische servers bevinden zich in verschillende perimeters Een uitgaande regel op de bronserver en een inkomende regel op de doelserver.
Alleen de bronserver bevindt zich binnen een perimeternetwerk Een uitgaande regel op de bronserver.
Alleen de doel-server bevindt zich in een perimeter Een inkomende regel op de doelserver.

Databasekopie vereist geen beheerde identiteit.

Toegangsregels voor een databasekopie configureren

De volgende stappen zijn een voorbeeld. Ze gaan ervan uit dat elke logische server zich in zijn eigen perimeter bevindt, en dat je de associatie van elke server na een testkopie op de afgedwongen modus zet. Als beide servers binnen dezelfde perimeter staan, heb je geen toegangsregels nodig.

  1. Koppel elke logische server aan zijn beveiligingsgrens. Een nieuw gekoppelde server start in overgangsmodus.
  2. Voeg op het profiel dat aan de bronserver is gekoppeld, een uitgaande toegangsregel toe. Stel het bestemmingstype in op FQDN en gebruik de volledig gekwalificeerde domeinnaam van de doelserver, zoals targetserver.database.windows.net.
  3. Voeg op het profiel dat aan de doelserver is gekoppeld een inbound access-regel toe. Stel Source type in op een van deze waarden:
    • Abonnement, en gebruik de abonnements-ID van de bronserver.
    • IP-adresbereiken en gebruik de IP-adresbereiken van de bronserver.
    • Servicetags, en gebruik Sql of Sql.<region>, waarbij <region> de Azure-regio van de bronserver is.
  4. Laat de servers in overgangsmodus staan en voer een databasekopie uit. Bekijk de diagnostische logboeken van de netwerkbeveiligingsperimeter om te bevestigen dat er geen onverwachte weigeringen zijn.
  5. Schakel de associatie van elke server pas over naar de geforceerde modus nadat de kopie is geslaagd en de logs schoon zijn.

Beperkingen en gedragsverschillen

  • Wanneer een logische server aan een perimeter behoort, in transitie- of afgedwongen modus, is Transact-SQL geen ondersteunde manier om een database naar een andere logische server te kopiëren. Je kunt Transact-SQL nog steeds gebruiken om een database binnen dezelfde logische server te kopiëren. Voor cross-server kopieën gebruik je het Azure-portaal, Azure CLI of PowerShell.

Fouten wanneer een beveiligingsgrens een kopie blokkeert

Foutcode Message
48001 De operatie kon niet worden voltooid omdat de bijbehorende Network Security Perimeter inkomende toegang van de 'bron' naar de 'doel'-server weigerde.
48002 De operatie kon niet worden voltooid omdat de bijbehorende Network Security Perimeter uitgaande toegang van de 'source'-server naar het 'target' weigerde.

De placeholders in deze berichten worden vervangen door logische servernamen. Voor 48001 bekijk de inkomende regels op het profiel dat aan de doelserver is gekoppeld. Voor 48002 bekijk de uitgaande regels op het profiel dat aan de bronserver is gekoppeld.

Kopieerfouten in de database

De volgende fouten kunnen optreden tijdens het kopiëren van een database in Azure SQL Database. Zie Een transactioneel consistente kopie van een database kopiëren in Azure SQL Databasevoor meer informatie.

Foutcode Ernst Beschrijving
40635 16 Client met IP-adres '%.*ls' is tijdelijk uitgeschakeld.
40637 16 Het maken van een databasekopie is momenteel uitgeschakeld.
40561 16 Het kopiëren van de database is mislukt. De bron- of doeldatabase bestaat niet.
40562 16 Het kopiëren van de database is mislukt. De brondatabase is verwijderd.
40563 16 Het kopiëren van de database is mislukt. De doeldatabase is verwijderd.
40564 16 Het kopiëren van de database is mislukt vanwege een interne fout. Verwijder de doeldatabase en probeer het opnieuw.
40565 16 Het kopiëren van de database is mislukt. Niet meer dan 1 gelijktijdige databasekopie van dezelfde bron is toegestaan. Verwijder de doeldatabase en probeer het later opnieuw.
40566 16 Het kopiëren van de database is mislukt vanwege een interne fout. Verwijder de doeldatabase en probeer het opnieuw.
40567 16 Het kopiëren van de database is mislukt vanwege een interne fout. Verwijder de doeldatabase en probeer het opnieuw.
40568 16 Het kopiëren van de database is mislukt. De brondatabase is niet meer beschikbaar. Verwijder de doeldatabase en probeer het opnieuw.
40569 16 Het kopiëren van de database is mislukt. De doeldatabase is niet meer beschikbaar. Verwijder de doeldatabase en probeer het opnieuw.
40570 16 Het kopiëren van de database is mislukt vanwege een interne fout. Verwijder de doeldatabase en probeer het later opnieuw.
40571 16 Het kopiëren van de database is mislukt vanwege een interne fout. Verwijder de doeldatabase en probeer het later opnieuw.