系统数据库灾难恢复

系统数据库灾难恢复

原文: http://www.cnblogs.com/tom-fu/archive/2009/05/05/1449952.html

 

以下简要概括当系统数据库文件丢失或是因为页面损坏造成数据库启动异常的解决办法:

数据库

资源数据库

描述

与master数据库在同一目录中名称为mssqlsystemresource.mdf与mssqlsystemresource.ldf的两个文件,资源数据库用于保存数据库中可执行的系统对象,如存储过程、视图、触发器及函数。在master还原后要还原此数据库。如果你在安装完后,移动了master数据库的位置,一定要把此数据库也拷贝至与master相同的目录下。

备份要求

更新相应补丁后应及时进行备份。此文件为只读,在数据库运行期间可以拷贝的方式进行备份

解决办法

如果不能正常启动可以把备份粘贴回来,或是从其它和服务器更新过相应补丁的文件拷贝来使用

数据库

master

描述

保存登录、数据库文件/文件组、数据库、备份设备、数据库配置相关选项、远程链接等信息。启动时首先要还原此数据库。

备份要求

在上述内容发生变化时应及时备份

解决办法

  1. 首先尝试在启动参数中添加-m;-T3607,以单用户并不还原master的方式启动,如果能正常启动,则还原最后的备份。
  2. 如果不能正常启动,可以使用start /wait setup.exe /qn INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1命令行的方式重新安装系统数据库(具体可参见安装光盘中TEMPLATE.INI文件描述的方法)。重新生成之前如果model和msdb没有相应的备份,一定要先把它们拷贝出来,否则会在重新生成时被覆盖。
  3. 上面的方法时间会长一些,取巧的方法是可以从其它服务器有相同安装目录的机器上拷贝master.mdf和mastlog.ldf两个文件,然后再使用-m;-T3607参数启动就可以启动了。这时再还原相应的备份就可以了。

数据库

model

描述

数据库模板,可以在此数据库中添加用户定义的对象,在创建数据库后就都会包含这些对象了。你也可以修改数据库文件的大小及增量信息,也会影响新创建的数据库。同时,tempdb需要此数据库进行创建,因此tempdb是在还原了此数据库之后才创建的。

备份要求

此数据库虽然为完整恢复模式,但用户不会频繁修改它。因此只在添加或删除用户定义对象时备份就可以了。

解决办法

使用-T3608参数启动,要求只还原master数据库。在发现有问题时,应首先尝试进行尾日志备份。如果你确定在做了最后的更改进行了备份,则可以直接使用替换现有数据库的方式进行还原。

代码:

数据库

msdb

描述

保存任务计划、SSIS定义、数据库维护历史记录等信息,因此如果此数据库无法加载时,Agent服务也是无法启动的。

备份要求

在上述内容发生变化时应及时进行备份

解决办法

如果msdblog.ldf由于硬件故障在还原时出现问题,不会影响正常使用,但是在错误日志中会发现服务自动为其创建了一个msdb_log.LDF的日志文件。SQLSERVER选择这么做是因为此数据库是简单恢复模式,如果正常关闭数据库时日志中提交或未提交的事务都能保证数据的一致性,因此重建事务日志来说是安全的。如果是因为mdf有问题,实例可以正常启动,但在访问此数据库时报错,Agent也无法启动。因为此数据库没有恢复成功,如果有备份则只能使用SQL命令还原而不能在界面中操作。如果没有备份则只能重建系统数据库或是用其它的文件替换,所有任务计划等信息都必须重建。在顺利完成还原并使用数据在线后,会看到错误日志中有如下的错误信息:Error: 8355, Severity: 16, State: 1.这时可以手工打开ENABLE_BROKER选项就不会出现这样的错误信息了。

C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Install安装目录下有个instmsdb.sql脚本也可以用于重建此数据库。

数据库

tempdb

描述

每次重启服务后都会被重新创建,因此应该调整其初始大小和存储位置以防止数据及日志文件频繁增长和磁盘空间不足的问题。

备份要求

临时存储不需要进行备份

解决办法

常见问题为数据文件及日志文件比较大,这可能是因为在重建或重组较大表的索引时选择了使用此数据库作为临时的排序存储。或是因为并发创建了太多了临时表,并且操作了大量的数据。可以分别收缩一下数据和日志文件,如果不能收缩请确保没有长时间打开的事务正在操作临时结果集。

在master相同目录下还有两个distmdl.mdf和distmdl.ldf的文件,保存了复制时分发数据库中的相关存储过程和表定义。因此也应对其进行备份。不过如果这两个文件损坏并不会影响启动和复制的创建。

你可能感兴趣的:(001-B,数据库管理)