`

DB2实验——数据库恢复

阅读更多

实验九  数据库恢复<o:p></o:p>

实验内容<o:p></o:p>

1 决定DB2目前的日志配置参数<o:p></o:p>

2 循环日志条件下的数据库恢复<o:p></o:p>

3 归档日志条件下的数据库恢复<o:p></o:p>

注意:(1)实验用到的数据在DB2 Lab Data文件夹下的CF23中;(2)在实验过程中,可以用向导来完成实验,但请大家注意记录向导操作相应的SQL语句。<o:p></o:p>

1- 决定DB2目前的日志配置参数<o:p></o:p>

在前面的实验中,我们创建了一个新的数据库MUSICDB,库中包含五张表artistsalbumsconcertsreorderstock。表上设定了一定的完整性约束条件,并且表中已经导入了数据。<o:p></o:p>

1. 在本实验开始之前,先在命令中心执行脚本recovrst,将数据库的配置参数设置成本实验所需的值。记录脚本内容:<o:p></o:p>

<o:p> </o:p>

connect to musicdb;<o:p></o:p>

<o:p></o:p>

update db cfg for musicdb using logretain no;<o:p></o:p>

<o:p></o:p>

update db cfg for musicdb using dbheap 960 buffpage 160;<o:p></o:p>

<o:p></o:p>

update db cfg for musicdb using logfilsiz 6;<o:p></o:p>

<o:p></o:p>

update db cfg for musicdb using logprimary 3;<o:p></o:p>

<o:p></o:p>

update db cfg for musicdb using logsecond 2;<o:p></o:p>

<o:p></o:p>

force application all;<o:p></o:p>

<o:p></o:p>

terminate;<o:p></o:p>

                                                                              <o:p></o:p>

<v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style="WIDTH: 261pt; HEIGHT: 200.25pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image002.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<v:shape id="_x0000_i1028" type="#_x0000_t75" style="WIDTH: 333pt; HEIGHT: 163.5pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image004.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

2. 在命令中心执行connect to musicdb; 激活MUSICDB数据库。<o:p></o:p>

3. 查看MUSICDB数据库的“配置参数”<o:p></o:p>

1)记录有多少个主日志文件(查看Logprimary参数)?当发出Active Database命令或者第一个应用程序连接到数据库时,DB2分配这些日志文件,主日志文件的大小一共是多少KB<o:p></o:p>

<o:p> </o:p>

3个主日志文件   <o:p></o:p>

发出Active Database命令:每个日志文件的大小为LOGFILSIZ+2 4KB 页,因此所有主日志文件将占据3*(6+2)*4KB,即96KB 空间。                                             <o:p></o:p>

<v:shape id="_x0000_i1029" type="#_x0000_t75" style="WIDTH: 258pt; HEIGHT: 184.5pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image006.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<v:shape id="_x0000_i1030" type="#_x0000_t75" style="WIDTH: 225pt; HEIGHT: 212.25pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image008.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

2)记录有多少个辅助日志文件(查看Logsecond参数)?辅助日志文件在事务未提交但主日志文件写满的时候根据需要一次分配一个辅助日志文件。<o:p></o:p>

      2个 辅助日志文件                                                          <o:p></o:p>

<o:p> </o:p>

<v:shape id="_x0000_i1031" type="#_x0000_t75" style="WIDTH: 225pt; HEIGHT: 212.25pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image008.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<o:p> </o:p>

4. 查看当前系统所使用的日志类型(循环日志circular logging,还是归档日志Log retention logging)?,哪些参数可以提供日志类型的相关信息?<o:p></o:p>

<o:p> </o:p>

 LOGRETAIN USEREXIT 可被用来设置系统采用何种日志类型,本实验中这两个参数均被设为默认值否,因此系统采用循环日志方式。如果LOGRETAIN 被设为Recovery 或者USEREXIT 被设为Yes,那么系统将采用归档日志方式。                                                          <o:p></o:p>

<o:p> </o:p>

<v:shape id="_x0000_i1032" type="#_x0000_t75" style="WIDTH: 225pt; HEIGHT: 212.25pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image008.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<o:p> </o:p>

5. 循环日志支持哪些类型的数据库恢复操作,崩溃恢复(Crash Recovery)、版本恢复(Version Recovery),还是前滚恢复(Roll-forward Recovery)?<o:p></o:p>

循环日志只能支持崩溃恢复和版本恢复,但还不能支持前滚恢复                                                                      <o:p></o:p>

6. 配置参数中的Logpath指定日志文件的保存路径,查看并记录本实验的日志文件保存在哪里?<o:p></o:p>

       F:\DB2\NODE0000\SQL00001\SQLOGDIR                                                                       <o:p></o:p>

<o:p> </o:p>

<v:shape id="_x0000_i1033" type="#_x0000_t75" style="WIDTH: 341.25pt; HEIGHT: 288.75pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image012.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<o:p> </o:p>

(数据库的工作单元可能被意外地中断,假如部分工作单元的所有变更完成和提交之前发生了电源故障,那么系统就需要执行崩溃恢复再次回到一致状态。命令restart database可以实现这个功能。如果AUTORESTART被设置成开(默认方式),那么崩溃发生后,应用程序首次连接到数据库时将会自动启动崩溃恢复机制。本实验AUTORESTART参数被设置为开。)<o:p></o:p>

<o:p> </o:p>

7. 在命令中心的“交互式”标签页,选择“命令中心-选项”,确保“执行”中的“自动落实SQl语句”未被选中。然后,执行下列语句:<o:p></o:p>

connect to musicdb;<o:p></o:p>

update stock set qty=qty+1;<o:p></o:p>

如果没有出现错误,继续执行:<o:p></o:p>

update stock set qty=qty-1; 这时系统会返回SQL<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="964" negative="False" numbertype="1" unitname="C" w:st="on">0964C</st1:chmetcnv><o:p></o:p>

记录SQL<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="964" negative="False" numbertype="1" unitname="C" w:st="on">0964C</st1:chmetcnv>给出的错误提示是什么:<o:p></o:p>

                                                                            <o:p></o:p>

根据提示,要如何解决这个问题:<o:p></o:p>

                                                                              <o:p></o:p>

(提示:未CommitRollback的事务,会长期占用日志,导致日志满)

<o:p></o:p>

<v:shape id="_x0000_i1034" type="#_x0000_t75" style="WIDTH: 396pt; HEIGHT: 219.75pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image014.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

2- 循环日志条件下的数据库恢复<o:p></o:p>

将命令中心的执行选择为“自动落实SQL语句”。<o:p></o:p>

1. 备份musicdb数据库:<o:p></o:p>

¨         只能进行脱机备份<o:p></o:p>

¨         脱机备份要求独占数据库,如果仍有其他程序连接到数据库,则备份不成功,此时在命令中心分别执行以下命令:<o:p></o:p>

force application all;<o:p></o:p>

terminate;<o:p></o:p>

强制所有用户与数据库断开连接。<o:p></o:p>

记录这次备份的时间戳:<o:p></o:p>

   2007-12-19 23:34:55                                                                              <o:p></o:p>

¨         提示:在控制中心选择“工具-日志”,在“日志”窗口选择“数据库历史”,找到musicdb数据库,记录本次备份的开始日期,开始时间,结束日期,结束时间。<o:p></o:p>

<v:shape id="_x0000_i1035" type="#_x0000_t75" style="WIDTH: 4in; HEIGHT: 240.75pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image016.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<v:shape id="_x0000_i1036" type="#_x0000_t75" style="WIDTH: 297pt; HEIGHT: 159pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image018.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<v:shape id="_x0000_i1037" type="#_x0000_t75" style="WIDTH: 414.75pt; HEIGHT: 108pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image020.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<o:p> </o:p>

2. 在数据库成功备份后,改变数据库中的数据。<o:p></o:p>

1)执行:<o:p></o:p>

select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;<o:p></o:p>

记录执行结果:<o:p></o:p>

   NAME         TITLE<o:p></o:p>

                                                                       <o:p></o:p>

2)执行:<o:p></o:p>

update artists set name='Melanie and the Mechanics' where artno=77; update albums set title ='Unmaterial Girl' where itemno=261;<o:p></o:p>

再次执行:<o:p></o:p>

select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;<o:p></o:p>

记录修改后的数据:<o:p></o:p>

   NAME                         TITLE<o:p></o:p>

                                                                               <o:p></o:p>

<v:shape id="_x0000_s1027" type="#_x0000_t75" style="MARGIN-TOP: 0.2pt; Z-INDEX: 2; MARGIN-LEFT: 0px; WIDTH: 333pt; POSITION: absolute; HEIGHT: 221.25pt; mso-position-horizontal: left"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image022.png" o:title=""></v:imagedata><w:wrap side="right" type="square"></w:wrap></v:shape>
<o:p></o:p>

3. 假设现在出现磁盘故障,使用刚刚对musicdb的备份来恢复数据库。<o:p></o:p>

再次执行上述查询,则数据恢复到了更新前的状态,但由于DB2默认使用的是循环日志,不支持前滚恢复,所以无法找回对数据库所作的修改。<o:p></o:p>

<o:p> </o:p>

3- 归档日志条件下的数据库恢复 <o:p></o:p>

1. 采用归档日志方式:<o:p></o:p>

1)修改musicdb的配置参数,将log_retain参数的值修改为recovery<o:p></o:p>

2)若该参数不能自动启用,则重新启动实例,以及数据库。<o:p></o:p>

可以通过向导,也可以通过命令修改配置参数:<o:p></o:p>

update db cfg for musicdb using logretain recovery<o:p></o:p>

记录在重新启动实例后,数据库是否直接可以使用,出现了什么错误:<o:p></o:p>

    不能执行连接或激活数据库                                                                        <o:p></o:p>

<v:shape id="_x0000_i1038" type="#_x0000_t75" style="WIDTH: 339pt; HEIGHT: 129pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image024.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

<v:shape id="_x0000_i1027" type="#_x0000_t75" style="WIDTH: 414.75pt; HEIGHT: 186pt"><v:imagedata src="file:///C:\DOCUME~1\crystal\LOCALS~1\Temp\msohtml1\01\clip_image026.png" o:title=""></v:imagedata></v:shape><o:p></o:p>

2. 在命令中心执行以下命令:<o:p></o:p>

1)查询编号为77artistnameSQL语句为:<o:p></o:p>

    select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;                                                                        <o:p></o:p>

执行结果为:                                         <o:p></o:p>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics