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 server of een andere server. U kunt een database kopiëren met Azure Portal, PowerShell, Azure CLI of T-SQL.

Overzicht

Een databasekopie is een transactioneel consistente momentopname van de brondatabase vanaf een bepaald tijdstip nadat de kopieeraanvraag is gestart. U kunt dezelfde server of een andere server selecteren voor de kopie. U kunt er ook voor kiezen om de back-upredundantie en rekenkracht van de brondatabase te behouden of een andere redundantie en/of rekenkracht voor back-upopslag binnen dezelfde servicelaag te gebruiken. Nadat het kopiëren is voltooid, wordt deze een volledig functionele, onafhankelijke database. De aanmeldingen, gebruikers en machtigingen in de gekopieerde database worden onafhankelijk van de brondatabase beheerd. De kopie wordt gemaakt met behulp van de geo-replicatietechnologie. Zodra de replica-seeding is voltooid, wordt de geo-replicatiekoppeling automatisch beëindigd. Alle vereisten voor het gebruik van geo-replicatie zijn van toepassing op de kopieerbewerking van de database. Zie Overzicht van actieve geo-replicatie voor meer informatie.

Database kopiëren voor Azure SQL Hyperscale

Voor Azure SQL Hyperscale bepaalt de doeldatabase of de kopie een snelle kopie of een grootte van de gegevenskopie is.

Snel kopiëren: wanneer het kopiëren wordt uitgevoerd in dezelfde regio als de bron, wordt de kopie gemaakt op basis van de momentopnamen van blobs. Deze kopie is een snelle bewerking, ongeacht de grootte van de database.

Grootte van gegevenskopie: wanneer de doeldatabase zich in een andere regio dan de bron bevindt of als de redundantie van de back-upopslag van de database (lokaal, zonegebonden, geo) van het doel afwijkt van de brondatabase, is de kopieerbewerking een grootte van de gegevensbewerking. De kopieertijd is niet direct evenredig met de grootte, omdat de blobs van de paginaserver parallel worden gekopieerd.

Aanmeldingen in de databasekopie

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

Wanneer u een database naar een andere server kopieert, wordt de beveiligingsprincipal die de kopieerbewerking op de doelserver heeft geïnitieerd, de eigenaar van de nieuwe database.

Ongeacht de doelserver worden alle database-gebruikers, hun machtigingen en hun beveiligings-id's (SID's) gekopieerd naar de kopie van de database. Het gebruik van ingesloten databasegebruikers voor gegevenstoegang zorgt ervoor dat de gekopieerde database dezelfde gebruikersreferenties heeft, zodat u na voltooiing van de kopie onmiddellijk toegang hebt tot de database met dezelfde referenties.

Als u aanmeldingen op serverniveau gebruikt voor gegevenstoegang en de database naar een andere server kopieert, werkt de op aanmelding gebaseerde toegang mogelijk niet. Dit kan gebeuren omdat de aanmeldingen niet bestaan op de doelserver of omdat hun wachtwoorden en beveiligings-id's (SID's) verschillen. Voor meer informatie over het beheren van aanmeldingen wanneer u een database naar een andere server kopieert, raadpleegt u De beveiliging van Azure SQL Database beheren na herstel na een noodgeval. Nadat de kopieerbewerking naar een andere server is geslaagd en voordat andere gebruikers opnieuw worden toegewezen, kan alleen de aanmelding die is gekoppeld aan de database-eigenaar of de serverbeheerder zich aanmelden bij de gekopieerde database. Zie Aanmeldingen oplossen als u aanmeldingen wilt oplossen en gegevenstoegang tot stand wilt brengen nadat de kopieerbewerking is voltooid.

Kopiëren met Azure Portal

Als u een database wilt kopiëren met behulp van de Azure Portal, opent u de pagina voor de database en kiest u Kopiëren om de pagina Maken SQL Database - Database kopiëren te openen. Vul de waarden in voor de 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.

Kopiëren met PowerShell of de Azure CLI

Gebruik de volgende voorbeelden om een database te kopiëren.

Gebruik voor PowerShell de cmdlet New-AzSqlDatabaseCopy .

Belangrijk

De PowerShell Azure Resource Manager -module (RM) wordt nog steeds ondersteund door Azure SQL Database, maar alle toekomstige ontwikkeling is voor de Az.Sql-module. De AzureRM-module blijft tot ten minste december 2020 bugfixes ontvangen. De argumenten voor de opdrachten in de Az-module en in de AzureRm-modules zijn vrijwel identiek. Zie Introductie van de nieuwe Az-module van Azure PowerShell voor meer informatie over de compatibiliteit van de argumenten.

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

