Ric*_*ick 6 sql-server restore sql-server-2012
我们的 SQL Server 2012 Express 服务器崩溃并丢失了一些数据。我们设法抢救了主 MDF,但找不到 LDF。有没有办法从找到的数据库 MDF 文件或 msdb 或临时 mdfs 中获取此信息?
Mar*_*ith 11
这存储在 MDF 中的几个或多个位置。
sysprufiles
- 我检查了一些本地安装的数据库,并在我检查过的数据库的第 155 页和第 153 页上找到了它。我想这在文件中总是相当早,但它似乎没有固定的位置。sysfiles1
- 到目前为止,对于我检查过的每个数据库,这在第 32 页上都是可靠的。此答案的初始版本使用十六进制编辑器从 MDF 中读取它。
Dan Guzman指出有一个未公开的 DBCC 命令,它非常简单。
DBCC CHECKPRIMARYFILE ( N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\AdventureWorks2012_Data.mdf',1);
Run Code Online (Sandbox Code Playgroud)
返回类似的结果
+--------+---------+-------+---------+--------+---------+------+-------------------------+----------------------------------------------------------------------------------------------+
| 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 |
+--------+---------+-------+---------+--------+---------+------+-------------------------+----------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
我很好奇这种方法是如何工作的,所以查看了进程监视器中的活动。
这最终会读取文件头(第 0 页)、数据库引导页(第 9 页)和文件的第 32 页。
我在前面的任何一页都没有看到第 32 页,所以我认为该页面是硬编码的以包含信息,而不是从它们中查找。
归档时间: |
|
查看次数: |
376 次 |
最近记录: |