リモートSQL Serverデータベースをローカルドライブにバックアップするにはどうすればよいですか?


241

リモートサーバーからローカルサーバーにデータベースをコピーする必要があります。SQL Server Management Studioを使用しようとしましたが、リモートサーバー上のドライブにしかバックアップされません。

いくつかのポイント:

  • ファイルをコピーできる方法でリモートサーバーにアクセスできません。
  • サーバーへのUNCパスを設定するアクセス権がありません。

このデータベースをコピーするにはどうすればよいですか?サードパーティのツールを使用する必要がありますか?


1
ディレクトリ構造へのアクセス権がまったくない場合、これを実行しようとするのは難しいでしょう。
JNK、

3
具体的にバックアップするのではなく、データベースをコピーしようとしているだけですか?その場合は、データベースコピーウィザードを使用するか、または(SQL Server 2008では)[スクリプトの生成]オプションを使用してスキーマとデータをスクリプト化します。Redgate SQL CompareとData Compareもここで役立ちます。
Martin Smith、

1
@MartinSmithあなたの提案に従って、私はGenerate and Publish Scriptsオプションを使用してスクリプトを生成しました。すべてのテーブルとスキーマを取得しましたが、テーブルを使用してデータを取得しませんでした。どうすれば修正できますか?
本当の友達

回答:


182

Microsoft SQL Server Management Studioで、バックアップするデータベースを右クリックし、[タスク]-> [スクリプトの生成]をクリックします。

これにより、リモートサーバー上でもデータベースの適切なバックアップを実行するために以下を設定できるウィザードが表示されます

  • バックアップしたいデータベースを選択し、次にヒットします、
  • それはあなたに提示するオプションで:
    1. 2010年:[テーブル/ビューのオプション]で、[スクリプトデータ]と[スクリプトインデックス]をTrueに変更して、次にヒットします。
    2. 2012年:[全般]で、[データの種類をスクリプトに変更]を[スキーマのみ]から[スキーマとデータ]に変更します。
    3. 2014:ステップスクリプト設定オプションでデータをスクリプト化するオプションが「非表示」になりました。「詳細設定」をクリックし、「スクリプト化するデータのタイプ」を「スキーマとデータ」の値に設定する必要があります。
  • 次の4つのウィンドウで、[すべて選択]をクリックし、次に、
  • 新しいクエリウィンドウにスクリプトを作成することを選択します

処理が完了すると、バックアップスクリプトが用意されます。新しいローカル(またはリモート)データベースを作成し、スクリプトの最初の「USE」ステートメントを新しいデータベースを使用するように変更します。スクリプトを安全な場所に保存し、新しい空のデータベースに対して実行します。これにより、(ほぼ)重複したローカルデータベースが作成され、必要に応じてバックアップできます。

リモートデータベースへのフルアクセス権がある場合は、ウィザードの最初のウィンドウで[すべてのオブジェクトをスクリプト]をオンにして、次のウィンドウで[データベースのスクリプト]オプションをTrueに変更できます。ただし、スクリプト内のデータベース名を新しいデータベースに完全に検索および置換する必要があります。この場合、スクリプトを実行する前に作成する必要はありません。これにより、より正確な複製が作成されますが、権限の制限により利用できない場合があります。


9
SQL Server Management Studio 2012には、「スクリプトデータ」などのオプションがないため、新しいバージョンでは、ステップ2に対して次の手順を実行します。「一般」で、「データのタイプをスクリプトに」を「スキーマのみ」から「スキーマ」に変更します。とデータ」。
berezovskyi 14

1
私はSQL Server 2008 R2でそれをチェックしましたが、それは魅力のように機能しました。バックアップ戦略のためにそれを使用することに注意して、自分でいくつかの追加作業が必要ですが、RedGateなどのサードパーティツールを使用するよりも優れていると思います。多分私はパラノイアですが、ほとんどのサードパーティツールには追加コードがあり、スクリプトの簡素化と明確化を制御および削減します。本当にありがとう。
QMaster、2014

2
@ShaunLuttin「データのタイプをスクリプトに」を「スキーマのみ」から「スキーマとデータ(2012年)」に変更すると、INSERTステートメントが表示されます。
ダニエルギル

6
SSMS 2014では、スクリプトを保存する場所を選択するときに、スキーマのみからスキーマとデータに変更するオプションが「詳細」の後ろに隠されています。
MushinNoShin 2015

2
私はこの方法を使用してスクリプトを実行しようとすると、私は、「プログラムの実行を継続するのに十分なメモリ(mscorelibを)。」についてのSQLサーバー管理スタジオからerroorを取得
ロブ・

51

まず、Everyoneを使用して、マシンのローカルパス(以下に示す)にフルコントロールのアクセス許可を付与します。(または、SQL Serverエージェントアカウントに特別アクセス許可を付与します)。

