数据库紧急恢复文档

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

数据库紧急恢复文档

 






修订记录


日期

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 ,如需转载请自行联系原作者





相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
Oracle 关系型数据库 Java
程序员必备推荐一款与Swagger媲美的数据库文档生成工具
程序员必备推荐一款与Swagger媲美的数据库文档生成工具
22 0
|
4天前
|
Java 关系型数据库 测试技术
Java代码一键生成数据库文档(案例详解)
Screw是一个自动化数据库文档生成工具,能根据数据库表结构快速生成简洁、多格式(HTML、Word、Markdown)的文档,支持MySQL、MariaDB等多数据库。它使用Freemarker模板,允许用户自定义样式。依赖包括HikariCP数据库连接池和对应JDBC驱动。通过在Java代码或Maven插件中配置,可方便生成文档。示例代码展示了如何在测试用例中使用Screw。文档效果依赖于数据库中的表和字段注释。
|
4天前
|
Java 关系型数据库 MySQL
springboot业务开发--springboot一键生成数据库文档
Screw是一个数据库文档生成工具,能自动化根据数据库表结构生成文档,减轻开发人员工作负担,支持MySQL、MariaDB、TiDB等多种数据库和HTML、Word、Markdown等格式。它依赖HikariCP数据库连接池和Freemarker模板引擎。通过在Spring Boot项目中添加相关依赖并配置,可以用代码或Maven插件方式生成文档。示例代码展示了如何在JUnit测试中使用Screw生成HTML文档。
|
16天前
|
Oracle 关系型数据库 MySQL
java-自动生成数据库设计文档
java-自动生成数据库设计文档
java-自动生成数据库设计文档
|
2月前
|
编解码 缓存 数据库
【软件设计师备考 专题 】编写内部设计文档:屏幕设计和数据库设计
【软件设计师备考 专题 】编写内部设计文档:屏幕设计和数据库设计
65 0
|
2月前
|
Java 关系型数据库 MySQL
基于springboot+vue网吧管理系统(程序+数据库+文档)
基于springboot+vue网吧管理系统(程序+数据库+文档)
|
2月前
|
搜索推荐 Java 数据库
基于springboot+vue网上图书商城(程序+数据库+文档)
基于springboot+vue网上图书商城(程序+数据库+文档)
|
2月前
|
Java 关系型数据库 数据库
基于SpringBoot大药房管理系统(程序+数据库+文档)
基于SpringBoot大药房管理系统(程序+数据库+文档)
|
2月前
|
JavaScript Java 数据库
基于springboot的地方美食分享网站(程序+数据库+文档)
基于springboot的地方美食分享网站(程序+数据库+文档)
|
2月前
|
JavaScript Java 数据库
基于SpringBoot摄影跟拍预定管理系统(系统+数据库+文档)
基于SpringBoot摄影跟拍预定管理系统(系统+数据库+文档)