开发者社区> 技术小甜> 正文

数据库紧急恢复文档

简介:
+关注继续查看

数据库紧急恢复文档

 






修订记录


日期

Date

修订版本Revision version

修改描述

change Description

作者

Author

2008-07-06

1.0

格式化

UltraSQL

2009-06-14

1.1

修正

UltraSQL



 






目 录


一、 在 SQL Server 2000 中重建和恢复 master 数据库

二、 恢复 msdb 数据库

三、 恢复数据到即时点

四、 恢复数据到故障点

五、 利用 MARK 标记回滚即时修改











一、在 SQL Server 2000 中重建和恢复 master 数据库



1. 描述:

master 数据库记录 SQL Server 系统的所有系统级别信息。它记录所有的登录帐户和系统配置设置。master 数据库是这样一个数据库,它记录所有其它的数据库,其中包括数据库文件的位置。master 数据库记录 SQL Server 的初始化信息,它始终有一个可用的最新 master 数据库备份。

 

因为 master 数据库损坏而导致 SQL Server 2000 无法启动的情况下,恢复 master 数据库。首先,我们我们重建 master 数据库;然后,我们通过故障前的备份恢复它;最后,恢复其他生产数据库。

 

2. 需求:

始终有一个 master 数据库的当前可用备份。

执行下列操作后,尽快备份 master 数据库。

o 创建、修改或删除数据库

o 更改服务器或数据库的配置值

o 修改或添加登录帐户

不要在 master 中创建用户对象。否则,必须更频繁地备份 master 。

 

3. 步骤:

1) 将 SQL Server 安装光盘 \x86\data 目录下的所有文件,拷贝到硬盘上的一个指定目录,如 C:\masterrecover 。此时文件为只读,我们需要修改为可读写模式,让重建 master 工具可以操作。全选所有的文件,右键属性,去掉“只读”勾选项。


2) 开始重建 master 数据库,并恢复早期的备份。进入系统目录 Microsoft SQL Server\80\Tools\Binn ,运行 rebuild.exe 。

clip_image002


3) 弹出重建 master 数据库工具界面,输入服务器名和你拷贝文件的制定目录 C:\masterrecover ,点击“Rebuild”。

clip_image004


4) 将提示复制发生和服务器配置,最后提示如下:

clip_image006


5) 接下来重新启动 MSSQLSERVER 。右键系统托盘中的 SQL Server 图标,选择“MSSQLServer – Start”。启动企业管理器,浏览数据库。发现生产数据库不见了。所有系统数据库都经由我们拷贝的制定目录被直接复制生成。master 数据库只包含新装时的信息。msdb 数据库也被重建,涉及的备份设备,备份序列以及作业都丢失了。接下来通过 master 和 msdb 的备份找回生产数据库和备份设备。

clip_image008


6) 退出企业管理器和查询分析器,以如下单用户模式启动 SQL Server 。sqlservr.exe 位于 MSSQL\binn 目录。以 –c 和 –m 参数启动数据库。最小化 DOS 窗口,但不关闭。

clip_image010

o -c 缩短启动时间

o -m 以单用户模式启动数据库。必须以单用户模式去恢复 master 数据库。


7) 打开企业管理器,右击 master 数据库,选择“All Tasks”和“Restore Database”。

clip_image012


8) 弹出数据库恢复界面,点击“From Device”按钮,选择“Select Devices…”按钮。

clip_image014


9) 弹出选择恢复设备界面,选择从磁盘恢复,点击“Add”。clip_image016


10) 弹出选择恢复目标界面,由于 msdb 数据库没有恢复,而不能识别任何备份设备。点击“File name:”,并查找 master 数据库的备份文件。

clip_image018


11) 找到 master 数据库早期创建的备份文件,点“OK”按钮。

clip_image020


12) 返回到选择恢复目标界面,点“OK”按钮。    
clip_image022


13) 返回到选择恢复设备界面,点“OK”按钮。

clip_image024


14) 返回到恢复数据库界面,选择“Options”页。

clip_image026


15) 检查要恢复的数据和日志文件路径,存在的文件将会被覆盖。点“OK”按钮。

clip_image028


16) 将会看到恢复进程界面。直到恢复完成,将弹出如下信息,该信息并不是错误信息。master 数据库已成功恢复,不再被用单用户模式连接。你也将收到一条信息显示你在企业管理器中的连接已经被终止。只有完全关闭企业管理器才能避免讨厌的错误信息。

clip_image030


17) 通过右键单击系统托盘 MSSQLServer 按钮,选择“MSSQLSERVER - Start”。


