Ars*_*nko 6 sql-server-2008 sql-server corruption filestream
我损坏了数据库中与 FILESTREAM 相关的文件。
在.mdf和.ldf文件仍然完好,但是当我尝试上网的数据库,它抱怨,说有关FILESTREAM的文件是不正确的。
我不关心存储在 FILESTREAM 中的数据,但我关心其他数据。我可以从.mdf和.ldf文件中取回它吗?如何?
当我执行:
sp_attach_db @dbname = 'Demo',
@filename1 = N'<File path>.mdf',
@filename2 = N'<File path>.ldf'
Run Code Online (Sandbox Code Playgroud)
答复是:
Msg 5120, Level 16, State 105, Line 1
Unable to open the physical file "<Location>". Operating system error 2: "2(The system cannot find the file specified.)".
Msg 5105, Level 16, State 14, Line 1
A file activation error occurred. The physical file name '<Location>' may be incorrect. Diagnose and correct additional errors, and retry the operation.
Msg 1813, Level 16, State 2, Line 1
Run Code Online (Sandbox Code Playgroud)
我终于找到了怎么做。我发现了一些非常旧的备份。与此同时,数据发生了变化,拥有这些数据的最新版本很重要,这意味着不可能只恢复旧的备份。相反,我做了以下工作,感谢 Michael Eklöf 在 ServerFault 上:
复制当前.mdf和.ldf文件。
列出旧备份的文件组:
use [master]
go
restore filelistonly
from disk = 'E:\Database backups\Hello_backup_2012_03_10_202359_9203520.bak'
go
Run Code Online (Sandbox Code Playgroud)从旧备份恢复数据库,使用先前结果中的文件组名称:
restore database [Hello]
from disk = 'E:\Database backups\Hello_backup_2012_03_10_202359_9203520.bak'
with move 'Hello' to 'D:\Database\Hello.mdf',
move 'Hello_log' to 'D:\Database\Hello_log.ldf',
move 'Hello_files' to 'D:\Database\Hello_files'
go
Run Code Online (Sandbox Code Playgroud)将新版本数据库中缺少的文件组(在我的例子中是 FILESTREAM)设置为离线:
alter database [Hello]
modify file (name = 'Hello_files', offline)
go
Run Code Online (Sandbox Code Playgroud)使数据库脱机。
将服务器在步骤 3 中创建的.mdf和.ldf文件替换为在步骤 1 中复制的文件。
使数据库联机。
丢失文件组的后果仍然存在。有些操作需要数据库完成;这些关键操作之一是备份。换句话说,通过上述六个步骤恢复的数据库是不可能进行完整备份的。
为了恢复备份能力,我复制了数据库的结构(通过任务?生成脚本...),不包括依赖于文件流然后复制数据本身的表。
| 归档时间: |
|
| 查看次数: |
2564 次 |
| 最近记录: |