9.8.6恢复系统数据库

系统数据库和用户数据库一样容易发生故障,所以确保它们得到足够的保护十分重
要。一般来说,恢复系统数据库时有两种选择。可以从备份还原,或者从头重建它们。我
强烈推荐备份还原方法,因为从头重建意味着有人量的工作要做。
由于系统数据库通常很小,备份它们不需要很多时间,而且在备份后它们也不会占用
太大空间。系统数据库结构的改变频率决定了需要多久备份一次这些数据库,以最少化还
原后的工作。
1 .恢 复 master数据库
恢复master数据库有两种情况。第一种情况中,服务器是可以访问的。而第二种情况
中,SQL Server是不可访问的。
如果可以连接SQL Server,服务器实例就必须以单用户模式启动,以便还原和恢复
master数据库。
(1)要以单用户模式启动SQL Server的一个实例,需要在命令提示窗口中输入以下命令:

sqlservr.exe -m
(2) 如果服务器支持SQL Server的多个实例,要确定启动了正确的实例。SQL Server 的默汄实例位于\Program FilesXMicrosoft SQL Server\ MSSQL.l \MSSQL\Binn 文件夹中。每
一个额外的实例都有自己的MSSQL.x文件夹,但排序根据的是它们的安装顺序,所以这 些文件夹可能不是按照数字顺序排列的。
(3) —旦以单用户模式启动了服务器,就可以还原master数据库了。要完成这一操作, 需要启动另一个命令提示窗口,使用SQLCMD登录SQL Server实例。下面的例子显示了
一个使用 Windows Security (-E)登录到 AughtEight (-S) SQL Server 实例的命令:
C:\>SQLCMD -S AughtEight -E
提示:
要获得SQLCMD语法的完整描述,可参考SQL Server 2008联机丛书中的“使用sqlcmd
实用工具”主题。
(4)成功登录服务器之后,可使用普通的RESTORE语法完成master数据库的还原:
1>RESTORE DATABASE MASTER FROM DISK =‘E:\SQLBackups\MasterFull.BAK * 2>G0
Processed 360 pages for database ‘Master1, file ‘master1 on file 1.
Processed 2 pages for database ’Master*, file *mastlog* on file 1.
The master database has been successfully restored. Shutting down SQL Server.
SQL Server is terminating this process.
如前例所示, -旦还原了 master数据库,SQL Server会自动关闭该实例,这样就可以 用新还原的master数据库重启实例。 可在单用户模式下还原的数据库只有master数据库。还原了 master数据库后,就可以 重启SQLServer,继续还原其他系统或用户数据库。 如果SQL Server实例由于master数据库或整体服务器出现故障而不可访问,那么就需 要重建master数据库。在 SQL Server的之前版本中,可以通过一个命令提示实用工具完成 这个任务。但 是 Microsoft不再支持这个实用工具。所以要重建master数据库,就必须重 新安装SQL Server。重新安装完成之后,就可以使用master数据库的最新备份来还原服务 器,过程和前面所说的一样。
当成功还原master数据库并重启SQL Server实例以后,剩下来的系统数据库和用户数 据库会被自动重新装载。如果master数据库的备份不是最新的或根本不存在,那么剩下的 系统和用户数据库就不会被自动重新装载,必须还原或附加它们。假设在文件系统中剩下
的数据库文件还是未被改动的,那么附加这些数据库会较快也较简单。附加现有数据库最
简单的方式是使用SQL Server Management Studio中提供的图形化工具。
(1) 要附加一个数据库,右 击 “数据库”文件夹并选择“附加”命令,此 时 “附加数
据库”窗口将会显示。
(2) 单击“添加”按钮浏览至数据库的MDF文件的位置,然后选择该文件。每个数据
库 的 MDF文件包含的元数据标识了数据库的所有组成文件的位置。只要没有文件被“未

找到”消息标记,附加该数据库就没有任何困难。
(3)如果有一个数据文件丢失,那么将无法附加数据库。但是如果只是丢失了事务日
志文件,数据库仍然可以成功附加,只要选中丢失的日志文件,然后单击“删除”按钮即
可。一旦将日志文件从列表中删除,就可以单击“确定”按钮附加数据库。SQLServer将 使用原来的元数据重新创建一个日志文件。
2 .孤立的用户
在还原或附加master数据库和所有其他数据库之后,有必要检査用户数据库中是否有 孤立的用户。如果一个SQL Server登录名被添加到master数据库并被授予访问数据库的权 限,但是master数据库的备份在该登录名创建之前就已经执行,那么这时候就会出现孤立 的用户。当附加或还原用户数据库时,用户数据库包含该数据库用户,但是master数据库 中的登录名并不存在。
要找到并修复孤立的用户,有两种方法可用。第一种是使用ALTER USER命令。假设
用户FredF是孤立的,下列代码可以将数据库用户与服务器登录名相关联:
USE SmallW orks GO
ALTER USER FredF WITH LOGIN =FredF
第二种方法是使用已弃用的sp change users login存储过程。输入参数@人比011定义
了 sp change users login存储过程的3 个模式。表 9-3列出了该存储过程支持的3 种操作。

