SQL Server メンテナンスプランのエラー
とりあえず、ちょこっとした情報共有から始めて見る。
どんな話?
SQL Server のメンテナンスプランで、削除したデータベースの名前が出てきて失敗するという現象のお話です。滅多に遭遇しないと思いますが、簡単に共有しておきます。
現象
SQL Server のメンテナンスプランを実行した際に、以下の様なエラーが発生するという現象です。エラーは、メンテナンスプランのログで確認できます。
データベースのバックアップ (完全) (***********)
ローカル サーバー接続 のデータベースのバックアップ
データベース: deleteddatabase,DWConfiguration
種類: 完全
既存データに追加
タスクの開始: 2023-07-20T09:22:04。
タスクの終了: 2023-07-20T09:22:04。
失敗:(0) 選択された 1 つ以上のデータベースがサーバーに存在しません。
データベースのバックアップ (完全) (***********)
ローカル サーバー接続 のデータベースのバックアップ
データベース: deleteddatabase,DWConfiguration
種類: 完全
既存データに追加
タスクの開始: 2023-07-20T09:22:04。
タスクの終了: 2023-07-20T09:22:04。
失敗:(0) メンテナンス プランにデータベース 'deleteddatabase' を含めるのは無効です。
この deleteddatabase データベースは、既に削除されているデータベースで、SQL Server Management Studio(以降、SSMS) のメンテナンスプランでデータベースを選択する GUI では、リストに表示されません。
メンテナンスプランのタスクで特定のデータベースを選択していて、タスクからデータベースを選択解除せずに、選択しているデータベースを削除した場合に発生する現象となります。
動作
メンテナンスプランを作成すると内部的には SSIS パッケージが作成されるのですが、そのパッケージ内にデータベース名を保持しています。GUI は、今存在してるデータベースを表示しているので、削除されたデータベースは表示されず、選択解除もできない状態となっています。
対応
ということで、対応としてはパッケージ内に保持してるデータベース名を削除することになります。SSMS から、対象のメンテナンスプランをデザイナーで表示します。データベースを選択しているタスクを選びます。プロパティを表示し、SelectedDatabases を選択して、[...] ボタンを押します。
下記のように Object コレクションエディターが表示されますので、削除したデータベースの情報を削除します。
今回は「データベースのバックアップ(完全)」のタスクで再現させましたが、メンテナンスプランに複数のタスクが含まれており、それらのタスクで特定のデータベースを選択してる場合、それぞれのタスクで上記の作業が必要になります。
Discussion