web-dev-qa-db-ja.com

SQLServerファイルグループをオンラインにする

メインデータベースを破壊するSQLインジェクション攻撃を経験しました。

メインデータベースには、ファイルグループに分割された2つのテーブルがありました。

破損したデータベースが疑わしいモードになり、使用できなくなりました。

Dbのバックアップを部分的に復元することができました(ファイルグループのバックアップがなかったため、ファイルグループはありませんでした。悪いことはわかっています)。

疑わしいモードでデータベースを削除できるようになったため、復元されたデータベースと、破損したデータベースにリンクされていたファイルグループが残ります。

今、私はそれらのファイルグループをオンラインに戻す方法を見つけようとしています。

それらを削除してから再度追加できるようにしようとしましたが、取得してから削除できません

Msg 5056, Level 16, State 2, Line 1
Cannot add, remove, or modify a file in filegroup 'FG_Audit' because the filegroup is not online.

回避策はありますか?バックアップからの復元について話している投稿を見つけましたが、ファイルグループの1つがありません。

そのデータを失いましたか?ファイルグループを削除するにはどうすればよいですか?このため、バックアップが機能しなくなりました。

[〜#〜] update [〜#〜]

これを実行すると

SELECT 
 f.name file_group, 
 d.name file_name, 
 d.state_desc file_state
FROM sys.filegroups f
JOIN sys.database_files d
 ON f.data_space_id = d.data_space_id;
GO

DBがオフラインであると不平を言っているすべてのファイルグループは「RECOVERY_PENDING」と言います

1
Federico Giust

John Huang(MVP)は、彼のブログ投稿でアプローチの概要を説明しています。

http://www.sqlnotes.info/2013/05/07/attach-database-with-missing-ndf-file/

基本的なアプローチは、ジョン・ファンによって次のように概説されています。

  1. 名前、ファイルグループ、場所など、データ以外のすべてを含む、同じファイルレイアウトで空のデータベースを作成します
  2. 不足しているファイルをオフラインにします
  3. データベースをオフラインにします
  4. 保存したデータファイルを使用して、空のデータファイルを上書きします
  5. データベースをオンラインにする

これにより、物事を元に戻すことができますが、それでも問題が発生する可能性があります。

したがって、適切で完全なバックアップを維持していることを確認してください。

1
RLF