9 .8 .7 数据库还原小结
和备份策略一样,有一个还原计划十分重要。一个好的还原计划应覆盖任何可能的失
败组合,并列出能在最短时间内以最小的数据损失还原数据库的步骤。我不可能在这里详
细介绍每一个可能的组合,所以需要您自己分析自己的基础设施,然后选择最适合自己的
环境的备份还原计划。
9 .9 数据库快照
如果数据库被完全损坏,那么数据库快照实际上是不能用来进行灾难恢复的。不过,
它可以用来逆转数据库修改造成的影响,也可以将査询从繁忙的事务数据库重定向到其他
地方。
什么是数据库快照?快照是数据库在某个时间点的静态只读视图。快照的创建可以瞬
时完成,因为这个过程并没有真正复制作为快照源的数据库。相反,创建的数据文件只包
含源数据库中自快照创建之后改变过的数据页。此项功能叫做Copy On Write(写时复制)。 当最初创建数据库快照时,会创建几乎同样的数据文件来存放快照内容。这些数据文件的
区别在于,它们有与源数据库相独立的物理位置,而且在一开始只消耗很少磁盘空间。
了解数据库快照的最简单的方法是创建并使用一个快照。下面的脚本创建了
Small Works数据库的--个快照:
CREATE DATABASE SmallWorksSnapShot ON (NAME = * SmallWorksPrimary‘ , FILENAME = ‘D:\SQLSnapShotData\SmallWorksPrimary.mdf*) ,(NAME = * SmallWorksdatal* , FILENAME = 1D:\SQLSnapShotData\SmallWorksDatal.ndf *) ,(NAME = ‘SmallWorksdata2 * , FILENAME =‘D:\SQLSnapShotData\SmallWorksData2.ndf*) AS SNAPSHOT OF SmallWorks
观察文件系统,可以发现SmallWorks快照数据文件的大小是10MB,和创建时一样(由于 对 SmallWorks数据库所做的改动,您的文件大小可能会有所不同),但实际上它总共只占用 256KB空间,其中主文件占用128KB,每个辅助数据文件占用64KB。SQL Server保留了与数 据库现在正在使用的同样数量的磁盘空间,但只分配足够存储数据库结构的元数据的空间。
现在看一下SmallWorks和 SmallWorksSnapShot数据库中的数据,了解当对源数据库
做出改动时,快照数据库和数据发生了什么情况。
( 1 ) 首先编写一个査询,从 SmallWorks 和 SmallWorksSnapShot 数据库中的 dbo.Person
表的前三行返回一些数据,如下例所示:
USE SmallWorks GO
SELECT FirstName, LastName, EmailAddress FROM dbo.Person WHERE PersonlD < 4

FirstName LastName EmailAddress
Ken Sanchez [email protected] Terri Duffy [email protected] Roberto Tamburello [email protected]
(3 row(s) affected) USE SmallWorksSnapShot
GO
SELECT FirstName, LastName, EmailAddress FROM dbo. Person WHERE PersonlD < 4
FirstName LastName EmailAddress
Ken Scinchez [email protected] Terri Duffy [email protected] Roberto Tamburello [email protected]
(3 row<s) affected)
可注意到,两个数据库返回了同样的结果。实际t , 对快照数据库的查询会被重定向 到源数据库,因为自从快照创建之后包含联系人信息的数据页就没有改变过。
(2)现在,通过更改数据库中所有人的姓,更新源数据库中的数据。把它们全部更新,
这样就可以更简单地检查对保存快照数据库的物理数据文件的改动。
USE SmallWorks GO
UPDATE dbo.Person SET LastName = * Flintstone * (5000 row(s) affected)
SmallWorksSnapShot文 件 现 在 占 用 1.2MB的空间(您的结果可能与此不同)。更新 SmallWorks数据 库 中 的 5000行导致包含这些行的数据页被复制到快照中,使得快照的大 小变大。
(3)现在再次查询这两个数据库,看看结果如何。不出所料,源数据库改变了,反映
了 LastName列的更新。
USE SmallWorks GO
SELECT FirstName, LastName, EmailAddress FROM dbo.Person WHERE PersonlD < 4
FirstName LastName EmailAddress

