SQL Server数据库文件恢复技术

本文介绍了SQLServer数据库的两种备份方法:使用backupdatabase命令和直接复制mdf及ldf文件。重点讲解了只有mdf文件时的数据库恢复流程,包括设置数据库状态、重建日志文件等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        SQL Server数据库备份有两种方式,一种是使用backup database将数据库文件备份,另一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。

 

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

        卸下数据库的命令:Sp_detach_db   数据库名  
        连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db  
        s_attach_db   [@dbname   =]   ′dbname′,   [@filename1   =]   ′filename_n′   [,...16]  
        sp_attach_single_file_db   [@dbname   =]   ′dbname′,   [@physname   =]   ′physical_name′  
        使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将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 '  

2、只有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 '   的新日志文件。  

 
        如果数据库文件是从其他计算机上复制过来的,那么上述办法就行不通了。你也许会得到类似下面的错误信息:
        服务器:   消息   1813,级别   16,状态   2,行   1  
        未能打开新数据库   'test '。CREATE   DATABASE   将终止。  
        设备激活错误。物理文件名   'd:/test_log.LDF '   可能有误。  
 

        解决步骤如下:

        A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在企业管理器里面建立。  
        B.停掉数据库服务器。  
        C.将刚生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。  
        D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。  
        E.设置数据库允许直接操作系统表。此操作可以在企业管理器里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。   
             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 ')   
             此时该数据库处于“只读/置疑/脱机/紧急模式”可以看到数据库里面的系统表  
        G.下面执行真正的恢复操作,重建数据库日志文件   
             dbcc   rebuild_log( 'test ', 'C:/Program   Files/Microsoft   SQL   Server/MSSQL/Data/test_log.ldf ')  

 
             执行过程中,如果遇到下列提示信息:  
             服务器:   消息   5030,级别   16,状态   1,行   1  
             未能排它地锁定数据库以执行该操作。   
             DBCC   执行完毕。如果   DBCC   输出了错误信息,请与系统管理员联系。  
             说明您的其他程序正在使用该数据库,如果刚才您在F步骤中打开了test库的系统表,那么退出企业管理器就可以了。  
            

             正确执行完成的提示应该类似于:  
             警告:   数据库   'test '   的日志已重建。已失去事务的一致性。应运行   DBCC   CHECKDB   以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。DBCC   执行完毕。如果   DBCC   输出了错误信息,请与系统管理员联系。此时打开在企业管理器里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。  
        H.验证数据库一致性(可省略)  
             dbcc   checkdb( 'test ')  

             一般执行结果如下:  
             CHECKDB   发现了   0   个分配错误和   0   个一致性错误(在数据库   'test '   中)。  
             DBCC   执行完毕。如果   DBCC   输出了错误信息,请与系统管理员联系。  
        I.设置数据库为正常状态   
            sp_dboption   'test ', 'dbo   use   only ', 'false '   
            如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。  
        J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在企业管理器里面恢复,也可以使用如下语句完成   
            sp_configure   'allow   updates ',0   
            go  
            reconfigure   with   override  
            go

 

        另外,还有可能遇到这样的报错信息:无法打开数据库。因为该数据库的版本(611)晚于当前服务器版本(539)。这个错误原因可能是因为数据库版本出现问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值