次に、以下を実行します。

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;

14
これが質問への答えです。これにより、「スクリプトテーブルとデータ」ではなく、「リモートSQL Serverデータベースをローカルドライブにバックアップ」します。誰か:この回答を承認済みとしてマークし、ダニエルギルの間違った回答を削除してください
Henrik HolmgaardHøyer'19 / 04/17

私はこれがより良い答えだと思いますが、質問は「このデータベースをどのようにコピーできるかについてのアイデアはありますか?」特にバックアップではありません。
Oliver Townshend、

11
これは、リモートマシンがローカルマシンのファイルにアクセスできることを前提としていますが、これは一般的なケースではありません。
AndersLindén2018年

私があなたに複数回賛成できることを望みます。これは完璧な答えであり、私が長年にわたってやりたかったことです。とてもシンプル...完璧です。それは世界中のすべてのケースを解決するわけではありませんが、SQL Serverがインストールされているマシンではなく、マシンにリモート接続している私の場合には完全に機能しました。
ウェイドハト

これにも私のための労働者がいます。ローカルフォルダーを一時的に全員と共有し、バックアップを実行してから、共有を無効にします。これも正解だと思います。
フレッドロジャース

51

データとスキーマのみをコピーするには(ストアドプロシージャ、関数などはコピーしません)、SQL Serverインポートおよびエクスポートウィザードを使用し、宛先データベースを選択するときに[ 新規...]を選択します。

「データベース」>「タスク」>「データのインポート」を右クリックします。

データソースを選択

  • データソース:SQL Server Native Client
  • サーバー名:リモートサーバー
  • 認証
  • データベース:データベース名

目的地を選択してください

  • データソース:SQL Server Native Client
  • サーバー名:ローカルサーバー
  • 認証
  • データベースNew...

残りは簡単です。


2
これは、受け入れられた回答よりもはるかにうまく機能しました。テーブル間の関係をよりきれいに処理します。
MushinNoShin 2015

7
ああ。残念ながら、IDとデフォルトの制約は設定されません。:(
MushinNoShin 2015

1
これは、スクリプトを生成するよりもはるかに優れた方法です。スクリプトは、かなり大きくなる場合があります。個人の好み。違反なし:)
Vikas

これは非常に簡単で、私の行くところですが、何らかの理由でobject_id、create_dataなどの列が必要な場合は、sys.tablesの日付をそのまま変更するだけで、作成時に変更されることを覚えておいてください。
クリスモグラム2018

@MushinNoShin最初にスクリプトを生成してから、マッピングステップでID挿入を有効にすることでデータをインポート/エクスポートできます。
HasanG

29

リモートサーバーからローカルディスクにバックアップを作成することはできません。これを行う方法はありません。そして、私が知る限り、これを行うサードパーティのツールもありません。

できることは、リモートサーバーマシンでバックアップを作成し、誰かにそれを圧縮して送信してもらうことだけです。


5
同意しません。多くの状況で、MS SQL Server Management Studioの「スクリプトの生成」コマンドを使用して、ローカルデータベースを生成するために実行できるスクリプトを作成し、必要に応じてそれを実行できます。下記の私の回答または質問に対するMartin Smithのコメントを参照してください。
Daniel Gill

19
@Rafid:はいそれはだ-しかし、NOTBACKUP -それはスクリプト/データエクスポート.....だ
marc_s

2
@marc_sエクスポートされたコピーとは異なる「真のバックアップ」とは何ですか?ログ?他に何か?
Dronz 2012年

31
@Dronz:はい!スクリプトのエクスポートでは、構造や、場合によってはテーブル内のデータも再現されますが、トランザクションログや統計などのSQL Serverデータベースの重要な部分を含めることはできません
marc_s 2012年

1
@ShaunLuttin、データを含めることができます。
Erwin Rooijakkers

17

私はこれが遅い答えであることを知っていますが、SSMSでスクリプトの生成オプションを使用するように言う最も投票された答えについてコメントする必要があります。

このオプションの問題は、依存関係が考慮されないため、このオプションは必ずしも正しい実行順序でスクリプトを生成しないことです。

小さなデータベースの場合、これは問題ではありませんが、大きなデータベースの場合は、スクリプトを手動で並べ替える必要があるためです。500オブジェクトデータベースで試してください;)

残念ながら、この場合の唯一の解決策はサードパーティのツールです。

ApexSQL(DiffとData Diff)の比較ツールを使用して同様のタスクを正常に実行しましたが、ここで既に言及されている他のツール、特にRed Gateで問題が発生することはありません。


1
私は同意しません、SQLは常に依存関係を正しく注文しますが、あなたが言及した動作を再現する方法の具体例はありますか?
sawe

また、この問題を考慮するオプションがあります
Gaspa79

13