Het kopiëren van de database is een asynchrone bewerking, maar de doeldatabase wordt onmiddellijk gemaakt nadat de aanvraag is geaccepteerd. Als u de kopieerbewerking wilt annuleren terwijl deze nog wordt uitgevoerd, verwijdert u de doeldatabase met behulp van de cmdlet Remove-AzSqlDatabase .

Zie Een database naar een nieuwe server kopiëren voor een volledig PowerShell-voorbeeldscript.

Kopiëren met Transact-SQL

Meld u aan bij de hoofddatabase met de aanmelding van de serverbeheerder of de aanmelding waarmee de database is gemaakt die u wilt kopiëren. Het kopiëren van de database slaagt alleen als aanmeldingen die niet de serverbeheerder zijn, lid zijn van de dbmanager rol. Zie Aanmeldingen beheren voor meer informatie over aanmeldingen en het maken van verbinding met de server.

Begin met het kopiëren van de brondatabase met de CREATE DATABASE ... ALS KOPIE VAN instructie . De T-SQL-instructie blijft actief totdat de kopieerbewerking van de database is voltooid.

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.

Het kopiëren van een database met T-SQL wordt niet ondersteund wanneer u verbinding maakt met de doelserver via een privé-eindpunt. Als een privé-eindpunt is geconfigureerd, maar openbare netwerktoegang is toegestaan, wordt databasekopie ondersteund wanneer u bent verbonden met de doelserver vanaf een openbaar IP-adres. Zodra de kopieerbewerking is voltooid, kan de openbare toegang worden geweigerd.

Belangrijk

Redundantie voor back-upopslag selecteren bij het gebruik van T-SQL CREATE DATABASE ... AS COPY OF opdracht wordt nog niet ondersteund.

Kopiëren naar dezelfde server

Meld u aan bij de hoofddatabase met de aanmelding van de serverbeheerder of de aanmelding waarmee de database is gemaakt die u wilt kopiëren. Het kopiëren van de database slaagt alleen als aanmeldingen die niet de serverbeheerder zijn lid zijn van de dbmanager rol.

Met deze opdracht kopieert u Database1 naar een nieuwe database met de naam Database2 op dezelfde server. Afhankelijk van de grootte van de database kan het kopiëren enige tijd duren.

-- 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 hoofddatabase met de aanmelding van de serverbeheerder of de aanmelding waarmee de database is gemaakt die u wilt kopiëren. Het kopiëren van de database slaagt alleen als aanmeldingen die niet de serverbeheerder zijn lid zijn van de dbmanager rol.

Met deze opdracht wordt Database1 gekopieerd naar een nieuwe database met de naam Database2 in een elastische pool met de naam pool1. Afhankelijk van de grootte van de database kan het kopiëren enige tijd duren.

Database1 kan een individuele of pooldatabase zijn. Kopiëren tussen verschillende laaggroepen wordt ondersteund, maar sommige kopieën tussen lagen slagen niet. U kunt bijvoorbeeld één 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 server

Meld u aan bij de hoofddatabase van de 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 bronserver. De aanmelding op de doelserver moet ook lid zijn van de dbmanager rol of de aanmelding van de serverbeheerder zijn.

Met deze opdracht wordt Database1 op server1 gekopieerd naar een nieuwe database met de naam Database2 op server2. Afhankelijk van de grootte van de database kan het kopiëren enige tijd duren.

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

Belangrijk

De firewalls van beide servers moeten worden geconfigureerd om binnenkomende verbinding toe te staan vanaf het IP-adres van de client die de T-SQL CREATE DATABASE uitgeeft... ALS KOPIE VAN opdracht. Voer uit om het bron-IP-adres van de huidige verbinding te bepalen SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Op dezelfde manier kopieert de onderstaande opdracht Database1 op server1 naar een nieuwe database met de naam Database2 binnen een elastische pool met de naam pool2, op server2.

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

Kopiëren naar een ander abonnement

U kunt de stappen in de sectie Een SQL Database kopiëren naar een andere server gebruiken om uw database te kopiëren naar een 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 aanmelding een lid zijn van de dbmanager rol of een serverbeheerder, op zowel de bron- als de doelserver.

Tip

