2017-04-25 2 views
2

VSTSで私の複製プロセスを構成しようとしていますbuldをステージングに展開する前に、ステージング環境にライブデータベースをインストールします。ここでは、以下のガイドライン...VSTSでSQL Azure DBを複製する方法 - サーバー 'sql01'のサーバー 'sql01'のデータベース 'A'とサーバー 'sql01'の 'B'は既に複製関係にあります

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

、ここで...

https://alexandrebrisebois.wordpress.com/2013/02/07/creating-a-staging-database-instance-from-a-production-instance-on-windows-azure-sql-database/

私は、コマンドを実行すると、私は次のエラーを取得するのに、それは主に取り組んで持っている...

CREATE DATABASE [Staging] AS COPY OF [Operational] 

データベース '運用' サーバーに 'SQL01' と「Staginサーバー 'sql01'のg 'はすでにレプリケーション関係にあります。

これは、私は関係なく、継続してビルドサーバーを構成することができますが、私はまだ上がってくる厄介な黄色の警告を取得...

DROP DATABASE IF EXISTS [Staging] 

が付け加えています。私は回避策としてこれを何らかの方法で抑止するか、最初にエラーが発生するのを止めるために必要なことをするかのどちらかを探しています。最終結果は必要に応じて、SQLデータベースは正常にコピーされます。

私は、その後にリリースプロセスを強制的にこれを行う上で、単に工程の後に元のデータベース(存在する場合!)

を落とすよりも、事前に他の私が行う必要があるいくつかのその他のクリーンアップがありますように感じる「待ちます'データベースが準備完了するまで...

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 

...時間がかかることがあります。これで、エラーはまったくなくなります。

時間がたつにつれ、私は各段階で一貫して完了を保証することができず、誤った失敗につながりました。 DROPが終了しないことがあります。それがマスターに存在することを確認すれば、それはなくなってしまいますが、まだそこにあるので、Createは転倒します。


これ以降の説明では、次のように私が解決した解決策が最も信頼できるものでした。

NOTES - PowerShellはSqlCommandオブジェクト よりも信頼性が高い - 紺碧のAPIと基盤となるデータベースは時々に私の生産のクローンを作成するために、2つの

間の競合状態につながるしばらくOSの同期を出しますステージング私は次のようでした...

ステップ1:AzureのPowerShellのタスク(クリアステージング)

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

Sステップ2:Azure SQLタスク(データベースを削除) - 確かに!

DROP DATABASE IF EXISTS [Staging] 

ステップ3:AzureのPowerShellのタスク(ライブからステージング再作成)

New-AzureRmSqlDatabaseCopy -ResourceGroupName "Production" -ServerName "sql01" -DatabaseName "Operational" -CopyResourceGroupName "Production" -CopyServerName "sql01" -CopyDatabaseName "Staging" 

ステップ4:AzureのSQLタスク(待つ同期) - 念のため!

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 

ステップ5:AzureのPowerShellのタスク(生成BACPAC) (それは全体他のトピックだと私はここにいるにつもりはありません)。

リリースがプロダクションに移行すると、もう一度クリア・プロセスが呼び出され、ステージングは​​一時的なものに過ぎません。

+0

どうやってNew-Azure Rm Sql Database PowerShellコマンドをコピーしますか? https://docs.microsoft.com/en-us/azure/sql-database/scripts/sql-database-copy-database-to-new-server-powershell –

+0

AzureRmでデータベースを削除するためのコマンドレットはありますか?私は古典的なバージョンを試して、DROPコマンドより信頼性がなく、はるかに書くのが難しいことを発見しました! –

+0

私はこのための作業チェーンを得ることができる場合は、私はそれをすべて投稿します。 –

答えて

1

のデータのスナップショットを使用してAzureのSQL データベースのコピーを作成し、データベースを削除するRemove-​Azure​Rm​Sql​DatabaseNew-​Azure​Rm​Sql​Database​Copyコマンドを使用することができ、その後、データベースコピーを作成します。

ビルド定義で「紺碧のPowerShellスクリプト」タスクを追加し、次のようなあなたのAzureのアカウントに接続するには、「Azureのリソースマネージャ」を使用するように設定: enter image description here PowerShellスクリプトは、私が使用します。

Remove-AzureRmSqlDatabase -ResourceGroupName "resourcegourpname" -ServerName "servername" -DatabaseName "databasecopy" 

New-AzureRmSqlDatabaseCopy -ResourceGroupName "resourcegourpname" -ServerName "servername" -DatabaseName "database" -CopyResourceGroupName "resourcegourpname" -CopyServerName "servername" -CopyDatabaseName "databasecopy" 
+0

Remove-AzureRmSqlDatabaseコマンドを実行する前にデータベースが存在するかどうかをPowershellが確認する方法はありますか? –

+0

上記の私のコメントに答えるために - ErrAction SilentlyContinueはちょうどチケットだった。 Remove-AzureRmSqlDatabaseは信頼性は高いようですが、完全ではありません。 New-AzureRmSqlDatabaseCopyは、SQLコマンドが私に与えたばかげたエラーメッセージが表示されないことを意味します。 –

0

コピー処理が完了していないため、エラーが発生します。この問題を回避するには、プロセスの終了を待つことができます。 一方、New-AzureRMSqlDatabaseCopyコマンドレットを使用して、結果を確認することもできます。

新AzureRmSqlDatabaseCopyコマンドレットは、現在の時点で

+0

それはそうではありません。このエラーは、作成コマンドを呼び出してコピーを開始すると発生します。私はその後、プロセスが完了するのを待ちます。 Powershellスクリプトを使って最初のドロップステージをやってみました。私がこのすべてで見つけた最大の難点は、信頼性を得ることです。 SQLまたはPowershellのどちらを使用しても、出力には一貫性がないようです。場合によっては、作成が開始される前にドロップが存在していないと言われているにもかかわらず、ドロップが完了しないことがあります。確かにPowershellは私のForteではありません。 –

+0

潜在的に前のコピーはどこかで未完成になる可能性がありますが、メインエラーは毎回一貫しており、私の待機スクリプトは前の実行からの完了を示しています。私は何かが残っていることを示すことができ、どこで私がクリアできるかを知る必要があると思います。結局のところ、前からのターゲットDBが削除されてしまって、私はちょっと困惑しています。 –

関連する問題