Ken Flintstone Terri Flintstone Roberto Flintstone
ken.s^[email protected] terri.duffyQadventureworks.com [email protected]
(3 row(s) affected)
但是,快照数据库仍然反映的是数据在快照创建时的状态。这就是数据库的“静态只
读副本”的意思。
USE SmallWorksSnapShot
GO
SELECT FirstName, LastName, EmailAddress FROM dbo.Person WHERE PersonlD < 4
FirstName LastName EmailAddress
Ken S, anchez [email protected] Terri Duffy [email protected] Roberto Tamburello [email protected]
(3 row(s) affected)
可以根据需要创建数据库的多个快照,但要记住,每个额外的快照都会增加源数据库
的开销。因为每个更新或删除数据或对象的命令都会写入快照数据库,以记录数据库的前
一个版本。
9 .9 .1 数据库快照限制
数据库快照有一些限制,而快照的源数据库也有一些限制。
? 数据库快照不能备份。因为快照是从源数据库中检索的数据和内部存储的数据的
组合,所以不可能真正备份快照。
? 数据库快照不能修改。
? 有快照存在时,不能删除源数据库。
? 有快照存在时,不能将源数据库还原到快照创建之前的时间点。
9 .9 .2 灾难恢复和数据库快照
如何使数据库快照在灾难恢复中很好地发挥作用?这是个很好的问题。快照可以用来
撤消对源数据库的更新,因为它们有修改之前的数据的原副本。
1 .撤消更新
在上一个例子中,我们用姓Flintstone更新了 Person表中的5000行。要撤消这个更新 的影响,可以使用如下脚本:

USE SmallWorks GO
UPDATE dbo.Person
SET LastName =S.LastName
FROM dbo.Person P JOIN SmallWorksSnapShot.dbo.Person S ON S.PersonlD =P.PersonlD
现在,对源数据库的査询会显示所有的姓恢复为原来的值。
2 .撤消删除
考虑如下命令,它删除了 dbo.Person表中的50行:
DELETE dbo.Person WHERE PersonlD < 51
如果这是一个恶意或意外的更新,还原数据的一般模式是把数据库还原到一个测试服
务器,然后将数据从测试服务器复制到生产数据库。通过数据库快照,就不需要使用数据
库备份了。
要还原数据,只需要从快照中选择数据,然后插入回源数据库表即可。
U$E SmallWorks GO
INSERT dbo.Person (PersonlD, FirstName, LastName, EmailAddress) SELECT PersonlD, FirstName, LastName, EmailAddress FROM SmallWorksSnapShot.dbo.Person WHERE PersonlD < 51
3 .撤消删除
如果从源数据库中删除了一个数据库对象,那么可以为其编写脚本,并从快照数据库中
重新创建它。如果该对象是一个表,那么可以使用之前用于撤消删除的方法重新填充该表。
--Inadvertant deletion of the Person table USE SmallWorks GO
DROP TABLE dbo.Person
- - Recreate the Person Table
USE SmallWorks GO
CREATE TABLE dbo.Person( PersonlD int NOT NULL, FirstName varchar(50) NOT NULL, MiddleName varchar(50) NULL, LastName varchar(50) NOT NULL, EmailAddress nvarchar (50) NULL ) ON SWUserDatal

—-Repopulate the table INSERT dbo.Person (PersonlD, FirstName, LastName, EmailAddress) SELECT PersonlD, FirstName, LastName, EmailAddress FROM SmallWorksSnapShot.dbo.Person
4 .从快照还原
如果源数据库遭到了一些不希望看到的改动,可以将快照指定为还原操作的源,把数
据库还原到快照创建时的状态。记住,如果存在多个快照,数据库就不能够被还原到快照
创建之前的时间点。首先必须删除那些快照。下面的命令演示了如何从一个数据库快照还
原 SmallWorks数据库:
USE MASTER
GO
RESTORE DATABASE SmallWorks FROM DATABASE_SNAPSHOT = 1SmallWorksSnapShot‘
9 .1 0 小结
本章介绍了备份和还原数据库的不同方法,还介绍了灾难恢复的不同方面,这对于将
数据损失降到最低和保护工作十分重要。希望您已经明白了制定有效计划的重要性。数据
库管理员负责维护数据的完整性和安全性。要完成这项重要的任务,必须对灾难做出应对
计划,更重要的是要计划如何以最小的数据损失和最短的停机时间从灾难中恢复过来。

原文地址:https://www.cnblogs.com/zhouwansheng/p/9453869.html

时间: 2024-08-28 09:14:42

9.8.6恢复系统数据库的相关文章

电脑重装系统后如何恢复Mysql数据库

