Wie man SQL Azure DBs in VSTS kloniert – Die databaseen 'A' im server 'sql01' und 'B' im server 'sql01' befinden sich bereits in einer Replikationsrelation

Ich versuche, meinen Release-process in VSTS zu konfigurieren, um meine Live-database auf meine Staging-Umgebung zu klonen, bevor du die Buff zum Staging einsetzt. Führende Richtlinien hier …

http://community.idera.com/blog/b/community_blog/posts/how-to-make-a-kopy-of-a-database-on-windows-azure-sql-database

und hier…

https://alexandrebrisebois.wordpress.com/2013/02/07/creating-a-staging-database-instanz-von-Anzeige-instanz-on-windows-azure-sql-database/

Ich habe es weitgehend funktioniert, obwohl ich den folgenden Fehler bekomme, wenn ich den Befehl ausführe …

CREATE DATABASE [Staging] AS COPY OF [Operational] 

Die databaseen 'Operational' im server 'sql01' und 'Staging' im server 'sql01' befinden sich bereits in einer Replikationsrelation.

Dies ist vorangegangen durch …

 DROP DATABASE IF EXISTS [Staging] 

Ich kann den Build-server konfigurieren, um fortzufahren, aber ich bekomme immer noch böse gelbe Warnungen. Ich bin auf der search, um entweder in irgendeiner Weise als Workaround zu unterdrücken oder zu tun, was notwendig ist, um den Fehler zu stoppen, um an erster Stelle zu kommen. Das Endergebnis ist wie gewünscht, die SQL-database wird erfolgreich kopiert.

Es fühlt sich an wie es irgendeine andere Aufräumung gibt, die ich vorher vorher tun muss, als einfach die ursprüngliche database zu fallen (wenn es existiert!)

Nach dem Schritt oben mache ich das dann, was den Release-process dazu zwingt, zu warten, bis die database fertig ist …

 DECLARE @COPY_DATA int SET @COPY_DATA = SELECT COUNT(*) FROM sys.dm_database_copies WHILE (@COPY_DATA > 0) BEGIN WAITFOR DELAY '00:00:10' SET @COPY_DATA = SELECT COUNT(*) FROM sys.dm_database_copies END 

… was kann ein bisschen dauern Das schließt überhaupt keine Fehler aus.

Um meine Leiden zusammenzubringen, ist es mir in der time unfähig, die Vollendung in jedem Stadium konsequent zu gewährleisten, was zu falschen Fehlern führt. Manchmal wird das DROP nicht beenden. Wenn ich es überprüfe, ist die Existenz im Meister dann ist es weg, aber es wird fallen, weil es noch da ist.


Für jene, die später lesen, was folgt, ist die Lösung, mit der ich am Ende war, war das zuverlässigste.

HINWEISE – Powershell ist zuverlässiger als SqlCommand – Azure's API und die zugrunde liegende database bekommen manchmal eine Synchronisierung für eine Weile, die zu einem widersprüchlichen Zustand zwischen den beiden führt

Um meine Produktion zur Inszenierung zu klonen, habe ich folgendes gemacht …

Schritt 1: Azure Powershell Aufgabe (Clear Staging)

 Remove-AzureRmSqlDatabase -ResourceGroupName "Production" -serverName "sql01" -DatabaseName "Staging" -ErrorAction SilentlyContinue 

Schritt 2: Azure SQL Task (Drop Database) – Nur um sicher zu sein!

 DROP DATABASE IF EXISTS [Staging] 

Schritt 3: Azurblaue Powershell-Aufgabe (Wiederherstellung der Staging von Live)

 New-AzureRmSqlDatabaseCopy -ResourceGroupName "Production" -serverName "sql01" -DatabaseName "Operational" -CopyResourceGroupName "Production" -CopyserverName "sql01" -CopyDatabaseName "Staging" 

Schritt 4: Azure SQL Task (Await Sync) – Nur für den Fall!

 DECLARE @COPY_DATA int SET @COPY_DATA = SELECT COUNT(*) FROM sys.dm_database_copies WHILE (@COPY_DATA > 0) BEGIN WAITFOR DELAY '00:00:10' SET @COPY_DATA = SELECT COUNT(*) FROM sys.dm_database_copies END 

Schritt 5: Azurblaue Powershell-Aufgabe (BacPac generieren) (ich gehe nicht hierher, da es ein ganz anderes Thema ist).

Sobald die Freigabe in Produktion geht, rufe ich den Cleardown-process wieder an, so dass Staging nur immer vorübergehend ist.

Sie können den Befehl Remove-Azure Rm Sql Database und New-Azure Rm Sql Database Copy verwenden , um eine database zu löschen und dann eine databasekopie zu erstellen.

Fügen Sie eine "Azure PowerShell Script" Aufgabe in Ihre Build-Definition und konfigurieren Sie es zu "Azure Resource Manager", um eine Verbindung zu Ihrem Azure Account wie folgt: Bildbeschreibung hier eingeben Das PowerShell-Skript, das ich verwende:

 Remove-AzureRmSqlDatabase -ResourceGroupName "resourcegourpname" -serverName "servername" -DatabaseName "databasecopy" New-AzureRmSqlDatabaseCopy -ResourceGroupName "resourcegourpname" -serverName "servername" -DatabaseName "database" -CopyResourceGroupName "resourcegourpname" -CopyserverName "servername" -CopyDatabaseName "databasecopy" 

Da der Kopiervorgang noch nicht abgeschlossen ist, wird er den Fehler, den du bekommst, casting. Der Workaround ist, wie Sie gesagt haben, dass Sie den process beenden können. Auf der anderen Seite können Sie versuchen, das Cmdlet New-AzureRMSq_DatabaseCopy zu verwenden und das Ergebnis zu überprüfen.

Das Cmdlet New-AzureRmSqlDatabaseCopy erstellt eine Kopie einer Azure SQL-database, die den Snapshot der data zur aktuellen time verwendet