web-dev-qa-db-ja.com

SQL Serverがリモートマシン/ドライブでバックアップできるようにする

SQL Server(2000、2005、2008)を使用していて、SQL Agent(または、単純なバックアップデータベース 'xxx' to disk = 'yyy')を使用してリモートドライブにバックアップしたい。

つまり、SQLマシンにマップされたドライブがあります。例:\\ otherbox\someshareにマップされる「M:」

デフォルトでは、SQL Serverはそのようなドライブへのバックアップを許可しませんが、それを有効にする方法はあると思います。誰かがドキュメントを私に指摘できますか?

前もって感謝します。

8

宛先を指定するときは、UNCパスを使用します。SQLエージェントには、「マップされた」「ドライブ」の概念がありません。

また、SQLエージェントは通常「ローカルサービス」または「ローカルシステム」として実行されるため、他のコンピューター上のリモート共有に対する権限がありません。

次の2つの選択肢があります。

  • ドメインの役割アカウントとしてSQLエージェントを実行します。そのアカウントに、バックアップを保存するディレクトリ/共有への書き込み権限を付与します。

  • SQLエージェントを「ネットワークサービス」として実行します。サービスが実行されているマシンのドメインコンピュータアカウントを使用して、共有サーバーに対して認証されます。そのアカウントに、バックアップを保存するディレクトリ/共有への書き込み権限を付与します。

  • ドメインがない場合は、SQLエージェントをホストするマシンとバックアップファイルをホストするマシンの両方で、同じユーザー名とパスワードを使用してアカウントを作成します。この「ロール」アカウントとして実行するようにSQLエージェントを変更し、バックアップを保存するディレクトリ/共有への書き込み権限をそのアカウントに付与します。 (「貧者の領域」...)

8
Evan Anderson

UNCパスに関する両方の回答に完全に同意します。

また、マップされたドライブでも簡単な回避策があることを追加したいと思います。サーバーの通常のドライブのいずれかにバックアップを実行できます。そして、あなたは追加することができます

xp_cmdshell 'XCOPY [source] [destination] \flags'

実行するジョブまたはSQLスクリプトに対するSQLコマンド。

Xp_cmdshellを使用すると、さらに多くのことができます-たとえば、7zなどの外部アーカイブコマンドラインツールを実行して、マップされたドライブにコピーする前にファイルを圧縮します(リモート接続が遅すぎる場合...)

追伸:xp_cmdshellは、セキュリティ構成ツールを使用してsp_configureを実行することで有効および無効にできることを忘れていました(デフォルトでは無効になっています)

4
Bogdan_Ch

SQL Serverがドメインアカウントで実行されていない場合は、この説明に従って、sqlserverアカウント(アカウントではない)のネットワークドライブをマップできます stackoverflow answer

まず、xp_cmdshellを有効にする必要があります

-- allow changes to advanced options 
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO

次に、以下を使用してドライブをマップできます。

EXEC xp_cmdshell 'Net Use Z: \\Srv\Path password1 /USER:Domain\UserName'

最後に、そのマップされたドライブにバックアップできます。

BACKUP DATABASE myDB TO DISK = 'z:\file.bak'
1
Yepeekai

エージェントはネットワーク共有にアクセスする必要があります。事前にマッピングする必要はありません。

あなたはこのようにします:

BACKUP DATABASE myDB TO DISK = '\\machine\share\dir\file.bak'

ジョブを所有するユーザーがsql sysadminである場合、それはエージェントの下で実行され、それ以外の場合は非sysadminユーザーとして実行されると思います。

1
Sam

ここで、SQL Serverはネットワークの遅延に非常に強いことを覚えておいてください。それらが発生し、その傾向がある場合、バックアップは失敗します。本番環境では、この方法はお勧めしません。

ローカルにバックアップしてからコピーすることをお勧めします。

0
Steve Jones