SQLBackupAndFTPを試すことができます。データベース内のすべてのオブジェクトを作成するスクリプトと、テーブル内のすべての行のINSERTステートメントを作成します。どのデータベースでも、このスクリプトファイルを実行すると、データベース全体が再作成されます。


4
出向。SQL Server Management Studioの新しいバージョンをインストールする必要があり、以前のようにスクリプトを作成できませんでした。このツールは、リモートサーバー(appharbor sqlserverアドオン)への完全なアクセス権がなくても問題なく迅速に対応しました
Daniel Gill

1
このソフトウェアはリソースを大量に使用することに注意してください。
認知症の

バギーであることに加えて、これが正しく機能するかどうかは完全にはわかりません。PHP経由でリモートサーバーに問題なく接続できますが、これはできませんか?サーバー自体に適切な設定がある場合。SO ya ...次に進みます。
Shawn Rebelo 2015

7

リモートデータベースをコピーする方法については、このブログを参照してください。

共有ホスティング環境からSQL Server 2008データベースをバックアップする


1
このアプローチでは、データベースの構造をスクリプト化してローカルで作成し、SQL管理ツールを使用してローカルデータベースとリモートデータベース間でデータをコピーする方法について説明します。
Drew Noakes、2011

1
「スクリプトデータ」オプションをTrueに切り替えて、データを一度にスクリプト化することもできます。
ダニエル・ギル

コピーとバックアップは2つの異なるものです。
AndersLindén2018年

私は、SQL Serverの2012を使用して2016データベースで作業する必要があるし、2012年に2016バックアップを使用傾けるので、これは完璧だった
majjam

6

リモートSQLサーバーからローカルPCにbakファイルを取得するための99%のソリューションがあります。私はそれを私の投稿http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pcで説明しました

一般的には次のようになります。

  • SQLスクリプトを実行してbakファイルを生成する

  • SQLスクリプトを実行して、各bakファイルをvarbinaryフィールドタイプの一時テーブルに挿入し、この行を選択してデータをダウンロードします

  • 前を繰り返します。bakファイルの数だけステップ実行

  • SQLスクリプトを実行してすべての一時リソースを削除する

それだけです。ローカルPCにbakファイルがあります。


5

データベースのコピーを使用できます...リモートデータベースを右クリックしてタスクを選択し、データベースのコピーを使用してください...ソースサーバーと宛先サーバーについて尋ねられます。ソースがリモートで、宛先がSQLサーバーのローカルインスタンスであること。

とても簡単です


データベースのコピーにはSysAdmin権限が必要です。これは、データベースの通常のユーザー向けのソリューションではありません。
Buggieboy 2013年

今日の私の問題では、開発チームにはsysadmin権限があります。したがって、プーヤンのアプローチを使用します。
ハンマー付きのコード

しかし、私は毎日それを行う必要があり、これを達成するためのスクリプトが必要です
明確化

3

AppHarborギャングはこれに苦労しており、SQLサーバー管理オブジェクトとSqlBulkCopyを使用する一時的なソリューションを開発しました。

それについて彼らのブログ投稿をチェックするか、コード直接進んでください。

AppHarborでテストしただけですが、チェックする価値があるかもしれません。


3

上記の答えは正しくありません。データが含まれていても、SQLスクリプトはバックアップではありません。バックアップは、indizeを含む現在の構造で完全なデータベースを含むBAKファイルです。

もちろん、すべてのデータを含む完全なバックアップを含み、リモートSQL Serverデータベースから取得したBAKファイルは、ローカルシステムで取得できます。

これは、市販のソフトウェアを使用して行うことができます。たとえば、バックアップBAKファイルをローカルマシンに直接保存します。これにより、ローカルマシンのリモートSQL dbからバックアップが直接作成されます。


これを行うには、sysadmin権限が必要です。
LarryBud 2016

正しい。SQLサーバーインスタンスへのリモート接続に使用されるアカウント(WindowsまたはSQLサーバー)には、バックアップジャンクを取得してローカルマシンに保存するためのsysadmin権限が必要です。FIDA Softwareの前述のツールは、バックアップジャンクを取得しながら、SQLサーバーとの間のネットワークトラフィックを暗号化および圧縮します。マシンにbakファイルを作成したら、必要な場所に復元できます。
Matthias

1

マーティン・スミスが言ったように、マシンやファイルシステムにアクセスできない場合は、Red GateやAdeptなどのサードパーティのツールを使用して、ソースシステムと宛先システムを比較する必要があります。Red Gateのツールを使用すると、オブジェクトとスキーマ、およびデータをコピーできます。


1

次の条件が満たされている場合に、リモートSQL Serverインスタンスからローカルドライブにバックアップを作成する方法。

  1. ローカルドライブに共有フォルダーがあります。
  2. 共有フォルダには、SQL Serverボックスからアクセスできます。

