当数据库出现故障时,请记录当前时间,然后按照以下步骤进行恢复。1、数据库备份成功,使用备份文件恢复数据库,转步骤2,失败转步骤3。2、恢复数据库(在另一台服务器上操作)(1)DECLARE@backup_devicenvarchar(128),@log_backup_devicenvarchar(128)set@backup_device=N'F:/database/myDb.bak'restoredatabaseMyDbfromdisk=@backup_deviceWITHREPLACE,file=5(2)根据事务日志恢复到特定时间点——首先,基于全备份点恢复事务日志,注意[NORECOVERY]参数RESTOREdatabase(数据库名)fromfullbackupdevicenamewithREPLACE,NORECOVERY,MOVE'MyDb'TO'D:/FMyDb_0606.mdf',MOVE'FMyDb_Log'TO'D:/FMyDb_Log_0606.ldf'--启动事务日志A.查看事务日志点:RESTOREHEADERONLYfromdisk='事务日志的备份文件完整路径或备份设备名称'B.开始恢复从FILE=1的事务日志备份设备名恢复LOG数据库名,NORECOVERY恢复LOG数据basenamefromtransactionlogbackupdevicenamewithFILE=2,NORECOVERYrestoreLOGdatabasenamefromtransactionlogbackupDevicenamewithFILE=3,NORECOVERY--倒数第二个备份日志restoreLOGdatabasenamefromtransactionlogbackupdevicenamewithFILE=4,RECOVERY--如果上次备份日志执行失败,则进入下一步。3、复制数据库mdb和ldf文件,执行netstopmssqlserver停止SQLServer服务,复制数据库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')FORATTACHif出现如果失败,则转到第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)停止SqlServerc)覆盖备份数据库到F:/temp/MyDb.mdfd)启动SqlServer,(MyDb_temp将变得不可用)查看数据库状态SELECT*FROMSYS.DATABASESSELECT*FROMsys.database_recovery_statuse)数据库更改为紧急恢复模式ALTERDATABASEMyDbSETMERGENCYf)修复数据库DBCCCheckDB('MyDb')g)将数据库更改为用户模式??ALTERDATABASEMyDbSETSINGLE_USERh)修复带参数的数据库DBCCCheckDB('MyDb',REPAIR_REBUILD)i)将数据库更改为正常模式ALTERDATABASEMyDbSETONLINEifnottocreate数据库日志,步骤i将失败。此时,如果能看到数据库表并进行Select操作,则转到第7步。7.提取数据库数据a)创建一个新的临时数据库b)导出数据执行SELECT'SELECT*INTOMyDb2..'+name+'FROM'+nameFROMsys.objectsWHERETYPE='U'ANDname!='sysdiagrams'生成数据导出语句,执行,复制数据到新数据库c)导出存储过程:待续d)导出触发器:待续e)导出函数:待续f)导出自定义数据类型:待续续g)导出用户:续h)将新数据库恢复到目标服务器将这个新创建的数据库备份/恢复到目标服务器i)修复孤立用户(SQL2005版本)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'总结:最好定期备份。..
