首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从此删库不再需要跑路,数据库紧急恢复过程

当数据库失效时,请记录下当前时间,然后遵循下面步骤进行恢复。

1. 备份数据库

成功,使用备份文件还原数据库,转第2步。

失败,转第3步。

2. 还原数据库(在另一个服务器操作)

(1)DECLARE@backup_devicenvarchar(128),@log_backup_devicenvarchar(128)

set@backup_device=N'F:/database/myDb.bak'

restoredatabaseMyDb

fromdisk=@backup_device

WITHREPLACE,file=5

(2)根据事务日志来恢复到具体某个时间点

--首先基于一个完全备份点开始做事务日志还原,注意[NORECOVERY]参数

RESTOREdatabase(数据库名)from完全备份设备名withREPLACE,NORECOVERY,

MOVE'MyDb'TO'D:/FMyDb_0606.mdf',

MOVE'FMyDb_Log'TO'D:/FMyDb_Log_0606.ldf'

--开始事务日志

A.查看事务日志点:RESTORE HEADERONLYfromdisk='事务日志的备份的文件完全路径或备份设备名'

B.开始恢复

restoreLOG数据库名from事务日志备份设备名withFILE=1,NORECOVERY

restoreLOG数据库名from事务日志备份设备名withFILE=2,NORECOVERY

restoreLOG数据库名from事务日志备份设备名withFILE=3,NORECOVERY--倒数第二个备份日志

restoreLOG数据库名from事务日志备份设备名withFILE=4,RECOVERY--最后一个备份日志

执行失败的话,转下一步。

3. 复制数据库mdb, ldf文件

执行 net stop mssqlserver 停止SQL Server服务,复制数据库mdb, ldf文件。

成功复制2个文件已经其他文件组,转第4步。

只能复制mdb文件,转第5步。

只能复制ldf文件,转第8步。

4. 附加数据库(数据库文件与日志文件)

CREATEDATABASE[MyDb2]ON

(FILENAME=N'F:/back/MyDb.mdf')

,(FILENAME=N'F:/back/MyDb_log.ldf')

FORATTACH

如果出现失败,转第5步。

5. 附加数据库(只有数据库文件)

CREATEDATABASE[MyDb2]ON

(FILENAME=N'F:/back/MyDb.mdf')

FORATTACH_REBUILD_LOG

如果失败,在SQL2000下,可以尝试(2005版本没有该功能)

dbccrebuild_log('MyDb','F:/MyDb_log.ldf')

转第6步。

当服务器因为硬件失败导致数据库失效时,可能出现以下错误,转第6步:

文件激活失败。物理文件名称'f:/database/MyDb/MyDb_log.ldf'可能不正确。

由于数据库没有完全关闭,无法重新生成日志。

6. 强制附加数据库

a)新建一个同名数据库

CREATEDATABASE[MyDb_temp]

ON(NAME=MyDb_temp,FILENAME=N'F:/temp/MyDb.mdf')

LOGON(NAME=MyDb_temp _Log,FILENAME=N'F:/temp/MyDb_log.ldf')

b) 停止SqlServer

c)将备份的数据库覆盖F:/temp/MyDb.mdf

d)启动SqlServer,(MyDb_temp将变为不可用)

查看数据库状态

SELECT*FROMSYS.DATABASES

SELECT*FROMsys.database_recovery_status

e)将数据库改为紧急恢复模式

ALTERDATABASEMyDbSETEMERGENCY

f)修复数据库

DBCCCheckDB('MyDb')

g)将数据库改为但用户模式

ALTERDATABASEMyDbSETSINGLE_USER

h)再带参数修复数据库

DBCCCheckDB('MyDb',REPAIR_REBUILD)

i)将数据库改为正常模式

ALTERDATABASEMyDbSETONLINE

如果无法创建数据库日志,i步骤将失败,这时候如果能看到数据库表,和进行Select操作,转第7步。

7. 提取数据库数据

a)创建一个新的临时数据库

b)导出数据

执行SELECT'SELECT * INTO MyDb2..'+name+' FROM '+nameFROMsys.objectsWHERETYPE ='U'AND name!='sysdiagrams'

产生数据导出语句,执行他们,将数据复制到新数据库

c)导出存储过程:待续

d)导出触发器:待续

e)导出函数:待续

f)导出自定义数据类型:待续

g)导出用户:待续

h)将新数据库还原到目标服务器

备份/还原这个新建的数据库到目标服务器

i)修复孤立用户(SQL 2005 版)

a)EXECsp_change_users_login'Auto_Fix','GameServer';

b)EXECsp_change_users_login'Auto_Fix','backoffice';

c)EXECsp_change_users_login'Auto_Fix','adminsoft';

j)修复数据库拥有者

EXECsp_changedbowner'sa'

本文作者:CSDN博客作者-greenery,地址:http://blog.csdn.net/greenery/article/details/2570242,分享只为更多人受益,如有侵权请联系删除!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180306B11SB800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券