18) 打开企业管理器,浏览数据库,生产数据库出现了。

clip_image032


19) 下一步恢复 msdb 数据库,见下文。恢复 msdb 数据库和恢复 master 数据库类似,但是不需要以单用户模式登陆。再恢复完 msdb 数据库后,下一步恢复其他数据库变得容易,因为备份设备都已恢复出来。

 


二、恢复 msdb 数据库


1. 描述:

msdb 数据库供 SQL Server 代理程序调度警报和作业以及记录操作员时使用。

msdb 数据库存储所有的备份信息和作业信息。


2. 需求:

始终有一个 msdb 数据库的当前可用备份。

在恢复过程中,务必使 SQL Server Agent 关闭。


3. 步骤:

1) 在恢复前停止 SQL Server Agent 。恢复数据库必需有独家访问权限,而对于 msdb 数据库,SQL Server Agent 破坏了这种独家访问权限。


2) 先得到 RESTORE DATABASE 的文件号,连接到 master 数据库,通过 RESTORE HEADERONLY,找到我们需要去恢复的备份文件。

1
RESTORE HEADERONLY FROM msdbbackupdev;


3) 在查询分析器中连接到 master 数据库,执行恢复。

1
2
3
RESTORE DATABASE msdb
FROM msdbbackupdev
WITH FILE = 1;




三、恢复数据到即时点


1. 描述:

通过事务日志将数据库恢复到某个即时时间点。


2. 需求:

数据库选择完整恢复模型。

始终有可用的备份可恢复到即时点。


3. 步骤:

1) 通过 RESTORE HEADERONLY 查看生产数据库的备份情况,有时可能通过多种组合方式恢复到即时点,我们选择最快的:完整备份+日志备份的方式。

1
RESTORE HEADERONLY FROM prodbackupdev;


2) 通过 STOPAT 参数恢复数据到即时点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--恢复完整备份
RESTORE DATABASE ProdDB
FROM prodbackupdev
WITH FILE = 14, NORECOVERY;
GO
--恢复日志备份
RESTORE LOG ProdDB
FROM prodbackupdev
WITH FILE = 15, NORECOVERY;
GO
--恢复到即时点
RESTORE LOG ProdDB
FROM prodbackupdev
WITH FILE = 16, RECOVERY, STOPAT = '2006-06-06 06:06:06';
GO



四、恢复到故障点


1. 描述:

要想完成故障点的恢复,必须完成尾日志备份。尾日志备份所备份的日志文件中,包含了最后一个成功的日志备份到当前故障点的所有事务。如果不能完成尾日志备份,则只能将数据库恢复到最后一次创建事务日志备份的时间点。自上一次事务日志备份后的对数据库所做的更改将丢失,必须手工重做。

尾日志备份将捕获所有尚未备份的事务日志记录。如果数据库损坏或离线,则可以尝试进行尾日志备份。仅当日志文件未损坏且数据库不包含任何大容量日志更改时,尾日志备份才会成功。如果数据库包含要备份的、在记录间隔期间执行的大容量日志更改,则仅在所有数据文件都存在且未损坏的情况下,尾日志备份才会成功。

2. 需求:

数据库选择完整恢复模型。

始终有可用的备份在尾日志备份失败时,可恢复到最后一次创建事务日志备份的时间点。


3. 步骤:

1) 首先,做尾日志备份。在生产数据库损坏时,用 NO_TRUNCATE 从句备份事务日志。

1
2
3
4
5
--尾日志备份
BACKUP LOG ProdDB
TO prodbackupdev
WITH NAME 'Tail-Log Backup', NO_TRUNCATE;
GO


2) 查看备份情况。

1
RESTORE HEADERONLY FROM prodbackupdev;


3) 恢复到故障点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--恢复完整备份
RESTORE DATABASE ProdDB
FROM prodbackupdev
WITH FILE = 14, NORECOVERY;
GO
--恢复日志备份
RESTORE LOG ProdDB
FROM prodbackupdev
WITH FILE = 15, NORECOVERY;
GO
--恢复尾日志备份到故障点
RESTORE LOG ProdDB
FROM prodbackupdev
WITH FILE = 16, RECOVERY;
GO

 


五、利用 MARK 标记回滚即时修改


1. 描述:

通过 STOPATMARK 和 STOPBEFOREMARK 从句恢复到即时点。允许恢复数据库到个人的事务或者给定事务之前。可能很少会用到生产环境,一般会用到测试或者开发环境,但对于一些重大修改和操作时也用到。这些 RESTORE 从句可以方便的恢复到一个没有达到预期效果的事务之前的时间点。


