SQL数据库覆盖能恢复么.mdf文件

SQL数据库覆盖能恢复么.mdf文件,第1张

1、把mdf文件和ldf文件拷贝到数据库的默认路径C:\Program

Files\Microsoft

SQL

Server\MSSQL10MSSQLSERVER\MSSQL\DATA里;

2、在sqlserver里新建个查询,执行下面代码;

USE

master;

GO

CREATE

DATABASE

NewFile

ON

(FILENAME

=

'C:\Program

Files\Microsoft

SQL

Server\MSSQL10MSSQLSERVER\MSSQL\DATA\Filemdf'),

(FILENAME

=

'C:\Program

Files\Microsoft

SQL

Server\MSSQL10MSSQLSERVER\MSSQL\DATA\File_logldf')

FOR

ATTACH;

GO

3、刷新数据库,就出现了新的数据库NewFile;

根据mdf文件和ldf文件还原成功!

mdf文件是Microsoft SQL Server使用的主数据库文件格式,企业级数据库程序; 用于与SQL

Server和相关附加组件一起安装的数据库文件; 用户也可以创建自定义MDF文件。

所以打开mdf文件可以使用Microsoft SQL Server软件进行打开,以下是具体演示步骤:

1、打开Microsoft SQL Server软件后鼠标右击Microsoft SQL Server界面左边

的“Databases”后选择“attach”。注意:Microsoft SQL Server要以管理员身份打开。

2、进入“attach databases”界面后点击“add”按钮进行选择想要打开的mdf文件。

3、在选择界面中找到想要打开的mdf文件并双击确认。这里以“MyDatabasemdf”文件作

为例子。

4、选中的mdf文件后会增加一个扩展文件,这是正常现象。接下来再敲击一次回车键即可成

功打开文件了。

由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。

如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息

设备激活错误。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_LogLDF' 可能有误。

已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_logLDF' 的新日志文件。

但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息

服务器: 消息 1813,级别 16,状态 2,行 1

未能打开新数据库 'test'。CREATE DATABASE 将终止。

设备激活错误。物理文件名 'd:\test_logLDF' 可能有误。

怎么办呢?别着急,下面我们举例说明恢复办法。

/

--A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。

--B.停掉数据库服务器。

--C.将刚才生成的数据库的日志文件test_logldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_datamdf。

--D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何 *** 作。

--E.设置数据库允许直接 *** 作系统表。此 *** 作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右--键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。

use master

go

sp_configure 'allow updates',1

go

reconfigure with override

go

--F.设置test为紧急修复模式

--在查询管理器里设置如下命令:

update sysdatabases set status=-32768 where dbid=DB_ID('test')

--此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表

--G.下面执行真正的恢复 *** 作,重建数据库日志文件

dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_logldf')

/

执行过程中,如果遇到下列提示信息:

服务器: 消息 5030,级别 16,状态 1,行 1

未能排它地锁定数据库以执行该 *** 作。

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。

正确执行完成的提示应该类似于:

警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。

/

--H.验证数据库一致性(可省略)

dbcc checkdb('test')

/一般执行结果如下:

CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。/

--I.设置数据库为正常状态

sp_dboption 'test','dbo use only','false'

--如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。

--J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接 *** 作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成

sp_configure 'allow updates',0

go

reconfigure with override

go

如果备份的数据库有 个文件 分别是 LDF 和 MDF 打开企业管理器 在实例上右击 所有任务 附加数据库 然后选择那个 MDF文件 就可以了

或者在查询分析器中输入

sp_attach_db 数据库名称 路径\文件名 ldf 路径\文件名 MDF

SQL Server数据库备份有两种方式 一种是使用BACKUP DATABASE将数据库文件备份出去 另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式 下面将主要讨论一下后者的备份与恢复 本文假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器)

正常的备份 恢复方式

正常方式下 我们要备份一个数据库 首先要先将该数据库从运行的数据服务器中断开 或者停掉整个数据库服务器 然后复制文件

卸下数据库的命令 Sp_detach_db 数据库名

连接数据库的命令 Sp_attach_db或者sp_attach_single_file_db

s_attach_db [@dbname =] dbname [@filename =] filename_n [ ]

sp_attach_single_file_db [@dbname =] dbname [@physname =] physical_name

使用此方法可以正确恢复SQL Sever 和SQL Server 的数据库文件 要点是备份的时候一定要将mdf和ldf两个文件都备份下来 mdf文件是数据库数据文件 ldf是数据库日志文件

例子

假设数据库为test 其数据文件为test_data mdf 日志文件为test_log ldf 下面我们讨论一下如何备份 恢复该数据库

卸下数据库 sp_detach_db test

连接数据库 sp_attach_db test C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data mdf C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log ldf

sp_attach_single_file_db test C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data mdf

// 本文转自 C++Builder 研究 // ccrun /article aspi= &d=oxit

只有mdf文件的恢复技术

由于种种原因 我们如果当时仅仅备份了mdf文件 那么恢复起来就是一件很麻烦的事情了

如果您的mdf文件是当前数据库产生的 那么很侥幸 也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库 但是会出现类似下面的提示信息

设备激活错误 物理文件名 C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log LDF 可能有误

已创建名为 C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log LDF 的新日志文件

但是 如果您的数据库文件是从其他计算机上复制过来的 那么很不幸 也许上述办法就行不通了 你也许会得到类似下面的错误信息

服务器: 消息 级别 状态 行

未能打开新数据库 test CREATE DATABASE 将终止

设备激活错误 物理文件名 d:\test_log LDF 可能有误

lishixinzhi/Article/program/SQL/201311/16353

1 首先确认已经备份了mdf和ldf文件。

2 在SQL Server中新建一个同名的数据库,然后停止SQL Server服务。

3 用原有的mdf和ldf文件覆盖新建数据库对应的mdf和ldf文件。

4 重新启动SQL Server服务,这是应该会看到这个数据库处于置疑(Suspect)状态。(人品好的话,这个时候数据库就已经恢复正常了,上次xrf的数据库就是这样被我恢复的。人品不好的话,下面的步骤也不行,我有一次就是找了一个北京做数据恢复的公司才恢复完毕。)

5 在SQL查询分析器中执行以下命令,以允许更新系统表:use mastergosp_configure ‘allow updates’,1

reconfigure with overridego

6 将这个数据库置为紧急模式:

update sysdatabases set status = 32768 where name = 'db_name'go

7 使用DBCC CHECKDB命令检查数据库中的错误:

DBCC CHECKDB(‘db_name’)GO

8 如果DBCC CHECKDB命令失败,请转至第10步,否则先将数据库置为单用户模式,再尝试对其进行修复:

sp_dboption 'db_name',’single user’,’true’

DBCC CHECKDB(‘db_name’, REPAIR_ALLOW_DATA_LOSS)GO如果在执行DBCC CHECKDB(‘db_name’, REPAIR_ALLOW_DATA_LOSS)命令时提示说数据库未处于单用户模式状态的话,则重新启动SQL Server服务,然后继续尝试。

9 如果DBCC CHECKDB(‘db_name’, REPAIR_ALLOW_DATA_LOSS)命令失败,请转至第10步,否则若成功修复了数据库中的错误:

重新执行DBCC CHECKDB(‘db_name’)命令,确认数据库中已没有错误存在。

清除数据库的置疑状态:sp_resetstatus 'db_name'

清除数据库的单用户模式状态:sp_dboption 'db_name',’single user’,’false’

重新启动SQL Server服务,如果一切正常的话,则数据库已经成功恢复。

10 如果以上步骤都不能解决问题的话,请参考附件中的文档尝试通过重建事务日志来恢复数据库中的数据。

如果您只有MDF文件,问题就更加复杂一些,我们需要直接重建事务日志了:

1 在SQL Server中新建一个同名的数据库,然后停止SQL Server服务。

2 用原有的ldf文件覆盖新建数据库对应的mdf文件,将其日志文件(ldf)删除。

3 启动SQL Server服务,并将数据库置为紧急模式(同上: 步骤5和步骤6)。

4 停止并重新启动SQL Server服务。

5 执行以下命令重建数据库日志文件:(下面是个示例,您要用您实际的数据库名)

DBCC REBUILD_LOG(’cas_db’, 'D:\cas_db\cas_db_LogLDF')

6 重新将该数据库置为单用户模式。

以上就是关于SQL数据库覆盖能恢复么.mdf文件全部的内容,包括:SQL数据库覆盖能恢复么.mdf文件、mdf文件如何打开、.mdf文件覆盖了能恢复么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9691422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存