DB2实验教程:数据库恢复

发布时间:2020-10-03编辑:脚本学堂
DB2实验教程:数据库恢复

实验任务:
A.为数据库和表空间创建备份镜像;
B. 从备份镜像恢复数据库;
C. 对数据库或表空间进行完全的前滚恢复;
D.在异常状态下重新激活数据库。

一. 决定DB2目前的日志配置参数
1.本实验开始之前应先在命令中心中执行脚本recovrst,将数据库的配置参数设置成本实验所需的值。
2.在命令中心中输入并执行connect to musicdb,激活MUSICDB数据库。
3.控制中心中右键单击MUSICDB数据库,在弹出菜单中选择“配置参数”,再在“数据库配置—MUSICDB”窗口中查看“日志”下的LOGFILSIZ的值,该参数的值被设置为6,远小于 Windows平台下它的默认值250。
4.查看主日志文件的数目,DB2将于什么时候分配这些主日志文件?
在“数据库配置—MUSICDB”窗口中的“日志”下可查看到LOGPRIMARY参数值为3,当我们发出ACTIVE DATABASE命令或者第一个应用程序连接到数据库时,DB2将会分配这三个主日志文件,且其中每个日志文件的大小为LOGFILSIZ+2个4KB页,因此所有主日志文件将占据3*(6+2)*4KB,即96KB空间。
5.查看辅助日志文件的数目,DB2将于何时分配这些辅助日志文件?
辅助日志文件会在事务未提交但主日志文件写满的时候根据需要一次分配一个(直到数据库配置参数LOGSECOND规定的数目),本实验中LOGSECOND为默认值2,因此系统最多允许两个辅助日志文件。辅助日志文件的大小同样由参数LOGFILSIZ指定。
6.查看当前系统所使用的日志类型(循环日志还是归档日志),哪些参数可以提供日志类型的相关信息。
LOGRETAIN和USEREXIT可被用来设置系统采用何种日志类型,本实验中这两个参数均被设为默认值否,因此系统采用循环日志方式。如果LOGRETAIN被设为Recovery或者USEREXIT被设为Yes,那么系统将采用归档日志方式。
7.考虑循环日志能够支持崩溃恢复、版本恢复、前滚恢复中的哪些类型?
循环日志只能支持崩溃恢复和版本恢复,但还不能支持前滚恢复!
8.考虑日志文件保存在哪里?
配置参数中的LOGPATH指定日志文件的保存路径,因此本实验的日志文件保存在X:inst1NODE0000SQL00001SQLOGIR下。
9.数据库的工作单元可能被意外地中断,假如部分工作单元的所有变更完成和提交之前发生了电源故障,那么系统就需要执行崩溃恢复再次回到一致状态。命令restart database可以实现这个功能。如果AUTORESTART被设置成开(默认方式),那么崩溃发生后,应用程序首次连接到数据库时将会自动启动崩溃恢复机制。本实验AUTORESTART参数被设置为开。
10.Windows命令提示符下,进入目录X:inst1NODE0000SQL00001。
11.输入命令:dir /w,查看该路径下有哪些文件和目录。
12.输入命令cd SQLOGDIR和dir /w可以查看到该目录下有三个日志文件,这与参数设置相符。
13.选择命令中心的“交互式”标签页,再选择“命令中心—>选项”菜单,在“命令中心选项”窗口中选择“执行”标签页,确保“自动落实sql语句”未被选中。点击“确定”按钮。
执行connect to musicdb
执行update stock set qty=qty+1
14.如果上步执行后系统显示错误则跳到下一步,如果没有显示错误信息,则继续执行:
update stock set qty=qty-1,这时系统会返回SQL0964C。
15.为查看详细的错误信息,输入并执行 ? SQL0964。回答为什么更新操作会失败。
16.选择命令中心的“交互式”标签页,再选择“命令中心—>选项”菜单,在“命令中心选项”窗口中选择“执行”标签页,选中“自动落实SQL语句”,点击“确定”按钮。
17.本实验中日志文件故意被设置得很小,所以上面的更新操作未能成功完成,在命令中心中输入并执行如下命令:
rollback
18.进入日志保存目录,查看该目录下的文件有几个:
cd X:inst1NODE0000SQL00001SQLOGIR
dir /w
可查看到该目录下现在多了两个文件,当采用循环日志且主日志文件已满时,DB2就会分配这两个多出来的文件作为辅助日志文件。
输入cd ,进入根目录下。

