SQL Azureデータベースをローカル開発サーバーにコピーするにはどうすればよいですか?


164

SQL Azureデータベースを開発マシンにコピーする方法を知っている人はいますか?クラウドに開発用データベースを配置するのにお金をかけたくないのですが、それが本番データを取得するための最良の方法です。本番データベースを新しい開発データベースにコピーしましたが、同じデータベースをローカルにしたいと思います。

助言がありますか?


2
私はほとんどいつもそれを使います!それは小さく、無料で、常に更新され、不要なファイルをインストールせず、チャームのように機能し、データベースに不要なオブジェクトを作成せず、その名前が示すとおりに機能します。
astaykov

4
これは劇的に簡単になりました。SSMSでTasks => Deploy Database ...を使用する方法については、以下のAtomの回答(2018年2月)を参照してください。
Jon Crowell、2018年

回答:


129

これには複数の方法があります。

  1. SSIS(SQL Serverの統合サービス)を使用しますdataテーブルにインポートするだけです。列のプロパティ、制約、キー、インデックス、ストアドプロシージャ、トリガー、セキュリティ設定、ユーザー、ログオンなどは転送されません。ただし、これは非常に単純なプロセスであり、SQL Server Management Studioのウィザードを実行するだけで実行できます。
  2. SSISとDB作成スクリプトを組み合わせて使用​​する。これにより、SSISによって転送されないデータと欠落しているメタデータがすべて取得されます。これも非常に簡単です。最初にSSISを使用してデータを転送し(以下の手順を参照)、次にSQL AzureデータベースからDB作成スクリプトを作成し、ローカルデータベースで再生します。
  3. 最後に、SQL Azureでインポート/エクスポートサービスを使用できます。これにより、データが(スキーマオブジェクトと共に)BACPACとしてAzure Blob Storageに転送されます。Azureストレージアカウントが必要です。これはAzure Webポータルで行います。エクスポートするデータベースを選択するときに、Azure Webポータルの[エクスポート]ボタンを押すのと同じくらい簡単です。欠点は、それが手動の手順にすぎないことです。ツールやスクリプトを使用してこれを自動化する方法がわかりません。少なくとも、Webページをクリックする必要がある最初の部分です。

方法#1(SSISを使用)の手動手順は次のとおりです。

  • SQL Server Management Studio(SSMS)で、ローカルSQLインスタンスに新しい空のデータベースを作成します。
  • コンテキストメニューから[データのインポート]を選択します(データベースを右クリック->タスク->データのインポート...)
  • ソース(SQL Azure)の接続パラメーターを入力します。プロバイダーとして、「。Net Framework Data Provider for SqlServer」を選択します。
  • 宛先として既存の空のローカルデータベースを選択します。
  • ウィザードに従います-コピーしたいテーブルデータを選択できます。不要なテーブルはスキップするように選択できます。たとえば、アプリケーションログをデータベースに保持している場合、バックアップではおそらく必要ありません。

SSISパッケージを作成し、データを再インポートするときにいつでも再実行することで、自動化できます。SSISを使用してクリーンなDBにのみインポートできることに注意してください。一度一度実行すると、ローカルデータベースに増分更新を行うことはできません。

方法#2(SSIDデータとスキーマオブジェクト)は非常に簡単です。最初に上記の手順を実行し、次にDB作成スクリプトを作成します(SSMSでデータベースをクリックして、[スクリプトの生成]-> [データベース作成]を選択します)。次に、このスクリプトをローカルデータベースで再生します。

方法#3は、ブログのhttp://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/で説明されています。DBコンテンツをBACPACとしてAzure Blob Storageに転送するプロセスを含むビデオクリップがあります。その後、ファイルをローカルにコピーしてSQLインスタンスにインポートできます。BACPACをデータ層アプリケーションにインポートするプロセスについては、http://msdn.microsoft.com/en-us/library/hh710052.aspxで説明されています。


2
これは機能しますが、修正は1つだけです。サーバーのインポート/エクスポートウィザードでは、データソースは '.Net Framework Data Provider for SqlServer'
BZink

