拡張ストアド プロシージャ xp_delete を使用して問題を解決しようとしたときに、複数の個人が追求したさまざまなアプローチとソリューションを読んだことがあります。解決策は次のとおりです。
- SSIS メンテナンス タスクを構成するときは、拡張子にピリオド (.) を含めないでください。
- データベース バックアップごとに [Include First-Level] サブ フォルダが存在する場合は、必ず [Include First-Level] サブ フォルダをクリックしてください。
- 必ず上部のバックアップ ファイルをクリックしてください。メンテナンス タスクは、ファイルの種類を確認します。データベースのバックアップについては、バックアップ ファイルのヘッダーをチェックしていると思います。
私のシナリオでは、上記のすべてが正しかった。ルーチン xp_delete にバグがあると言うコメントがウェブ上にほとんどありません。
バックアップ ファイルが削除されていないときに、メンテナンス用の SQL を抽出し、SSMS から実行しました。結果のメッセージは、ファイルが SQL Server バックアップ ファイルではなかったというものでした。このメッセージは、バックアップが正常に復元され、操作可能なデータベースになったため、誤りでした。
データベースの検証に使用されたデータベース コマンドは次のとおりです。
RESTORE HEADERONLY FROM DISK = N'<file path\filename>.Bak'
RESTORE VERIFYONLY FROM DISK = N'<file path\filename>.bak'
上記のコマンドはどちらも、バックアップ ファイルが有効であることを示しています。
次に、イベント ビューアーを開き、接続マネージャーのログイン エラーがあったことを示すメッセージを見つけました。テスト接続ボタンで接続を検証していたので、これは奇妙でした。エラーは、私が作成したアカウントとは関係ありませんでした。
イベント ビューア メッセージ:
*ソース MS SQL SERVER からのイベント ID 17052 の説明が見つかりません。このイベントを発生させるコンポーネントがローカル コンピューターにインストールされていないか、インストールが破損しています。コンポーネントをローカル コンピューターにインストールまたは修復できます。イベントが別のコンピューターで発生した場合、表示情報をイベントと共に保存する必要がありました。
イベントには次の情報が含まれていました。
重大度: 16 エラー: 18456、OS: 18456 [Microsoft][SQL Server Native Client 11.0][SQL Server] ユーザー 'domain\servername$' のログインに失敗しました。*
次に、xp_delete が正しく機能しているマシンにログオンしました。Active Directory を調べたところ、システム アカウントが見つからなかったので、イベント ビューアーに進み、同様のメッセージを見つけました。ここで、domain\server$ のアカウントがシステム セキュリティにマップされていることが明らかになりました。
次のステップは、xp_delete が機能するデータベース セキュリティと機能しないデータベースを比較することでした。xp_delete が機能しなかったデータベースで、セキュリティの下に 2 つのログインがありませんでした。不足している 2 つのログインは次のとおりです。 NT AUTHORITY\SYSTEM NT Service\MSSQLSERVER
NT service\MSSQLSERVER を追加すると、xp_delete が正常に機能しました。
テストの 1 つの方法は、メンテナンス タスクを使用して個々のファイルを削除することです。