SQL Server 2012 Expressサーバーがクラッシュし、一部のデータが失われました。メインMDFをなんとか救出できましたが、LDFが見つかりません。データベースからこの情報を取得する方法はありますかMDF=ファイルまたはmsdb、または見つかった一時的なmdfs?)
これは、MDFのいくつかの場所に保存されます。
sysprufiles
-ローカルにインストールされているいくつかのデータベースを確認しましたが、確認したデータベースの155ページと153ページでそれを見つけました。これは常にファイルのかなり初期になると思いますが、場所が固定されているようには見えません。sysfiles1
-これまでに確認したすべてのデータベースについて、32ページに確実に掲載されています。この回答の最初のバージョンでは、16進エディターを使用してMDFから回答を読み取りました。
Dan Guzman は、文書化されていない、非常にシンプルなDBCCコマンドがあることを指摘しています。
DBCC CHECKPRIMARYFILE ( N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\AdventureWorks2012_Data.mdf',1);
次のような結果を返します
+--------+---------+-------+---------+--------+---------+------+-------------------------+----------------------------------------------------------------------------------------------+
| fileid | groupid | size | maxsize | growth | status | perf | name | filename |
+--------+---------+-------+---------+--------+---------+------+-------------------------+----------------------------------------------------------------------------------------------+
| 1 | 1 | 26240 | -1 | 2048 | 2 | 0 | AdventureWorks2012_Data | C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\AdventureWorks2012_Data.mdf |
| 2 | 0 | 128 | -1 | 10 | 1048642 | 0 | AdventureWorks2012_Log | C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\AdventureWorks2012_log.ldf |
+--------+---------+-------+---------+--------+---------+------+-------------------------+----------------------------------------------------------------------------------------------+
私はそのアプローチがどのように機能するかについて興味があったので、プロセスモニターのアクティビティを調べました。
これにより、ファイルのヘッダー(ページ0)、データベースブートページ(ページ9)、およびファイルのページ32が読み取られます。
上記のいずれのページにも32ページが記載されていなかったので、ページは情報から検索されるのではなく、情報が含まれるようにハードコードされていると思います。