すごい!訂正ありがとうございます。プロバイダーの1つが機能し、他の一部は機能しなかったのを覚えていますが、どれを正確に思い出せなかったか。
seva titov 2011年

失敗する:「読み取り専用の列 "id"への挿入に失敗しました」
dumbledad

3
私にとっての秘訣は、空のDBでPK / FK /制約の複製を開始し、データのインポート中に制約を一時的に無効にすることでした。より正確には、1-空のターゲットDBを手動で作成します。ソースDB>タスク>スクリプトの生成を2右クリックします。3空のターゲットDBでスクリプトファイルを実行します(DBには正しいPK / FK /制約がありますが、データはありません)。4-すべての制約を無効にします(stackoverflow.com/a/161410)。5-データのインポート(ターゲットDBを右クリック>タスク>データのインポート)。6-制約を再度有効にします。お役に立てれば!
Mathieu Frenette、2014年

1
@JoSmo、メソッド#1および#2はストレージアカウントを必要としません。ただし、SQL Azureデータベースと同じデータセンターにストレージアカウントを用意することをお勧めします。その理由は、それをDBのバックアップと復元に使用できるためです。Azureサブスクリプションの管理者権限がない場合は、新しいストレージアカウントを作成し、それにアクセスキーを付与するのに十分な権限を持つ組織内のユーザーを見つけます。すでにデータベースへのアクセス権があるため、ストレージアカウントへのアクセスを拒否する理由はありません。
seva titov

66

Azureデータベースのデータをローカルデータベースにコピーします。これで、SQL Server Management Studioを使用して、以下のようにこれを行うことができます。

  • SQL Azureデータベースに接続します。
  • オブジェクトエクスプローラーでデータベースを右クリックします。
  • オプション「タスク」/「データベースをSQL Azureにデプロイ」を選択します。
  • 「配置設定」という名前のステップで、ローカルSQL Serverを接続し、新しいデータベースを作成します。

ここに画像の説明を入力してください

「次へ」/「次へ」/「完了」


9
「SQL AZUREにデータベースをデプロイする」は誤解を招くので、これはSSMSではそれほど明確ではありません...
EeKay

12
間違いなく最も紛らわしいメニュー名と混合された、はるかに簡単なソリューションです。これを投稿していただきありがとうございます。
Kevin Giszewski、

これは最も簡単ですが、欠点は、バックアップするテーブルとバックアップしないテーブルを選択できないことです。私の会社では、ギガバイトの添付ファイル(写真など)を含むAttachmentテーブルがあります。コピーすることは永遠に続くので、通常はこれを望まない。この方法でこのテーブルを除外することはできません。
Rosdi Kasim

33

正しいので、ダンブルダッドの回答の簡略版を追加したかっただけです。

  1. Azure SQLデータベースをBLOBストレージのBACPACファイルにエクスポートします。
  2. SQL Management Studio内からデータベースを右クリックし、[データ層アプリケーションのインポート]をクリックします。
  3. Azure BLOBストレージのBACPACファイルにアクセスするための情報を入力するように求められます。
  4. 次を数回ヒットして...できました!

4
ターゲットをSQL Azure 12にすることはできないというエラーが表示されますか?
Zapnologica 2016年

2
そのBACPACをインポートするSSMSのバージョンがあることを確認してください
Paul Bullivant

でも、SSMSのこのバージョンでは、私はまだあるため、ターゲットのAzure SQL DB 12のエラーを取得する
Preza8

28

SQL Server 2016 Management Studioでは、ローカルデータベースにAzureデータベースを取得するプロセスが合理化されました。

インポートするデータベースを右クリックし、[ タスク]> [ データ層アプリケーションのエクスポート ]をクリックして、データベースをローカルの.dacpacファイルにエクスポートします。

ローカルのターゲットSQLサーバーインスタンスで、[ データベース ] > [ データ層アプリケーションのインポート ]を右クリックし、ローカルになったら、データベースのバックアップや復元などを実行できます。


