恢复单个mdf文件

在做仓库作业的时候,遇到了一些比较特殊的情况,sql server2005中没有传统sql server附带的两个实例数据库,pubs和northwnd,在附加sql server2k的mdf的时候遇到了一些麻烦,系统会提示ldf文件丢失,通常回复单个mdf文件有以下几种办法:

2k:

对SQL中的日志文件不慎删除后,附加MDF文件,提示LDF文件有问题,导致MDF无法附加的情况,错误提示是

未能打开新数据库   'smartcard'。CREATE   DATABASE将终止
  日志文件   'C:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\smartcard_log.ldf'   与主文件不匹配,可能该文件来自另一个数据库,也可能重建过该日志。

一种解决办法是:

1、把需要附加的数据库的MDF文件改名;

2、建一个相同的数据库。库文件名称为要附加的数据库名。

3、打开服务管理器(通常情况下应该在托盘),停止服务

3、将新建的数据库文件的MDF文件删掉,并将原有的数据库mdf文件该为原来的名字

4、重启sql  server服务 ,此时数据库变为置疑状态

5、执行以下语句:

Sql代码 复制代码
  1. sp_configure    'allow updates' ,  1 reconfigure    with    override  
  2. update    sysdatabases    set    status= '32768'     where     name = 'northwnd'   
  3. DBCC   rebuild_log   ('northwnd' , '日志路径\northwnd' )  
  4. update    sysdatabases    set    status= '0'     where     name = 'northwnd'   
  5. sp_configure   'allow updates' ,  0 reconfigure    with    override  
sp_configure   'allow updates',  1 reconfigure   with   override
update   sysdatabases   set   status='32768'   where   name='northwnd'
DBCC   rebuild_log   ('northwnd','日志路径\northwnd')
update   sysdatabases   set   status='0'   where   name='northwnd'
sp_configure   'allow updates',  0 reconfigure   with   override


重置数据库异常状态命令

Java代码 复制代码
  1. sp_resetstatus  'database_name'   
sp_resetstatus 'database_name'


到此时,表面上数据库没有什么问题了,实际上此时数据库处于回避恢复模式。

新建一数据库,将原来的数据导入到新建的数据库中,完毕后将原来的数据库删除,新建,

然后将数据重新导入,就行了。

需要注意的是,SQL在进行数据导入导出的时候,原始表的主建信息会丢掉,所以需要注意以下。

2K5:

2k5已经不再提供操作sysdatabases的办法了,所以用allow updates也没有什么用,但是仍然提供了一下的方法:

Sql代码 复制代码
  1. EXEC    sp_attach_single_file_db   @dbname   =    'northwnd' ,      
  2.         @physname   =   'e:\northwnd.mdf'      
EXEC   sp_attach_single_file_db   @dbname   =   'northwnd',    
        @physname   =   'e:\northwnd.mdf'   



同样可以附加数据库上去。

你可能感兴趣的:(sql,sql,C++,c,server,Microsoft)