私は過去数年間にいくつかのSQL Expressサーバー(2008から2012 R2)に Ola HallengrenのSQL Serverメンテナンスソリューション をセットアップしました。最近、すべてのネットワークバックアップコンポーネントに新しい問題が発生し始めました。私は過去にいくつかのサーバーでこれを機能させたことがあります。そのため、機能することはわかっていますが、現在機能しなくなっている原因を特定できません。興味のある点として、私はDBAではなく、SQLについてほとんど何も知りません。それが私がここにいる理由です。
問題
特に1台のサーバーで、約1年半前にメンテナンススケジュールを設定しました。 UNCパス(および他のいくつかのコマンド)を使用して、別のローカルサーバーに毎晩バックアップを行っていました。スクリプトのコードは次のとおりです。
sqlcmd -E -S SERVER\INSTANCE -d master -Q "EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES', @Directory = '\\techstore1.domain.local\Backups', @BackupType = 'FULL', @Verify = 'Y', @CheckSum = 'Y', @CleanupTime = 14" -b
これはかなり前から問題なく機能しましたが、約1か月前に機能しなくなりました。ローカルでバックアップするように設定し、xcopyに文字列をリモートの場所に追加し、リモートサーバーにスクリプトを追加して古いバックアップをクリーンアップしました。 理想的ではありません。
私は自分自身とスーパーアクセス許可アカウントとしてコマンドラインで実行してみました。これは私がすべての場合に受け取るエラーです:
Msg 50000, Level 16, State 1, Server SERVER\INSTANCE, Procedure DatabaseBackup, Line 384
The directory \\techstore1.domain.local\Backups does not exist.
Msg 50000, Level 16, State 1, Server SERVER\INSTANCE, Procedure DatabaseBackup, Line 611
The documentation is available at http://ola.hallengren.com/sql-server-backup.html.
私がやったこと
明らかに、SQLはネットワークの場所が存在しないと考えているので、ネットワーク側のすべてのものが適切であることを確認するためにできることを試しました。スクリプトの新しいコピーをプルして、すべてのオブジェクトとジョブを再作成しました。他のスクリプト(整合性チェック、統計更新など)が機能することを確認しました。バックアップスクリプトと同じ資格情報を使用してターゲットサーバーへのローカルバックアップのxcopyを実行するスクリプトを作成したので、適切な共有/ NTFS資格情報があります。そのアカウントは、SQLバックアップ用に特別に作成されたドメインアカウント(AD)です。ローカルで(そのアカウントを使用して)バックアップできるので、データベース権限を持っています。 Windowsエクスプローラーを使用して、バックアップアカウントとして共有に移動できます。バックアップアカウントを使用するWindowsエクスプローラーを使用して、リモートの場所にファイルを手動でコピーできます。
他のいくつかのネットワークでも同じ問題が発生し、それが私をSFに変えました。私は2008 R2および2012ドメインにいます。すべてのサーバーはドメインメンバーであり、関連するエラーはありません。サーバーは、2008 R2および2012 R2 Standardマシンです。これが3つの異なるネットワークと複数のサーバーで発生するためにトラブルシューティングできないSQL側で何かが変更されたに違いないと感じています。私は超基本的なコマンドを使用しました-ジョブの検証とクリーンアップを残して-同じエラーが発生します。 Olaのサイトにあるサンプルコマンドをテストとして活用したところ、同じ結果が得られました。私は、基本的なテストデータベースを備えた新しいSQL Serverで試してみました。 Googleで黒帯を数日間使用しましたが、非常に残念な結果になりました(何を探すべきかわからないのでしょうか?)。
私が得たいもの
SQLコマンドライン内でネットワーク共有への接続をテストする方法、またはそこにアクセスするための資料を読んでいただければ幸いです。読んでも構わない。私は有能なシステム管理者であり、この問題についての彼の深みの外にいるだけです。私はOlaのサイトですべてを読みましたが、とにかく実際にサンプルコマンドをそのまま使用しています(そして、それらは数か月間動作しました!?)。私はこの週末と今週末に取り組んでおり、誰でも提供できるヘルプや指示は大いに評価されます。
この問題は解決されました。新しいネットワーク共有の場所を作成し、非常にオープンなアクセス許可(全員:フルコントロール)を付与しました。バックアップはその場所で機能します。問題が何であれ、ターゲットのNTFS/Shareアクセス許可に分離する必要があります。一部のクライアントがすべて同じ問題を抱えていた理由はわかりませんが、この修正はすべてのクライアントで機能しました。基本的にすべてのバックアップ場所を再作成し、それらを再び共有しました。そもそも何が悪いのか、私たちは決して知りません。
この問題を読んで考えてくださった皆さんに感謝します。
私はOlaのスクリプトを実装する同様の問題を診断していました。一部のサーバーでは機能し、他のサーバーでは機能しません。私は得るでしょう:
"Msg 50000, Level 16, State 1, Procedure DatabaseBackup, Line 395 XXX The directory does not exist."
私の場合、問題は、SQLエージェントが十分な権限を持つドメインアカウントで実行されていても、SQL Server自体がそうではなかったことでした。場合によっては、ローカルサービスとして実行されていました。
いったんSQLを変更して、特権を持つドメインアカウントとして実行するようにしました。
これが他の誰かの役に立つことを願っています。
実行している仕事は誰ですか?問題の共有にアクセスできるドメインユーザーとして実行されていますか?それともSAとして実行されていますか? SAとして実行されている場合は、SQL Serverエージェントアカウントとして実行されています。ジョブを実行しているユーザーが問題のネットワーク共有にアクセスできることを確認してください。
また、特にコマンドはSERVER\INSTANCE
ではなくSERVER\DATABASE
である必要があります。
sqlcmd -E -S SERVER\INSTANCE -d master -Q "EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES', @Directory = '\\techstore1.domain.local\Backups', @BackupType = 'FULL', @Verify = 'Y', @CheckSum = 'Y', @CleanupTime = 14" -b
(私はthinkしないと、エラーが発生しますが、それでも問題ありません。)
ソリューション:SQLエージェントサービスのみを再起動します-それは私たちのために動作します。
私は最近同じ問題に直面しました、ストアドプロシージャdbo.DatabaseBackup
は正しいfile\folder属性を識別できません。そのため、SQLエージェントサービスが実行されているドメインユーザーがバックアップの場所にアクセスできないというエラーが発生します。
ストアドプロシージャのコードスニペットdbo.DatabaseBackup
:
If object_ID(N'tempdb.dbo.#File_Results') is not NULL
Drop table #File_Results;
CREATE TABLE #File_Results (
File_Exists int,
File_is_a_Directory int,
Parent_Directory_Exists int
)
DECLARE @FileName varchar(255)
SET @FileName='\\DBLIVEBACKUPS\Dump$$'
INSERT INTO #File_Results
EXEC Master.dbo.xp_fileexist @FileName
SELECT * FROM #File_Results
同じサーバー上のさまざまなネットワークロケーションの正しいパラメーターを取得しています。