5
これだよ。NB。「データ層のエクスポート」にはデータが含まれ、「データ層の抽出」には定義のみが示されます
Colin

20

今ではずっと楽だと思います。

  1. SQL Management Studioを起動する
  2. [データベース]を右クリックし、[データ層アプリケーションのインポート...]を選択します。
  3. ウィザードは、Azureアカウントに接続し、BACPACファイルを作成し、データベースを作成するプロセスを案内します。

さらに、SQLバックアップとFTP(https://sqlbackupandftp.com/)を使用して、安全なFTPサーバーへの毎日のバックアップを実行しています。そこから最近のBACPACファイルをプルするだけで、同じダイアログにインポートされます。これにより、ローカルデータベースを作成する方が速くて簡単です。


9

Windows Azure管理ポータルでSQL Azure Data Syncを確認することもできます。SQL AzureとSQL Serverの間のスキーマとデータを含むデータベース全体を取得および復元できます。


1
SQLデータ同期は、いくつかの制限があるため、バックアップ戦略の一部として使用しないでください。バージョン管理は行われず、データのみがバックアップされ、他のオブジェクトはバックアップされません。詳細については、SQLデータ同期に関するFAQトピックを参照してください。(msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx
ショーンLuttin

1
データ同期はかなりひどいです-今日(この投稿から数年後)にも大量のバグがあり、実際にデータベースを台無しにする可能性があります-それでも多くの制限があります。
ウィリアム

5

とても簡単です。これは私にとってうまくいきました... Azure SQLデータベースをローカルマシンにダウンロードするという点で...:

  1. SQL Management Studioを開き、Azure SQL Serverに接続します。
  2. ローカルマシンにダウンロードするデータベースを選択し、右クリックして[スクリプトの生成]を選択します。プロンプトに従います...

ただし、スクリプトだけでなくデータも必要な場合は、生成を開始する前に必ず詳細オプションを確認してください。「スクリプトを作成するデータのタイプ」までスクロールして、「スキーマとデータ」...またはあなたにとって適切なもの。

それはあなたのローカルマシンで実行できる素敵なSQLスクリプトファイルを提供し、それはデータベースを作成し、それにすべてのデータを投入します。

私の場合、私にはFKやその他の制約がないことを覚えておいてください...また、それは大量のデータではありませんでした。

私はこれを一般的なバックアップメカニズムとしてはお勧めしません...


2
私はこれが大騒ぎなしで非常にうまく機能したと言わざるを得ません。外部キーは完全に再作成されました。結果のSQLスクリプトは、SSMSで、または実際に多くのテキストエディタで開くには大きすぎましたが、私は、コマンドラインを使用することができましたsqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
perlyking

5

使用する msdeploy.exe

注意:msdeploy.exe宛先データベースを単独で作成できないため、最初に手動で作成する必要があります。

  1. データベースのプロパティページで接続文字列をコピーします。正しいパスワードが含まれるように調整してください。 データベースのプロパティページ
  2. 宛先DBの接続文字列を取得します。
  3. 次のmsdeploy.exeように実行します。

    "c:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -dest:dbDacFx="destination_DB_connection_string",dropDestinationDatabase=true -source:dbDacFx="azure_DB_connection_string",includeData=true -verbose

使用する SqlPackage.exe

  1. azure DBをbacpacパッケージにエクスポートします。

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Export /ssn:"azure_db_server" /sdn:"azure_db_name" /su:"user_name" /sp:"password" /tf:"file.bacpac"
  2. パッケージをローカルDBにインポートします。

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Import /SourceFile:"file.bacpac" /TargetServerName:".\SQLEXPRESS" /TargetDatabaseName:CopyOfAzureDb


3

SQL Server Management Studio

インポートするデータベースを右クリックし、[タスク]> [データ層アプリケーションのエクスポート]をクリックして、データベースをローカルの.dacpacファイルにエクスポートします。

ローカルのターゲットSQLサーバーインスタンスで、[データベース]> [データ層アプリケーションのインポート]を右クリックし、ローカルになったら、データベースのバックアップや復元などを実行できます。


2

「読み取り専用列 "id"への挿入に失敗しました」というエラーが発生したため、SSISインポート/エクスポートを機能させることができませんでした。また、http://sqlazuremw.codeplex.com/を機能させることもでき ず、上記のSQL Azure Data Syncへのリンクも機能しませんでした。

しかし、私はBACPACファイルに関する優れたブログの記事を見つけました:http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

では、ポストでのビデオブログの記事の著者は、6つのステップを実行します:

  1. Azure管理ポータルでストレージアカウントを作成するか、ストレージアカウントに移動します。Blob URLとストレージアカウントのプライマリアクセスキーが必要です。

  2. このブログの投稿では、bacpacファイル用の新しいコンテナーを作成することをお勧めし、そのためにAzure Storage Explorerを使用することを推奨しています。(Azure Storage Explorerに追加するには、Blob URLとストレージアカウントのプライマリアクセスキーが必要です。)

  3. Azure管理ポータルで、エクスポートするデータベースを選択し、リボンの[インポートとエクスポート]セクションで[エクスポート]をクリックします。

  4. 表示されるダイアログには、データベースのユーザー名とパスワード、BLOB URL、アクセスキーが必要です。blob URLにコンテナーを含め、ファイル名を含めることを忘れないでください(例:https : //testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac)。

  5. [完了]をクリックすると、データベースがBACPACファイルにエクスポートされます。これには時間がかかる場合があります。Azure Storage Explorerでチェックインすると、0バイトのファイルがすぐに表示される場合があります。これは、ブロブストアへの書き込みアクセス権があることを確認するインポート/エクスポートサービスです。

  6. これが完了すると、Azure Storage Explorerを使用してBACPACファイルをダウンロードし、SQL Server Management Studioでローカルサーバーのデータベースフォルダーを右クリックして、データ層アプリケーションのインポートを選択すると、BACPACファイルを読み込むウィザードが開始されます。 Azureデータベースのコピーを作成します。最初にローカルにコピーしたくない場合は、ウィザードを直接blob-storeに接続してBACPACファイルを取得することもできます。

最後の手順は、SQL Server Management StudioのSQL Server 2012エディション(私が実行しているバージョン)でのみ使用できる場合があります。このマシンで以前にチェックしたものはありません。ブログ投稿では、作成者はコマンドラインツールDacImportExportCli.exeをインポートに使用しています。インポートはhttp://sqldacexamples.codeplex.com/releasesで利用できると思います。


私はこれに正確に従わなかったが、それは正しい方向に私を導く。bacpacファイルのダウンロードをスキップして、SQL Server Management Studio内から直接Azure Blobストレージをポイントできます。
Josh Mouch 2013年

2

「読み取り専用列「id」への挿入に失敗しました」というエラーが発生したため、SSISインポート/エクスポートを機能させることができませんでした。これは、マッピング画面で、 Identity要素の挿入を許可します。

その後、SQLインポート/エクスポートウィザードを使用してすべてが正常に機能し、Azureからローカルデータベースにコピーされました。

SQL Server 2008 R2に付属するSQLインポート/エクスポートウィザード(正常に動作)と、ローカルデータベースを作成するVisual Studio 2012 Expressしかありませんでした。




1

新しいAzureモバイルサービスを使用して、SQL AzureからAzure Storageでホストされている.bacpacファイルへの夜間バックアップエクスポートを実行できます。このソリューションは100%クラウドであり、サードパーティのツールを必要とせず、ローカルでホストされているSQL Serverインスタンスが何かをダウンロード/コピー/バックアップする必要はありません。

約8つの異なるステップがありますが、それらはすべて簡単です。http//geekswithblogs.net/BenBarreth/archive/2013/04/15/how-to-create-a-nightly-backup-of-your-sql-azure .aspx


これは本当に有望に見えます!これがAzureフェデレーションで機能するかどうか考えていませんか?
Tim Lentine、2013年

@Timごめんなさい。これをモバイルサービス経由で行うことは、最初の回避策であるため、そうでなくても驚かないでしょう。
ベンバレス2013年

1

私はいつも最も簡単なインポート/エクスポート機能を使用しています。

ステップ1:

次のようにazureインスタンスからバックアップを取得します。データベースを選択→右クリック→タスク→データ層アプリケーションのエクスポート。

手順2: バックアップファイルに特定の名前を付けて、目的の場所に保存します

ステップ3:これで、SQLインスタンスからローカルにデータベースのバックアップが作成されました。ローカルに復元してみましょう。バックアップしたデータベースをCドライブにコピーします。管理者権限でPowerShellを開き、Cドライブに移動します

ステップ4:マスターキーを削除するPowerShellスクリプトをダウンロードしてみましょうRemoveMasterKey.ps1 は同じドライブにスクリプトを持っています。この場合はCです。

手順5:次のようにスクリプトを実行します。.\ RemoveMasterKey.ps1 -bacpacPath "C:\ identity.bacpac"

これで、ローカル環境のMSSQL 2017で復元できます。

ステップ6:ローカルサーバーに接続し、[データベース]→[Import-Data-Tier-Application]をクリックします

手順7:復元するデータベースに名前を付けます。

すべてが緑色で表示されます。

図付きの私のブログを読んでください。



0

私にとっての秘訣は、空のDBでPK / FK /制約を複製し、データのインポート中に制約を一時的に無効にすることでした(https://stackoverflow.com/a/161410を参照)。

より正確に:

  1. 空のターゲットDBを手動で作成します。
  2. ソースDBを右クリック>タスク>スクリプトの生成;
  3. 空のターゲットDBでスクリプトファイルを実行します(DBには正しいPK / FK /制約がありますが、データはありません);
  4. すべての制約を無効にします。
  5. データのインポート(ターゲットDBを右クリック>タスク>データのインポート);
  6. 制約を再度有効にします。

お役に立てれば!


0

これで、SQL Server Management Studioを使用してこれを行うことができます。

  • SQL Azureデータベースに接続します。
  • オブジェクトエクスプローラーでデータベースを右クリックします。
  • オプション「タスク」/「データベースをSQL Azureにデプロイ」を選択します。
  • 「デプロイメント設定」という名前のステップで、ローカルデータベース接続を選択します。
  • 「次へ」/「次へ」/「完了」...

別のAzureデータベースをターゲット接続として選択するまで、[次へ]ボタンがグレー表示されるため、これを実行できませんでした
Colin


0

Azure SQL Syncを使用するDBのBacpacをインポートする際に問題が発生した場合、Sandrino Di Mattiaはこれを解決するための優れたシンプルなアプリケーションを開発しました。

  1. DBのBacpacをエクスポートする
  2. Dowload Di Mattiaのバイナリ
  3. このコンソールアプリを使用して、ダウンロードしたBacpacを修復します
  4. Lauch SSMS
  5. 「データベース」を右クリックし、「データ層アプリケーションのインポート」を選択します
  6. 修復したBacpacを選択します。

0

データベースをローカルにバックアップする無料で効果的なオプションが必要な場合(手動で実行してもかまいません)、最新バージョンのMicrosoft Visual Studio 2015 Community Edition(無料)またはProfessional / Premium / Ultimateに組み込まれているスキーマおよびデータ比較機能を使用します版。それは魅力のように機能します!

AzureのBizParkアカウントを持っています。支払いを行わずにデータベースを直接バックアップする方法はありません。私はVSの作品でこのオプションを見つけました。

回答はhttps://stackoverflow.com/a/685073/6796187から取得されます


0

こんにちは、SQLAzure DBの移行と管理にSQLAzureMWツールを使用しています。とても便利なものです。これはcodeplexからダウンロードされましたが、現在は利用できません。codeplexをシャットダウンする予定です。同じアプリケーションツールがGttHubで利用可能になりました。この下のリンクは、このツールの使用方法の説明であり、アプリケーションをダウンロードして入手することもできます。

https://github.com/twright-msft/azure-content/blob/master/articles/sql-database/sql-database-migration-wizard.md

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.