Bij het kopiëren van databases in dezelfde Azure Active Directory-tenant wordt autorisatie op de bron- en doelservers vereenvoudigd als u de kopieeropdracht start met behulp van een AAD-verificatieaanmelding met voldoende toegang op beide servers. Het minimaal vereiste toegangsniveau is lidmaatschap van de dbmanager rol in de hoofddatabase op beide servers. U kunt bijvoorbeeld een AAD-aanmelding gebruiken die lid is van een AAD-groep die is aangewezen als serverbeheerder op beide servers.

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

Notitie

De Azure Portal, PowerShell en De Azure CLI bieden geen ondersteuning voor het kopiëren van databases naar een ander abonnement.

Tip

Database kopiëren met behulp van T-SQL ondersteunt het kopiëren van een database vanuit een abonnement in een andere Azure-tenant. Dit wordt alleen ondersteund wanneer u een SQL-verificatieaanmelding gebruikt om u aan te melden bij de doelserver. Het maken van een databasekopie op een logische server in een andere Azure-tenant wordt niet ondersteund wanneer Azure Active Directory-verificatie actief (ingeschakeld) is op de logische bron- of doelserver.

De voortgang van de kopieerbewerking bewaken

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

  • Als het kopiëren mislukt, wordt de kolom state_desc van de weergave sys.databases voor de nieuwe database ingesteld op VERDACHT. Voer de DROP-instructie uit op de nieuwe database en probeer het later opnieuw.
  • Als het kopiëren is geslaagd, wordt de kolom state_desc van de weergave sys.databases 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 instructie DROP DATABASE uit op de nieuwe database.

Belangrijk

Als u een kopie wilt maken met een aanzienlijk kleinere servicedoelstelling dan de bron, heeft de doeldatabase mogelijk niet voldoende resources om het seedingproces te voltooien en kan dit ertoe leiden dat de kopieerbewerking mislukt. Gebruik in dit scenario een aanvraag voor geo-herstel om een kopie te maken in een andere server en/of een andere regio. Zie Een Azure SQL database herstellen met behulp van databaseback-ups voor meer informatie.

Azure RBAC-rollen en -machtigingen voor het beheren van databasekopie

Als u een databasekopie wilt maken, moet u de volgende rollen hebben

  • Abonnementseigenaar of

  • SQL Server rol inzender of

  • Aangepaste rol voor de bron- en doeldatabases met de volgende machtiging:

    Microsoft. SQL/servers/databases/lees-Microsoft. SQL/servers/databases/schrijven

Als u een databasekopie wilt annuleren, moet u de volgende rollen hebben

  • Abonnementseigenaar of

  • SQL Server rol inzender of

  • Aangepaste rol voor de bron- en doeldatabases met de volgende machtiging:

    Microsoft. SQL/servers/databases/lees-Microsoft. SQL/servers/databases/schrijven

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

Microsoft. Resources/abonnementen/resources/lees-Microsoft. Resources/abonnementen/resources/schrijf-Microsoft. Resources/implementaties/Microsoft lezen. Resources/implementaties/schrijf Microsoft. Resources/implementaties/bewerkingsstatussen/lezen

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

Microsoft. Resources/abonnementen/resourcegroepen/implementaties/bewerkingen/Microsoft lezen. Resources/abonnementen/resourcegroepen/implementaties/operationstatuses/lezen

Aanmeldingen oplossen

Nadat de nieuwe database online is op de doelserver, gebruikt u de instructie ALTER USER om de gebruikers van de nieuwe database opnieuw toe te kennen aan aanmeldingen op de doelserver. Zie Problemen met zwevende gebruikers oplossen om zwevende gebruikers op te lossen. Zie ook De beveiliging van Azure SQL Database beheren na herstel na een noodgeval.

Alle gebruikers in de nieuwe database behouden de machtigingen die ze hadden in de brondatabase. De gebruiker die de databasekopie heeft geïnitieerd, wordt de database-eigenaar van de nieuwe database. Nadat het kopiëren is voltooid en voordat andere gebruikers opnieuw zijn toegewezen, kan alleen de database-eigenaar zich aanmelden bij de nieuwe database.

Zie How to manage Azure SQL Database security after disaster recovery (Beveiliging van Azure SQL database beheren na herstel na noodgeval) voor meer informatie over het beheren van gebruikers en aanmeldingen wanneer u een database naar een andere server kopieert.

Fouten bij het kopiëren van de database

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

Foutcode Ernst Beschrijving
40635 16 Client met IP-adres %.*ls is tijdelijk uitgeschakeld.
40637 16 Databasekopie maken 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 één gelijktijdige databasekopie uit 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.

Volgende stappen