バックアップコマンドを指定するときに、ディスクオプションを指定するときに共有フォルダーのパスを使用するようになりました。


そして、あなたの答えは@Vivekの答えとどう違うのですか?
MartinSchröder2013年

1

これを試してみてください:

1)コンピューター内の完全なアクセス許可でフォルダーを共有する

2)SQLサーバー:コントロールパネル->管理ツール->サービス->すべてのSQLサービスを右クリック

ログオン時のタブはドメイン管理者から始める必要があります

3)SQLサーバーのメンテナンスウィザードで、バックアップの場所とフォルダー(\ yourcomputername \ sharedfoldernam)を配置します

弊社ではSQL Server 2008の8サーバーでリモートバックアップを行いました


1

Iは、誰がが提供するスクリプトのバックアップソリューション言及しなかったことを驚いてるオラHallengren絶対にない(私は実際にはI型としてそれを使用しています無料であなたのネットワーク上のUNCパスにリモートサーバからバックアップDBにあなたをできるようにします私の開発用PC上の共有へのSSMSを介して以外にリモートアクセスがない開発用サーバーからDBをバックアップする場合)。これは2008年から利用可能で、SQL Server 2005から2014年まで機能します。

設定した共有に十分なアクセス権があることを確認する必要があります。私は、より制限的なことを理解するのが面倒なので、バックアッププロセスの間、「Everyone」ADグループへの完全な読み取り/書き込みを許可する傾向があります。個人的な選択。

よく使用され、十分に文書化されており、非常に柔軟です。私はprocとロギングテーブルを小さな独自のユーティリティデータベースに入れ、それを起動する傾向があります。すべてがADドメインにあり、同じ場所に配置されたサーバーなどにあるという意味でリモートではない場合、これは非常にうまく機能します。

非常に古いスレッドに追加したことをお詫びしますが、他の何かを探しているときにこれに遭遇し、このトピックを探している人にとっては価値のある追加であると考えました。


1

2019では、実際のローカルバックアップが必要な場合は、mssql-scripterを使用することをお勧めします。はい、それはスクリプトですが、必要なものをすべて含めるように調整できます。これにはすべてのデータを含めることができます。Linuxマシンでこれを使用して自動化された毎日のバックアップを実行するbashスクリプトを作成しました。私の要点をチェックアウト:

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407

0

私は一度それを行うことができます...これを行うには、リモートサーバーで共有を開く必要があります。次に、デフォルトの場所ではなく、共有自体にバックアップを直接配置できます...

通常、管理者はバックアップを取り、共有フォルダーで共有します。そこにバックアップを置いておけばうまくいくか試してみました。出来た。


0

SSMSでスクリプトの生成を使用する場合は、[詳細設定]ボタンをクリックします。「依存オブジェクトのスクリプトを生成する」オプションで、「True」をクリックします。クリックすると、各オブジェクトの依存関係も適切な順序でスクリプト出力されます。


SSMS v17.8.1のデフォルトはTrueです。
Chris Catignani

0

一部のサードパーティのバックアッププログラムでは、特定のネットワーク権限でファイル転送を設定できます。これは、SQL Serverサービスが制限されたアカウントで実行されていて、十分なネットワーク権限がない場合に非常に役立ちます。このタスクを解決するEMS SQLバックアップを使用してみてください。


0

私はこの目的のためにRedgateバックアッププロ7ツールを使用しています。他の場所の作成タイルでバックアップファイルからミラーを作成できます。作成後、バックアップファイルをネットワーク上およびホストストレージ上に自動的にコピーできます。


0

「全員」の読み取り/書き込み権限を持つローカル共有フォルダを作成する

ターゲットデータベースに接続し、バックアップを開始して、以下のように共有をポイントします

\ mymachine \ shared_folder \ mybackup.bak

(Windowsドメイン環境で試しました)


0

私はこれが古い投稿であることを知っていますが、価値があるのは、データベースを右クリックして[タスク]-> [データ層アプリケーションのエクスポート]を選択することです。このオプションは、サーバーがAzureでホストされているためにのみ使用できる可能性があります(以前、Azureでの作業を覚えていたことから、.bacpac形式はそこで非常に一般的でした)。

それが完了したら、ローカルサーバーの[データベース]リストを右クリックし、[データ層アプリケーションのインポート]を使用して、.bacpacファイルを使用してローカルマシンにデータを取得できます。

エクスポートには長い時間がかかることを覚えておいてください。私のエクスポートが完了するまでに約2時間かかりました。ただし、インポート部分ははるかに高速です。


-1

ローカルネットワーク上にいる場合は、ローカルマシン上のフォルダーを共有し、それをバックアップの宛先フォルダーとして使用できます。

例:

  • ローカルフォルダー:

    C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder

  • リモートSQLサーバー:

    Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'

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