Oracle 10g R2新特性之备份和可用性特性.docx
《Oracle 10g R2新特性之备份和可用性特性.docx》由会员分享,可在线阅读,更多相关《Oracle 10g R2新特性之备份和可用性特性.docx(22页珍藏版)》请在冰豆网上搜索。
Oracle10gR2新特性之备份和可用性特性
Oracle 10g R2新特性之备份和可用性特性
Oracle的自身备份
到现在为止,许多开发人员已经认识到RMAN的潜力以及它作为数据库备份工具的实用性。
您可能还记得RMAN可以将数据直接备份到磁盘和磁带。
当涉及磁带解决方案时,RMAN使用名为介质管理库(MML)的API来操纵磁带子系统。
此MML特定于所涉及的磁带管理系统和硬件。
(例如,如果涉及TivoliStorageManager,则必须使用特定的MML—TivoliDataProtector,RMAN需要它来通过Tivoli管理磁带。
)尽管RMAN是数据库引擎的一个特性,但MML不是引擎的一部分,而是由别人提供的;实际上,其价格可能相当高。
此外,如果您的主要目的是备份Oracle数据库,则在MML方面进行额外的投资就显得不适当了。
在Oracle数据库10g第2版中,一个名为OracleSecureBackup(OSB)的新工具代替了特定于第三方磁带管理系统的MML,从而使此要求变得更容易接受。
OSB可以直接备份到磁带库,因此您不需要任何其他介质管理层。
而其最大的优点是,OSB与数据库引擎紧密集成,因此可以通过OracleEnterpriseManager对它进行控制和管理。
但其他非数据库备份(如备份OracleHome、初始化文件、集群注册表文件(就RAC而言)以及其他重要文件)又如何呢?
您可能会问,这些备份不需要备份工具吗?
回答是“不需要”。
就像任何独立工具一样,OSB也可以执行文件系统备份。
显而易见,无需使用MML来进行RMAN备份再加上备份文件系统这一功能提供了一个低成本和简化的备份和恢复方法。
下面介绍如何在OracleEnterpriseManager中使用MML组件。
首先,在OracleEnterpriseManagerGUI中选择Maintenance选项卡:
从以上菜单中,选择标题为“ConfigureBackupSettings”的超链接,随即将显示一个如下所示的屏幕:
注意此屏幕上的“TapeSettings”部分,您将在该部分中配置OracleBackup工具。
OracleBackupAdministrative软件可以在一台独立的主机上运行,在此主机中,该软件通过数据服务器上运行的代理进行管理。
在本示例中,Administrative主机安装在主机上并在其上运行,且OracleBackup工具已经安装到/bin/obt目录中。
当然,许多DBA仍喜欢使用命令行和编写脚本。
OSB提供了一个名为obtool的命令行工具。
可以通过键入以下命令调用该命令行版本:
obtool
该命令调出OSB提示符ob>。
可以在此处键入“help”来查看可用的命令。
ob>help
或者,可以在命令名之后使用关键字“glossary”以获得有关此命令的更多详细信息:
ob>helprestoreglossary
要备份OracleHome,应使用:
ob>backup--levelincr--at2005/03/29.09:
00
--priority1--familyPool1--privileged--datasetOracleHome--expirerequest7days
我们需要对以上命令进行一些说明。
第一个参数(level)指示备份级别。
在此您指定了增量备份来备份自上次增量备份以来更改的所有文件。
第二个参数2005/03/29.09:
00指定备份运行的时间,即2005年3月29日上午9点。
如果有多个备份作业,那么它们按照什么顺序执行?
此顺序由优先级选项(此处设置为1,表示“最高优先级”)指定。
可以指定一个小于等于100的值来指定较低的优先级。
您还为不同类型的备份指定了几个介质池。
例如,您可以有一个用于数据文件备份的介质池,一个用于归档日志的介质池,和一个用于其他非数据库备份的介质池。
此处,您将名为Pool1的池指定为用于此备份的池。
您已经通过参数数据集指定了要备份的文件。
当您期望另一个增量备份发生时,您已经通过参数expirerequest请求在7天后使此备份过期。
在这里的目的是提供一个非常简要的介绍;完整介绍将需要一本书的篇幅。
有关OSB的更多信息,请参考可用的文档集。
既往作业和当前作业的动态RMAN视图
与许多其他DBA一样,自从Oracle8中引入RMAN后不久,我便对它情有独钟。
但我从不认为对它的活动有一个彻底的了解。
在Oracle数据库10g第2版中,为RMAN作业提供的动态视图简化了对这些作业(无论是当前作业还是既往作业)的理解。
第一个新视图V$RMAN_BACKUP_JOB_DETAILS记录所有备份的历史。
除显示像备份历时这样的简单详细信息外,此视图还显示了许多对事后分析很重要的其他详细信息。
下面,我们将介绍一些重要的详细信息,以及它们如何帮助您分析RMAN会话。
假设您要对有关该历史记录的所有内容有一个或多或少的了解:
已经发出的RMAN作业数、每个作业的状态、这些作业的开始和完成时间、这些作业的类型等。
您将按如下所示发出一个查询:
SQL>colSTATUSformata9
SQL>colhrsformat999.99
SQL>select
2SESSION_KEY,INPUT_TYPE,STATUS,
3to_char(START_TIME,'mm/dd/yyhh24:
mi')start_time,
4to_char(END_TIME,'mm/dd/yyhh24:
mi')end_time,
5elapsed_seconds/3600hrs
6fromV$RMAN_BACKUP_JOB_DETAILS
7*orderbysession_key
输出可能类似如下所示:
SESSION_KEYINPUT_TYPESTATUSSTART_TIMEEND_TIMEHRS
------------------------------------------------------------------
1DATAFILEFULLCOMPLETED03/25/0500:
4803/25/0500:
48.00
4DBFULLCOMPLETED03/27/0502:
0903/27/0502:
11.04
7DBFULLFAILED03/27/0502:
1803/27/0502:
24.10
SESSIONKEY列是显示其他相关信息的其他视图的关键之处。
(稍后将介绍有关该列的更多信息。
)列START_TIME和END_TIME非常直观。
列ELAPSED_SECONDS显示已用时间(以秒为单位),为便于阅读,我已将该时间转换为小时格式。
STATUS列显示RMAN作业的状态。
在该作业执行过程中,此状态列显示RUNNING。
记录的另一个重要信息是生成备份的速率以及进程读取和数据写入的速度。
该信息可以帮助您诊断RMAN作业中的拖沓现象。
SQL>colinsformata10
SQL>coloutsformata10
SQL>selectSESSION_KEY,
2OPTIMIZED,
3COMPRESSION_RATIO,
4INPUT_BYTES_PER_SEC_DISPLAYins,
5OUTPUT_BYTES_PER_SEC_DISPLAYouts,
6TIME_TAKEN_DISPLAY
7fromV$RMAN_BACKUP_JOB_DETAILS
8orderbysession_key;
SESSION_KEYOPTCOMPRESSION_RATIOINSOUTSTIME_TAKEN
-------------------------------------------------------------
1NO2.237762243.33M1.49M00:
00:
06
4NO1.310657946.92M5.28M00:
02:
16
7NO1.323630583.68M2.78M00:
06:
00
注意如何以可读格式(小时:
分钟:
秒)显示时间。
列INS和OUTS以更易于阅读的格式(如用M表示兆字节)显示每秒的数据输入或输出。
在以上示例中,您可以看到由会话键4标记的作业有着6.92MB/s和5.2MB/s的读取速率。
您现在可以查看多个RMAN执行的输出,并从中搜索某个模式。
该模式分析将帮助您识别通过波动昭示的任何潜在瓶颈。
还可以按备份类型过滤备份信息。
新视图V$RMAN_BACKUP_JOB_DETAILS提供了RMAN执行的备份类型以及输出的组织方式。
SQL>select*fromV$RMAN_BACKUP_TYPE;
WEIGHTINPUT_TYPE
-----------------------
1BACKUPSET
2SPFILE
3CONTROLFILE
4ARCHIVELOG
5DATAFILEINCR
6DATAFILEFULL
7DBINCR
8RECVRAREA
9DBFULL
对象类型weight决定视图中记录的排列顺序。
另一个非常有用的视图是RMAN输出。
假设您已经通过shell脚本运行了RMAN作业,但某个地方出现了故障。
这样,您就有了一个记录RMAN输出的输出文件,但不幸的是,您已经把它给丢了。
您该怎么办呢?
幸运的是,新视图V$RMAN_OUTPUT记录RMAN作业中的输出,以便稍后查看。
该视图对用脚本编制的RMAN作业以及即席作业很有用。
SQL>selectoutput
2fromv$rman_output
3wheresession_key=4
4orderbyrecid;
OUTPUT
----------------------------------------------------------------------
connectedtotargetdatabase:
TEST(DBID=1849323268)
Startingbackupat27-MAR-05
usingtargetdatabasecontrolfileinsteadofrecoverycatalog
allocatedchannel:
ORA_DISK_1
channelORA_DISK_1:
sid=201devtype=DISK
channelORA_DISK_1:
startingfulldatafilebackupset
channelORA_DISK_1:
specifyingdatafile(s)inbackupset
inputdatafilefno=00001name=/u01/app/oracle/oradata/TEST/system01.dbf
inputdatafilefno=00003name=/u01/app/oracle/oradata/TEST/sysaux01.dbf
inputdatafilefno=00002name=/u01/app/oracle/oradata/TEST/undotbs01.dbf
inputdatafilefno=00004name=/u01/app/oracle/oradata/TEST/users01.dbf
inputdatafilefno=00005name=/u01/app/oracle/oradata/TEST/accdata01.dbf
channelORA_DISK_1:
startingpiece1at27-MAR-05
channelORA_DISK_1:
finishedpiece1at27-MAR-05
piecehandle=/u01/app/oracle/product/10.2.0/db_1/dbs/07ggc7qr_1_1comment=NONE
channelORA_DISK_1:
backupsetcomplete,elapsedtime:
00:
01:
46
channelORA_DISK_1:
startingfulldatafilebackupset
channelORA_DISK_1:
specifyingdatafile(s)inbackupset
includingcurrentcontrolfileinbackupset
channelORA_DISK_1:
startingpiece1at27-MAR-05
channelORA_DISK_1:
finishedpiece1at27-MAR-05
piecehandle=/u01/app/oracle/product/10.2.0/db_1/dbs/08ggc7u6_1_1comment=NONE
channelORA_DISK_1:
backupsetcomplete,elapsedtime:
00:
00:
03
Finishedbackupat27-MAR-05
您可以看到,此处捕获了RMAN作业的整个输出。
这是一个保存在内存中的视图,在实例关闭时会从内存中清除。
如果希望保存RMAN输出,可以将这些行复制到一个永久表。
列SESSION_KEY显示与视图V$RMAN_BACKUP_JOB_DETAILS中显示的RMAN作业关联的记录。
现在,您将不会再丢失RMAN作业中的输出了。
通过OracleEnterpriseManager,您可以利用新视图创建新备份报表。
此报表提供了已经在您的企业中执行的备份操作的瞬时概要。
可以按备份类型和状态过滤数据。
为OracleRAC集群动态分配通道
当然,在OracleRAC环境中,有多个数据库运行在多个主机上。
但在这样的环境中调用RMAN时,不得不只连接到一个实例(使用TARGET=/)上,从而导致一个节点执行所有工作而其他节点却相对空闲。
在Oracle数据库10g第2版之前,让两个节点执行该工作的一个方法就是创建多个连接到多个实例的通道。
以下显示了一个相关RMAN命令的示例:
allocatechannel=c1typesbt_tapeconnect='rman/rmanpass@inst1';
allocatechannel=c2typesbt_tapeconnect='rman/rmanpass@inst2';
该命令假设您有两个实例,即inst1和inst2。
但该选项并不完全满足要求,这是因为它无法揭示某个节点出现了故障;当某个节点出现故障时,整个RMAN作业将发生故障。
此外,它并不创建真正的负载平衡配置。
在Oracle数据库10g第2版中,不必再为每个RAC节点显式分配一个通道来执行备份;您只需为操作定义并行度即可。
RMAN自动创建多个并行流,并根据集群资源管理器连接到负载最小的实例。
除了负载平衡以外,它还提供了通道故障切换功能,以便将一个实例的连接故障切换到幸存节点。
此新特性增强了RMAN进程的强健度。
通过RMAN恢复临时文件
当您从RMAN备份恢复数据库时,所需执行的第一个操作就是重新创建临时表空间文件。
由于临时表空间不包含要恢复的永久对象,因此RMAN不备份它们-没有必要为非永久对象浪费备份资源。
但Oracle数据库需要临时表空间才能使许多操作高效运行。
因此,如果RMAN也备份它们岂不是很好?
在Oracle数据库10g第2版中,它做到了。
当您恢复数据库时,还将自动重新创建临时表空间文件。
以下是警报日志文件的片段:
ORA-01157:
cannotidentify/lockdatafile201-seeDBWRtracefile
ORA-01110:
datafile201:
'/u01/app/oracle/oradata/TEST/temp01.dbf'
ORA-27037:
unabletoobtainfilestatus
LinuxError:
2:
Nosuchfileordirectory
Additionalinformation:
3
SunMar2720:
29:
002005
Errorsinfile/u01/app/oracle/admin/TEST/bdump/test_dbw0_15457.trc:
ORA-01186:
file201failedverificationtests
ORA-01157:
cannotidentify/lockdatafile201-seeDBWRtracefile
ORA-01110:
datafile201:
'/u01/app/oracle/oradata/TEST/temp01.dbf'
SunMar2720:
29:
002005
File201notverifiedduetoerrorORA-01157
SunMar2720:
29:
002005
Dictionarycheckcomplete
SunMar2720:
29:
002005
SMON:
enablingtxrecovery
SunMar2720:
29:
002005
Re-creatingtempfile/u01/app/oracle/oradata/TEST/temp01.dbf
通过RESETLOGS实现闪回数据库/查询
Oracle数据库10g引入了闪回数据库,它通过撤消存储在闪回日志中的更改回滚整个数据库。
但请考虑以下情形:
1.数据库活动正常。
记录已更新。
2.数据库因重做日志文件中存在的物理损坏而崩溃。
3.使用备份控制文件从备份恢复了数据库。
4.使用RESETLOGS选项打开了数据库。
5.数据库活动恢复。
以正常方式更新记录。
开发人员喊到“帮帮忙”!
他更新了错误的记录集。
他请求闪回该数据库。
当使用RESETLOGS选项打开数据库时,该数据库从编号为1的SCN开始。
因此,新配置文件不知道过去更新的SCN编号。
由于闪回数据库依赖SCN编号,因此该特性能否在该情形下起作用?
在Oracle数据库10g第2版中,它将起作用,这是因为该数据库将它的前一个副本存储在控制文件中,并对频繁地使用它。
这种情况下将查询前一个副本,并使用它将数据库闪回到不同的时间,即使在同时重置了SCN编号的情况下也是如此。
我们来看一个示例:
首先,检查帐号3的帐户持有者。
SQL>selectfirst_name,last_name
2fromaccounts
3whereacc_no=3;
FIRST_NAMELAST_NAME
-----------------------------------------
AlanSmith
现在更新名称:
SQL>updateaccounts
2setfirst_name='John'
3whereacc_no=3;
现在,毁坏数据库,从备份恢复,然后在RESETLOGS选项中打开已恢复的数据库。
假设一段时间过后,大厅角落里传来了一个气急败坏的声音“靠”,然后就有人请您将数据库闪回到先前的某个时间点,而这个时间点恰好位于RESETLOGS操作之前。
这时只需发出以下命令即可。
SQL>flashbackdatabasetobeforeresetlogs;
该命令恰好把数据库闪回到RESETLOGS之前的SCN。
执行该命令后,再次检查该表。
SQL>selectfirst_name,last_name
2fromaccounts
3whereacc_no=3;
FIRST_NAMELAST_NAME
-----------------------------------------
AlanSmith
您可以看到,RESETLOGS操作没有影响闪回操作。
该特性使闪回数据库非常强大和有用。
它的行为对闪回查询也适用。
闪回数据库中的恢复点
还记得SQL中保存点的概念吗?
在一个事务中,您可以创建保存点,进行某些修改,创建另一个保存点,等等。
如果这些更改不是您想要的,则您所要做的就是将它们回滚到某个具体的保存点。
现在,我们将介绍Oracle数据库10g中引入的一个新功能—闪回数据库。
通过它您可以将数据库倒回到前一个时间点。
在这种情况下拥有一个与保存点类似的功能(即能够倒回到一个有名称的点,而不仅仅是一个时间点)岂不是很好?
在Oracle数据库10g第2版中,您可以使用一个名为恢复点的新功能来实现该操作。
以下是它的工作方式。
假设有一个长期运行的处理(涉及多个必须按顺序运行的批处理程序)。
以下是事件序列:
1.创建恢复点rp1
2.运行批处理作业1
3.创建恢复点rp2
4.运行批处理作业2
等等。
批处理作业2在执行过程中失败,您需要将数据库恢复到一致的状态。
您不必将它一直恢复到运行的开始阶段。
由于恢复点rp2是在批处理作业执行之前创建的,因此只需将数据库闪回到该恢复点。
使用以下代码创建一个恢复点
createrestorepointbefore_monthend_200503;
现在根据当前的数据库时间和SCN创建了恢复点BEFOR