STANDBY指定一个允许撤消恢复效果的备用文件。STANDBY 选项可以用于脱机还原(包括部分还原),但不能用于联机还原。尝试为联机还原操作指定 STANDBY 选项将会导致还原操作失败。如果必须升级数据库,也不允许使用 STANDBY 选项。


备用文件用于为 RESTORE WITH STANDBY 的撤消过程中修改的页面保留一个“写入时副本”预映像。备用文件允许用户在事务日志还原期间以只读方式访问数据库,并允许数据库用于备用服务器情形,或用于需要在日志还原操作之间检查数据库的特殊恢复情形。执行完 RESTORE WITH STANDBY 操作之后,下一个 RESTORE 操作会自动删除撤消文件。如果在下一个 RESTORE 操作之前手动删除了这个备用文件,则必须重新还原整个数据库。当数据库处于 STANDBY 状态时,您应将这个备用文件视为和任何其他数据库文件同样重要。该文件与其他数据库文件不同,数据库引擎仅在活动还原操作过程中持续打开该文件。


2. 需求:

数据库选择完整恢复模型。

事务中使用 MARK 标记。

始终有可用的备份能恢复到即时点。


3. 步骤:

1) 假设测试数据库已做过完整备份和事务日志备份。

1
2
3
4
5
6
7
8
--完整备份
BACKUP DATABASE TestDB
TO testbackupdev
WITH NAME 'Full Backup';
--日志备份
BACKUP LOG TestDB
TO testbackupdev
WITH NAME 'Transaction Log Backup 1';


2) 通过设定 MARK 标记做事务操作。对于标记事务,必须明确的以 COMMIT 和 ROLLBACK 结束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
INSERT shippers(CompanyName, Phone)
VALUES ('Company1''(027)11111111');
GO
INSERT shippers(CompanyName, Phone)
VALUES ('Company2''(027)22222222');
GO
BEGIN TRANSACTION TIMETOMARK
WITH MARK 'SETMARKER'
GO
INSERT shippers(CompanyName, Phone)
VALUES ('Company3''(027)33333333');
GO
INSERT shippers(CompanyName, Phone)
VALUES ('Company4''(027)44444444');
GO
COMMIT TRANSACTION TIMETOMARK
GO
INSERT shippers(CompanyName, Phone)
VALUES ('Company5''(027)55555555');
GO


3) 如果事务操作没有达到预期效果,此时立即做事务日志备份,以备能恢复到标记之前或之后。

1
2
3
4
--日志备份
BACKUP LOG TestDB
TO testbackupdev
WITH NAME 'Transaction Log Backup 2';


4) 通过查询分析器连接到 TestDB,用EXEC sp_helpfile 决定删除哪个文件,删除掉数据文件和事务日志文件。

1
EXEC sp_helpfile;


5) 关闭数据库。

1
SHUTDOWN WITH NOWAIT;


6) 删除第4步找到的文件。


7) 右击系统托盘中SQL Server的图标,选择“SQL Server - Start”。


8) 通过备份设备找到我们需要的文件号。

1
RESTORE HEADERONLY FROM testbackupdev;


9) 首先做前两个恢复,然后通过 STOPBEFOREMARK 标记恢复,用 STANDBY 语句让数据库处于只读模式,但仍然能够实施进一步事务日志恢复。

1
2
3
4
5
6
7
8
9
10
11
12
13
RESTORE DATABASE TestDB
FROM testbackupdev
WITH FILE = 1, NORECOVERY;
GO
RESTORE LOG TestDB
FROM testbackupdev
WITH FILE = 2, NORECOVERY;
GO
RESTORE LOG TestDB
FROM testbackupdev
WITH FILE = 3,
STANDBY = 'D:\testrestore',
STOPBEFOREMARK = 'TIMETOMARK';


10) 当通过 STOPBEFOREMARK 将恢复数据到 TIMETOMARK 事务之前,假设我们需要恢复到这个事务之后,让数据库在恢复之后可操作。

1
2
3
4
5
RESTORE LOG TestDB
FROM testbackupdev
WITH FILE = 3,
RECOVERY,
STOPATMARK = 'TIMETOMARK';


11) STOPATMARK 恢复了在 STOPATMARK 事务期间提交的所有行,但该事务之后的所有更改将不会恢复。

















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1591629 ,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19980 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22217 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23523 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
12967 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
20879 0
+关注
10140
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载