二. 循环日志条件下的数据库恢复
1. 在Windows命令提示符下输入md restore 在X驱动器下建立一个目录用来保存数据库备份。
2. 试图对MUSICDB数据库进行联机备份。
在控制中心中右键单击MUSICDB数据库,在弹出菜单中选择“备份”。
在“备份向导”窗口中,选择“映象”标签页,选择“介质类型”为文件系统,点击“添加”按钮,路径一栏输入x:restore
点击向导的“选项”标签页,这时注意“可用性”下的“联机”选项为灰色不可选,只能进行脱机备份。
3. 对MUSICDB数据库进行脱机备份,
在上步的“备份向导”窗口中“选项”标签页中选择可用性为“脱机”,不要选中“在启动脱机操作之前停顿数据库”选项;
点击备份向导的“调度”标签页,选择“立即运行而不保存历史任务”,然后点击“完成”按钮。
4. 系统返回SQL01035表明备份失败,根据提示消息可知目前正有另一个程序在连接并使用要脱机备份的数据库,点击“DB2 消息”窗口的“关闭”按钮。
5. 为了确保所要备份的数据库的完整性,脱机备份要求独占该数据库。因为刚才我们通过命令中心连接到数据库且该连接一直保持到现在,所以脱机备份不能成功。在命令中心中输入如下命令强制所有用户或应用程序切断与该数据库的连接:
force application all
terminate
6. 按照第三步重新脱机备份数据库MUSICDB,这次备份成功。
7. 记录这次备份的时间截。
在控制中心中选择“工具—>日志”菜单,在“日志”窗口中选择“数据库历史”标签页,点击“数据库”一栏右边的“…”省略号按钮,选择相应的系统名、实例名、数据库名,然后点击“确定”按钮;
按“开始日期”排序MUSICDB所有事件列表,那么本次备份应在列表最上端,记录下该备份的开始日期及时间;
关闭“日志”窗口,然后回到控制中心来。
8. 如果要使用restore命令而不是控制中心来恢复数据库,且备份目录下存在数据库的多个备份镜象,那么,为了指定用哪一份(何时产生的)备份文件,备份的时间截信息就是必须的。
如果使用磁盘备份数据库,那么备份镜象的文件名就包含着时间截信息,如果使用磁带或者Tivoli Storage Manager管理的设备作为备份的存储介质,那么备份镜像的头部也包含着相关的时间信息。
9. 另外一种查看备份相关信息的方法是使用list backup命令,回顾上节实验我们使用load工具之前也备份了数据库MUSICD。命令中心中输入如下命令:
terminate ;
list backup all for musicdb ;
10.查看上步命令的输出列表,注意所有的时间截及表空间信息。
11.在list backup命令中可以不使用ALL 关键字,可以指定一个特定的时间截或对象名来限制输出结果,例如要查看某时间以后对MUSICDB进行的所有备份,可以输入:
12.list backup since yyyymmddhh for MUSICDB
13.数据库管理器所维护的有关备份的历史信息如果从不删除会变得非常多,通过prune history命令可以整理那些备份的相关信息。命令行处理器或命令中心中输入命令查看的prune的在线帮助信息:? Prune
14.在Windows命令提示符下输入如下命令,可以发现备份的目录结构及文件名与备份的数据库名、实例名、时间截之间的对应关系:
x:
cd restore
dir
cd MUSICDB.0
dir
cd inst1
dir
cd NODE0000
dir
cd CATN0000
dir
cd yyyymmdd
dir
可见备份文件名的格式都为“hhmmss.001”。
15.本实验中数据库MUSICDB备份后其中数据还未经过任何改动,现在的数据与备份中的数据完全相同。首先执行下面SQL语句选择出编号为77的艺术家的名字和他的专辑名:
select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;
16.将编号为77的艺术家的名字改为“Melanie and the Mechanics”,并且将编号为261的专辑名改为“Unmaterial Girl”:
update artists set name='Melanie and the Mechanics' where artno=77;
update albums set title ='Unmaterial Girl' where itemno=261;
17.执行下列连接查询查看上步的修改结果:
select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;
可见这次的输出与前面的查询结果不同。
18.假如现在MUSICDB所在的磁盘出现故障,我们将使用刚刚创建的备份镜像对MUSICDB进行恢复。输入“?restore”命令获得恢复命令的帮助信息。
19.恢复前为确保当前没有用户或应用程序连接到MUSICDB数据库,命令中心中输入并执行如下命令:
force application all;
terminate;
20.从X:restore目录下读取备份文件对MUSICDB进行恢复。
在控制中心中右键单击MUSICDB数据库,在弹出菜单中选择“复原”;
选择“复原数据向导”窗口的“介绍”页面,选择“复原到现有数据库”;
选择向导的“复原对象”页面,选择“复原整个数据库”;
选择向导的“可用的映象”页面,选择刚刚备份的映象,然后点击“>”按钮;
选择向导的“调度”页面,选择“立即运行而不保存历史任务”;
选择向导的“总结”页面,点击“显示命令”按钮查看全部restore命令;
点击向导的“完成”按钮,等待一段时间后系统弹出“DB2 消息”窗口显示命令成功完成,点击“确定”按钮关闭该消息窗口。
21.重新连接到数据库,输入并执行下列连接查询语句:
connect to MUSICDB;
select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;
可见这次查询的输出结果反映的是更新前的原数据,所以恢复操作成功完成。
22.上面的恢复操作虽然复原了更新前的数据,但是因为DB2使用了循环日志方式,无法前滚,所以无法救回备份后对数据库所作的更新。

三. 归档日志条件下的数据库恢复
1. 在Windows命令提示符下输入如下命令创建数据库的备份目录(X:RESTORE):
MD RESTORE
2. 更改数据库配置文件以采用归档日志方式。
在命令中心中输入并执行下列命令:
update db cfg for musicdb using logretain recovery
四. 重新设置实验环境
完成下列任务以确保剩余实验的环境设置正确:
1. 在命令中心中导入并执行X:cf23clrec脚本。
2. 检查数据库配置文件,确保目前数据库采用循环日志方式。
命令中心中输入并执行下列语句:
connect to musicdb
get db cfg for musicdb
可见输出结果中“恢复状态的日志保留”为NO。