电脑重装系统后如何恢复Mysql数据库 一.[设置mysql的path] 比如:我的mysql在:D:\DataBase\mysql-5.7.13-winx64,可以在环境变量中重新新建一个环境变量Mysql_Home,变量值就是Mysql的安装目录 如图:   然后,在Path的变量值添加;%Mysql%\bin; ,如图:   二.[测试] Win+R,输入cmd,弹出命令行窗口,输入mysql admin –V,若出现如下信息,说明配置环境变量成功!   三.[改变basedir与data

SQL Server 2012笔记分享-51:理解系统数据库恢复

下图是一个很重要的表格,详细描述了系统数据库的备份需求,支持的恢复模式和还原的选项. master数据库:需要备份,需要在单用户模式下恢复 model数据库:需要备份,恢复数据库的方式为T3608 trace flag msdb数据库:需要备份,恢复模式默认为简单,恢复数据库的方式和恢复普通数据库一样,没有特殊要求 tempdb数据库:不需要备份,因为在实例启动的时候tempdb会重建:     详细的步骤可以参考 http://msdn.microsoft.com/zh-cn/library/

医院his系统数据库恢复

医院IT系统的重要性堪比金融行业,"银行系统宕机,老百姓不能取钱:医院HIS系统宕机,老百姓不能看病", 医院信息系统称得上是迄今为止企业级信息系统中最复杂的一类.  山东某医院HIS系统SQL2008数据库恢复  [数据恢复客户] 山东某医院 [数据恢复故障描述] 医院的HIS系统服务器由于异常断电造成服务器宕机,来电后重新起机器,医院HIS系统不能运行, 导致医院所有的收费及护士工作站等所有部门无法使用. [数据恢复解决方案] 镜像所有硬盘,然后重新去RAID化经过近5个小时的努力

SQL Server 系统数据库恢复

标签:SQL SERVER/MSSQL SERVER/数据库/DBA/故障恢复/master 概述 SQL Server 维护一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的运行至关重要.每次进行大量更新后,都必须备份多个系统数据库.必须备份的系统数据库包括 msdb.master 和 model.如果有任何数据库在服务器实例上使用了复制,则还必须备份 distribution 系统数据库.备份这些系统数据库,就可以在发生系统故障(例如硬盘丢失)时还原和恢复 SQL Serve

某系统数据库的增量备份策略恢复测试过程

上半年,公司服务器虚拟化项目已经上线,所以近期的主要工作重心以P2V(物理机到虚拟机)的迁移为主,作为业务系统核心的后台数据库的迁移更是这项工作的重中之重. 本次数据库的迁移工作主要包含两部分的内容:一是跨平台(windows2003到OEL6)的数据库版本升级(Oracle 9.2.0.6到Oracle 11.2.0.4):二是数据迁移.由于这些变迁,伴随着发生了许多操作方式(习惯)的变化,最显著的一点就是备份方式的变更了.之前的备份方式是采用exp逻辑导出的方式,就目前业务运行的情形来看,此

创建RMAN备份 恢复目录数据库

这是前段时间给客户做的RMAN备份策略,今天有时间整理出来,希望对大家有些帮助,如有不对的地方欢迎大家给予指点,谢谢!   创建成恢复目录数据库 如果不是在本地配置RMAN 恢复目录, 在一台WINDOW2000电脑上安装ORACLE数据库,最好保证数据库版本与目标数据库的版本想同. 建立RMAN 数据库用户及表空间: RECOVER CATALOG 表空间(cattbs):1G系统表空间:       100MUNDO表空间:     100M临时表空间(TEMP):        100M 

SQL Server四个“系统数据库”作用的简介

master.model.msdb.tempdb简称为“3M1T”,在后续的版本选择安装不同的组件后也有其他系统级数据库,如ReportServer.Distribution等,本次主要介绍3M1T数据库. [master数据库]:master数据库是SQL Server中最重要的数据库,记录了SQL Server系统中所有的系统信息,包括登入账户.系统配置和设置.服务器中数据库的名称.这些数据库文件的位置.系统进程. linked server及SQL Server初始化信息等.一旦数据库文件

SQL Server 2012笔记分享-38:了解系统数据库

master 数据库 记录 SQL Server 实例的所有系统级信息. master 数据库记录 SQL Server 系统的所有系统级信息.这包括实例范围的元数据(例如登录帐户).端点.链接服务器和系统配置设置.此外,master 数据库还记录了所有其他数据库的存在.数据库文件的位置以及 SQL Server 的初始化信息.因此,如果 master 数据库不可用,则 SQL Server 无法启动.在 SQL Server 中,系统对象不再存储在 master 数据库中,而是存储在 Reso

机房收费系统——数据库设计说明书

GB8567--88 数据库设计说明书 1      引言 优质数据库在处理大数据的程序或系统中是有非常重要的作用的,所以对于数据库的设计有很多的要求和规定.首先数据库要有很好的可维护性.灵活性,并且数据库的算法逻辑性也要有一定的优化性,这样可以对资源进行有效利用,并且处理数据的时间也会缩短. 1.1   编写目的 由于上机的人越来越多,产生的上机数据越来越多,原始的保存方式已经不能满足数据存储的需要,所以使用数据库对各种记录进行存储.并且数据库可以节省很多的资源,如人力.时间.空间等. 数据库