1、手工备份恢复的缺点 1、产生大量的重做日志 2、需要手工记录大量的信息每个备份文件的位置、备份时间每个数据文件的位置等等 Oracle提供了recovery manager工具,简称RMAN 使得我们的备份工作极大的简化 1、备份数据文件、归档日志、控制文件、spfile 2、自动维护备份相关的元数据,例如备份文件的名称、完成备份的SCN号 3、以数据块为单位进行备份,只备份使用过的数据块 4、对备份出来的文件进行压缩 5、自动检测数据块是否损坏 6、支持增量备份 等等,配置RMAN RMAN的体系结构,RMAN可执行程序,Recover.bsq,目标数据库,Recovery catalog
2、数据库,MML,磁盘,闪回恢复区,磁带库,1、RMAN要进行备份的数据库叫做目标数据库 2、RMAN是一个客户端程序,需要建立到目标数据库的客户端连接,并在目标数据库上创建对应的服务器进程以及session,RMAN输入的各个命令,从客户端传递到服务器,由服务器进程负责执行,RMAN只能使用专用服务器连接,不能使用共享服务器连接 3、备份过程中,RMAN读取目标数据库的控制文件,从而获得目标数据库里包含哪些数据文件、归档日志文件、以及各个检查点SCN,指导RMAN完成备份和恢复的具体操作 4、RMAN获得了需要备份的文件列表以后,在将数据备份到备份介质上时,需要建立到这些备份介质的通道(cha
3、nnel)。一旦建立通道。数据就会从该通道备份到指定的备份介质上,每次备份恢复,我们都可以创建多个通道以加快速度。 5、RMAN将通道作为目标数据库上的服务器进程,会为每个通道都创建一个对应的服务器进程,同时,通道的类型就决定了要将数据库备份到哪种介质上,两种通道类型磁盘通道和磁带通道 磁盘和闪回恢复区使用的都是磁盘通道 磁带使用的磁带通道,需要借助MML(media management library),RMAN可以把备份的数据通过MML传递到磁带上,6、RMAN备份过程中,会产生较多的服务器进程(RMAN客户端以及通道),需要的内存较多,对于初始化参数sessions和processes
4、都要相应的增加 7、RMAN信息库(rman repository),RMAN备份过程中产生的元数据,包括备份文件的名称、路径、完成备份的时间、检查点SCN等数据,RMAN信息库可以存放在两个位置目标数据库的控制文件恢复目录(recovery catalog) 8、控制文件里面存放的记录分为两类可删除的记录(归档日志文件的历史记录以及RMAN备份的元数据)不可删除记录(数据文件、联机日志文件列表等) 如果需要在控制文件中存放新的记录,则可以删除那些可删除部分,从而提供可用空间,注意:如果RMAN备份的元数据被删除,RMAN的备份数据就失去意义,因此RMAN备份的元数据很重要 9、可以通过设置初
5、始化参数controlfile_record_keep_time来决定控制文件中可删除部分,该参数默认是7天,表示控制文件始终保持最近7天的可删除记录,7天前的备份信息、归档日志文件历史记录被删除,如果设置为0,表示不删除历史记录,那么控制文件的增长将会失控。因此RMAN的备份周期不能超过7天,10、RMAN提供了恢复目录用来存放RMAN信息库,RMAN恢复目录由几个表和存储过程组成,这些对象存放在一个schema下面,因为表用来存放RMAN备份的元数据,因此可以永久的保留下去,而不需要删除历史记录 11、RMAN恢复目录是可选的,不是必须的,元数据通过目标数据库的控制文件传递到恢复目录,RM
6、AN的元数据始终都存放一份在目标数据库的控制文件中,不会因为恢复目录的存在而删除,使用RMAN完成备份以后,会将控制文件的RMAN元数据同步到恢复目录,默认情况下,控制文件中的信息保留7天,恢复目录永久保留。RMAN还可以同时为多个目标数据库服务,在同一个恢复目录里面,可以保留多个目标数据库的RMAN元数据 12、如果使用恢复目录,则在使用RMAN时,除了建立到目标数据库的连接以外,还必须建立到恢复目录所在数据库的连接,在恢复目录数据库里面创建对应的服务器进程和session 13、RMAN工具本身由两部分组成 RMAN可执行程序:这是一个命令接口,提供了交互的界面,能够解释我们的RMAN命令
7、,返回结果。在工作中,完成的实质性工作很少 脚本文件recover.bsp:备份恢复的实质性工作是由目标数据库的程序包完成的,对目标数据库的相应程序包的调用则是由文件recover.bsp实现的,bsp文件,里面全部是各种PL/SQL脚本块,事实上,RMAN界面输入的各种命令,都会被转换成对bsp文件中各个PL/SQL块的调用,并将相关的PL/SQL块传递到目标数据库上去执行,从而完成数据库的备份恢复操作,bsp才是RMAN工具的核心。bsp中包含的PL/SQL块,主要调用了目标数据库中以下两个程序包dbms_rcvman:用来读取目标数据库的控制文件信息,并将这些信息传给rman,从而rma
8、n可以获取要备份的文件列表,以及其他一些信息dbms_backup_restore:完成具体的备份恢复工作,并在控制文件中写入备份的元数据 两个数据包已经硬编码到数据库软件中,因此数据库在关闭的情况下也可以使用RMAN,14、RMAN备份恢复过程中,可能会需要关闭和启动数据库,因此在目标数据库上,必须使用具有sysdba权限的用户身份进行连接,如果没有使用操作系统认证,那么要注意密码文件不要丢失,密码文件应该定期的备份 15、RMAN备份的最小单位是数据块,不是数据文件,RMAN备份时,总是一个数据块一个数据块的读取和写入,RMAN可以与DBWr进程协调一致,如果在备份过程中,发现是一个脏的数
9、据块,可以等到DBWr进程将内存的内容刷新到数据文件以后,才备份该脏数据块,因此不会出现分离数据块的情况,同时避免了使用begin backup,也就不会产生过多的重做日志,和手工的备份是两种机制 16、RMAN只会对使用过的数据块进行备份,可以在数据库关闭时备份,RMAN备份时,从物理层面来判断数据块是否被使用,也就是说,只要某个数据块的头部被格式化过,RMAN就认为该数据块被使用过,就会备份该数据块,例如我们删除了一个大表,但是RMAN的备份不会减小多少,因为删除表的时候,只是将数据字典中的信息进行了删除,表实际所占用的数据块并没有被删除,数据块物理上还有数据,因此RMAN还会进行备份。,
10、快速闪回区(flash recovery area) Oracle 10g数据库中,为RMAN备份文件设置了默认的路径,也就是快速闪回区。 该区域是文件系统上的一个目录,也可以是ASM的某个磁盘组 RMAN的备份可以不存放在这个目录区中,但是闪回恢复区有很多的好处 1、简化对RMAN备份文件的管理,这个区域的文件都是OMF文件,文件的名称和大小都是oracle自动管理 2、该区域的空间管理也是自动进行的当RMAN需要在该区域创建新的文件,但是空间不足,oracle会自动根据配置的冗余策略,删除不再需要的备份文件如果该区域出现空间压力,会在告警日志中(alter.ora)记录该信息,我们可以根据
11、告警,适当的增加该区域的大小、修改RMAN备份的冗余策略,两个参数,设置目录和大小,必须先设置大小,再设置目录,只是改变了目录,已经有的文件并没有移动过来。 闪回恢复区可以存放rman备份文件、控制文件、联机重做日志文件、以及闪回数据库日志文件等,Oracle设置了闪回恢复区,反映了Orale 的一个趋势,数据库自动化管理所有的工作。设置了闪回恢复区以后,我们只需要设置好冗余策略、控制大小,目录位置。剩余的工作Orale都会自动的搞定。,Used表示已占用的空间大小的百分比(相对2G) Reclaimable表示通过删除必须要的备份文件所能回收空间的百分比 Number表示文件的总数 通过da
12、tabase control图形界面可以更加直观的查看利用情况。,使用configure命令配置RMAN 1、RMAN用户需要sysdba权限,我们最好不要使用sys用户,因此给RMAN建立一个专用账号,2、连接目标数据库的几种方式,认证部分,本例使用的是操作系统认证,以sys的权限进行了登陆 target,表示连接的是目标数据库,而且本例指的是本机的数据库实例,最终连接到了本机数据库实例ORCL中,如果是在另外一台机器上使用RMAN客户端,那么可以使用上面的连接方式。,RMAN的选项中,两个选项经常使用 1、log 2、cmdfile,RMAN所有的输出都不会显示在屏幕上,而是显示在日志文件
13、中,参数append表示在原来的日志基础上追加日志信息,不是覆盖。 如果rman是晚上自动运行,那么就需要添加log选项,作为一个日志记录,很重要的参数。,另外一个参数是cmdfile表示 使用rman连接到数据库,然后立即执行cmdfile文件里的命令,该命令可以是任何合法的RMAN命令。,上面的两个参数是经常使用的参数。,RMAN命令的分类 1、独立的命令 在rman提示符下面,输入一条命令,立即执行 2、任务形式的命令 以rman 形式执行,所有要执行的命令都放在两个之间,执行时,RUN模块里面的所有命令必须都成功,整个任务才算成功,其中任何一条命令失败,则整个任务失败并回滚,不会执行其
14、中的任何一条命令。从9i开始,可以将一些常用的配置选项设置为默认值,每次备份时,就不需要再进行这些配置,直接进行备份,configure命令进行默认配置,配置的选项包括 1、自动备份控制文件 2、自动启动某个类型的通道(磁盘或者磁带) 3、备份的冗余策略 4、默认的备份类型:备份集(backup set)or镜像副本(image copy) 5、备份片的大小,Configure的配置保存在控制文件中,原有的默认配置硬编码到了RMAN只可执行命令中,因此数据库在没有mount的时候,show命令都可以查看这些默认值,但是对我们设置的值,在这里看不见。,我们要配置某个选项的时候,不需要记住具体的命
15、令,因为使用show all以后,命令都出来了。 通过dbconsole也可以查看具体的选项。,1、自动备份控制文件1、每次使用RMAN进行备份,都会自动备份控制文件和spfile2、修改了数据库结构,立刻自动备份控制文件,可以配置控制文件备份所在的目录和文件名字,默认使用的是闪回区,使用闪回区的时候,文件名字使用的OMF,即使设置了文件名字,也不起作用,因此需要改变目录。,c-IIIIIIIIII-YYYYMMDD-QQc-DBID-控制文件备份日期-序列号,16禁止00-ff,因此每天的备份数量不能超过256个,数据库结构发生变化。,控制文件没有自动的生成备份。,将数据库改为归档模式。,再
16、次修改表空间的结构。,控制文件自动生成,因此这个功能还是很有意义的。,自动启动某个类型的通道 这是RMAN配置中最重要的地方,也是必须配置的地方 通道表示将数据复制到备份介质的物理通道,通道类型则说明将数据复制到磁带还是磁盘,可以定义默认的通道类型,默认我们将数据备份到磁盘上。我们也可以备份到磁带上,就将那个disk替换为sbt,就表示备份到磁带上。,指定同时自动创建多少个通道,上面指定了三个通道,加快了备份速度。 上面的配置中说明,默认使用磁盘作为备份介质,同时启用三个磁盘通道进行备份。,这次备份作业,手工的创建了一个通道,覆盖了前面指定的默认设置:磁盘+3个通道。 如果是RAC,那么可以指
17、定在哪个实例上启动通道。单实例不需要指定。,参数format,说明该通道生成的备份文件的名称格式,通道生成的备份文件的名称和格式。 %c:备份片的副本数 %d:数据库名称 %D:位于该月的第几天 %M:位于该年的第几个月 %n:数据库名称,向右填补到最大8个字符 %u:一个8个字符的名称,代表备份集和创建时间 %p:该备份集的备份片号,从1开始到创建的文件数 %U:一个唯一的名字%u_%p_%c %s:备份集的编号 %t:备份集的时间戳 %T:年月日格式(YYYY-MM-DD),参数maxopenfiles:表示当发出backup命令的时候,一个通道能够处理的文件的最大个数,默认为8 参数ma
18、xpiecesize:创建的备份片(备份出来的物理文件)的大小 Parms ENV=:表示将数据备份到磁带上时,到磁带的通道的一些参数配置,对于不同的厂商,其Parms的值也是不同的 上面都是一些和通道有关的参数 1、默认的设备类型 2、默认启动的通道数量 3、备份时手工分配通道 4、RAC环境中指定在那个实例上启动通道(connect) 5、format指定了生成的文件名和备份路径 6、一个通道最大能够处理的文件个数 7、备份片的大小 8、如果通道是磁带,那么需要配置一些和厂商有关的参数,分配了三个通道,因为只有一个数据文件,只在通道2上创建了一个备份集,这个备份集包括一个备份片。 控制文件
19、和spfile单独备份到了一个位置,生成了文件,删除了一些我们不需要的配置。,每个备份片的大小是20M。,备份集(backup set) 默认的备份类型是备份集,生成备份集的时候,RMAN会将不同的数据文件里使用过的数据取出后,放在同一个物理文件里,也可以放在不同的物理文件里。产生的物理文件叫做备份片(backup piece),备份片的逻辑组合叫做备份集,备份集只是一个名字而已,将物理文件逻辑的组合在一起 一般来说,一个通道生成一个备份集,启动了三个通道,那么就生成三个备份集。如果启动了备份文件的自动备份,那么控制文件所在的备份文件会单独的生成一个备份集,不会与数据文件所在的备份集合并在一起
20、,另外,如果指定了每个备份集包含的数据文件的个数(filesperset),那么即便只有一个通道,也有可能生成多个备份集。 控制文件所在的备份集以操作系统操作系统块作为最小单位 数据文件所在的备份集以数据库作为最小单位,因此不能放在一个备份集中 如果指定了备份片的大小,比如2G,要备份的数据文件占5G,那么在备份集中会生成3个物理文件(3个备份片),其中两个为2G,一个为1G 备份集的数量通常取决于下面的几个参数是否启用了控制文件的自动备份,启用则备份集多1个启用了几个通道,一个通道一个备份集每个备份集包含的数据文件的个数,可能出现一个通道多个备份集的情况 备份片的数量则取决于备份集的数量和最
21、大备份片的数量,镜像副本 这与手工通过操作系统的复制命令备份数据文件类似。一个数据文件生成一个镜像副本文件,整个复制过程是rman进行的,rman一个数据块一个数据块的复制,rman会检测每一个数据块是否出现损坏,不需要将表空间设置成为begin backup,镜像副本中包含使用过的数据块,也包含从未使用过的数据块。生成镜像副本的好处在于恢复速度相对备份集来说,更快一些。,备份的冗余策略recovery window 哪些文件必须备份?默认值是7. 保留下来的备份,必须能够将数据库恢复到指定时间之内的任意一个时刻,指定这个参数为7,则表示保留的备份文件能够将数据库恢复到最近7天中的任何一个时刻
22、。为了能够将数据库恢复到7天之内的任何一个时刻,那么备份文件必须满足保留7天。这样当我们需要恢复到7天之内的任何一个时刻的时候,找到满足条件的数据文件,配合日志进行恢复。如果我们只保留了最近4天的备份,那么如果我要恢复到6天前的一个时刻,那么就不能够实现。,redundancy 表示要保留的,能够将数据库恢复到最新状态的完整的备份文件的个数。根据策略,不再需要的备份文件则被认为是obsolete。,数据库会保存两套完整的备份。 两个冗余策略配置只能一个生效。,使用RMAN完成备份 1、使用RMAN进行备份以前,首先要做的就是看一下配置,这一步很重要,我们希望使用的是备份集。,默认使用diskd
23、isk的并行度是3(3个通道),而且是备份集的形式通道的format定义,备份片的大小,使用RMAN进行备份时,我们使用backup命令,该命令可以独立的放在RMAN提示符里面,也可以放在RUN里面,最简单的命令如下 RMANbackup database;,1、分配通道,输入数据文件到指定的通道 2、在通道上创建备份集和段(备份片),一个备份集上可能有多个段(备份片),这取决于备份片的大小 一个通道上也可能有多个备份集,取决于备份片的大小。,因为我们启动了控制文件的自动备份,因此在备份的最后,单独的生成一个备份集。 通过上面的操作提示,我们的到下面的结果。 操作日志具体见backup.log
24、 1、分配通道、数据文件输入通道,创建备份集、备份片 2、控制文件创建备份集、备份片,如果数据库是非归档模式,我们需要启动数据库到mount状态,然后执行backup 命令,因为rman需要读取目标数据库的控制文件。 如果数据库是归档模式,数据库在打开时可以备份。,依然是分配了三个通道。 文件的名字和存放位置发生了改变。,备份片的名字和位置取决于format。,等等,上面只是备份了一个表空间,而不是整个数据库。,只是备份了一个数据文件。,手工指定多个通道,分配了两个通道,按照指定将1、3、5分配给了c1,将2、4分配给了c2 然后备份了控制文件和spfile 最后执行了一条SQL语句,将所有的
25、备份片放在同一个目录下面。Format参数可以在指定通道的时候指定,也可以在backup命令中指定。 如果不指定datafile的分配,那么rman会根据数据文件的大小,大致进行分配,尽量保持两个通道分配的平均。 手工分配通道以后,会将默认的通道覆盖掉,默认通道的分配取决于参数parallelism,备份集支持压缩,压缩比例大约是5:1.,设置标记tag 为每一个备份集或者镜像副本文件所取的名称。在恢复和list的时候,我们可以非常清楚的知道某个备份的意义。,Tag标记具体的加在了段上。,这一次备份所有的备份片(可能是多个通道生成的多个备份集),都使用同一个tag。,默认情况下,RMAN在备份
26、时总是会检查数据块是否发生物理损坏,如果是为了加快备份速度而不希望RMAN进行数据块的物理检查时,可以关闭这个选项。,默认情况下,RMAN不会检查数据块是否发生逻辑损坏,backup时可以启用逻辑损坏检查。,RMAN进行备份时,只要发现新的坏块,就立即停止备份。如果发现的坏块是上次已经发现的,则继续备份。我们可以设置maxcorrupt参数来通知RMAN,只有当发现的坏块个数超过指定的数量时,才停止备份。 这是一个迫不得已的参数。尽量不要使用。,数据文件3、5出现的新的坏块超过10的时候,停止备份。,设置备份集的大小(前面已经讲过设置备份片的大小) 如果输入的文件的总量超过备份集的大小,那么在
27、这个通道上创建第二个备份集。如果配置的备份集连一个数据文件都容纳不了,则会报错。,我们可以不进行实际的数据库备份,只是检查数据文件是否损坏。,离线、丢失的数据文件备份时,会报错,我们需要跳过这些数据文件,否则备份失败。,离线,不能访问,我们可以跳过只读的表空间。,三种类型的都跳过。,在备份时,只对那些自上次备份以来新添加的数据文件进行备份。,在备份时,只对那些在指定的时间内没有备份过的数据文件。,备份归档日志和控制文件 1、RMAN备份归档日志时,首先进行一次日志切换,然后对归档进行备份 2、RMAN备份过程中如果发现当前归档日志损坏,会自动的切换到另外一个归档路径下面(前提是存在多个归档路径
28、)查找该文件的副本 3、备份时需要指定要备份哪些归档日志,备份一天以来所有的归档日志。分配的通道和文件名字都遵守配置文件中指定的参数。这个和数据文件备份的区别就是输入的文件是日志。,从日志序列1开始备份。每一个日志文件都有一个日志序列号。,备份所有的归档日志。 备份归档日志的方式有上面的三种 1、根据时间 2、根据日志序列号 3、备份所有的 备份数据库时,同时备份归档日志文件,备份数据文件时,同时备份归档日志文件。,备份归档日志后,将成功备份的归档日志进行删除。 在进行备份之前,如果手工删除了某些归档日志文件,则备份时,由于RMAN会根据目标数据库的控制文件里所记录的归档日志文件列表,去找所有
29、的归档日志文件,因此会发生找不到需要备份的归档日志文件的现象,RMAN因此会报错,备份失败。,只备份那些能够访问的归档日志文件,跳过那些不能访问的归档日志文件。 这是一个很不好的现象,如果发现归档日志丢失,马上进行数据库的全备份。 数据文件和归档日志可以同时备份,但是不会放在一个备份集里面,至少创建两个备份集。这点和控制文件的备份很类似。,备份当前的控制文件。 如果控制文件的自动备份设置为on,那么任何rman备份都会引发控制文件和spfile的自动备份,这是一个不错的参数。,增量备份 所谓增量备份,就是只对那些自从上一次备份以来,发生变化的数据块进行备份。 既可以在归档模式下面进行增量备份,
30、也可以在非归档模式下面进行增量备份。 对于非归档模式的增量备份,每次备份时,都必须正常关闭数据库,然后启动到mount状态。 1、首先必须要有一个基本备份,包含所有使用过的数据块的备份 2、基本备份就是级别0(level=0)的备份,以后所有的增量备份都是基于这个基本备份完成的 3、如果RMAN进行增量备份时,发现没有可以参照的基本备份,RMAN会自动的进行0级备份,忽略我们指定的增量级别备份 4、增量备份级别包括1、2、3、4、5一共五个级别,0作为基本级别 增量备份分为差异增量备份、累计增量备份,差异增量备份:表示每次备份时,只对那些小于等于当前级别的备份以来变化过的数据块进行备份。 周日
31、零点 0级备份 周一零点 2级备份 周二零点 2级备份 周三零点 1级备份 周四零点 2级备份 周五零点 2级备份 周六零点 2级备份 1、周日备份所有的数据块 2、周一备份=2级别,最近的就是周日,那就是备份周日以来发生变化的数据块 3、周二备份=2,最近的就是周一,那就是备份周一以来发生变化的数据块 4、周三备份=1,最近就是周日,那就是备份周日以来发生变化的数据块 5、周四备份=2,最近的就是周三,那就备份周三以来发生变化的数据块 6、周五只是备份当天发生变化的数据 7、周六只是备份当天发生变化的数据,日,一,二,三,四,五,六,0,2,2,1,2,2,2,日,0,差异备份,日,一,二,
32、三,四,五,六,0,2,2,1,2,2,2,日,0,累计备份,只对小于当前级别最近一次备份以来,发生变化的数据块进行备份。,无论是累计还是差异,都进行如下两步 1、向前寻找一个增量备份基点 2、备份这个基点以来发生变化的数据块 差异增量:向前寻找基点的方法是=本备份级别 累计增量:先前寻找基点的方法是本备份级别 寻找到这个基点以后,自这个基点以来发生变化的所有的数据块都进行备份。,Oracle 10g开始,为了加快增量备份的速度,Oracle引入了一个文件,专门用来记录自从上一次备份以来,所变化过的数据块的地址。该文件叫做变化跟踪文件(change tracking file)。只要有进程修改
33、了某个数据块,则会通过CTWR进程将该数据块的地址写入变化跟踪文件。只要创建了变化跟踪文件,RMAN就会自动使用该文件来进行增量备份,变化跟踪文件完全由oracle来管理。,启用tracking,并且指定track file的路径和名字。 如果没有指定路径和名称,那么就使用上面参数指定的路径下创建跟踪文件。,跟踪文件最小是10MB,当跟踪文件增大时,最小扩展是10MB,Oracle 10g一个新的特性:能够将增量备份应用到某个镜像副本上 1、周日生成了一个镜像副本 2、周一进行增量备份,然后将产生的增量备份应用到周日所做的镜像副本上,这时周日的镜像副本中就包含了周一的数据,从而体现了最新的状态
34、 3、周二的增量备份再应用到镜像副本上,以此类推 对镜像副本应用增量备份的最大的好处在于加快恢复速度,第一条语句表示要生成级别为1的、tag值为incr_upd_db,针对整个数据库的,并且应用于增量备份的镜像副本。 1、第一天执行该程序,执行第一句话的时候,由于我们没有0级备份,因此会生成整个数据库的镜像副本(该副本不是普通的副本,而是可以在其上应用增量备份) 执行第二条语句的时候,因为没有增量备份,因此不会执行,但是也不会报错。 2、第二天执行该程序,由于已经有了第一天的0级备份,所以会生成一个1级别的增量备份,执行第二条语句的时候,会将第一条语句生成的增量备份应用到第一天所生成的镜像副本
35、上。以后的每一天都会生成一个增量备份,并将该生成的增量备份应用到镜像副本上,如果过需要恢复,先恢复镜像副本,然后应用最近一次增量备份以来,所生成的所有归档日志,即可进行数据库恢复。,出现了一个问题,据说是oracle的bug,一种方式可以打补丁。我们在这里简单的解决一下这个问题。(原则上还是要打补丁)。,每天重复执行上面的run模块,就能能够达到我们要的效果 1、每天将增量备份添加到镜像副本上 2、恢复时使用最近的镜像副本+少量的归档日志即可,恢复速度会很快,执行了一个上面的操作,看一下备份集的信息。,Tag为full的这次备份,产生了四个备份集,其中最后一个是控制文件备份集,控制文件和spf
36、ile在一个备份片中。,备份集编号:123 备份集大小:156.56M 备份类型:disk 备份时间:1分24秒 备份片编号:411 状态:有效,没有压缩 Tag:full。在备份时候最好指定tag,这样在维护的时候,可以非常的清除。 段名:备份片的名字和位置 该备份集包括两个数据文件 依次备份一个tag。,做了一次backup archivelog all以后,产生了上面的备份集,根据tag相同就是一次备份的规律,得到这次备份的列表。 对于归档日志的备份,使用的是日志序列号的方式出现在日志中。,显示一个备份集。,System的备份在备份集9中存在,System表空间在备份集13中存在,因为t
37、ag不一样,因此是两次备份。,通过list backup of tablespace system,将system所有的备份列了出来。,显示某个数据文件的备份信息,同显示一个表空间。,显示数据库的镜像副本信息,显示表空间的镜像副本信息。,显示归档日志文件的备份信息。,显示控制文件和spfile的备份信息。,B表示备份,F表示完全备份、A表示归档、0、1、2等表示增量备份,A表示可用,X表示过期,备份集包括备份片的个数,显示某个表空间的备份信息。,显示各个数据文件在哪些备份集中,显示各个归档日志都在哪些备份集里,显示spfile都在那些备份集里面,列出过期的备份(expired),所谓过期指的是
38、备份的文件已经丢失(例如我们手工将文件删除,但是元数据还在控制文件里面) 1、检查并标识出当前有哪些已经过期的备份集,2、列出已经过期的备份集,3、删除已经过期的备份集,report命令 List命令只是简单的将rman的元数据检索并显示出来,rman同时还提供了report命令,该命令具有一定的分析功能。 1、显示数据库的结构,根据冗余策略,显示可以丢弃的备份文件列表。,物理的将这些可以丢弃的备份文件进行删除。,report经常用来显示哪些文件需要进行备份,显示那些进行恢复时,使用增量备份文件超过个的数据文件的列表。如果一个数据文件在继续恢复时候,需要的增量备份文件过多,那么这个恢复速度将会
39、很慢。因此上面的显示还是有意义的。,显示最近三天以来没有备份过的数据文件,显示没有三个完整备份的数据文件的列表,显示如果要恢复到3天前的状态,哪些数据文件还需要备份。,上面提到的need指的是将数据库恢复到最新状态。,执行了一个数据库的完全备份。 RMANbackup database; 备份时出错。,删除备份。,配置了通道数和备份片的大小。,ALTER SYSTEM SET db_recovery_file_dest_size=4g scope=both; 也可以设置闪回恢复区的大小。,这个backup database才是一个正确的备份(没有任何错误),没有找到归档日志文件,因为手工删除了
40、一些归档日志文件。控制文件里面记录的所有的归档日志都会进行备份。,使用RMAN进行恢复 1、使用restore命令读取备份文件里的数据块,根据数据块所属的数据文件,将这些数据块放回到相应的数据文件里面去,从而完成还原工作 2、使用recover命令把那些从备份以来生成的归档日志文件以及联机重做日志文件应用到还原出来的数据文件上,从而把数据库从备份的时间点恢复到最新的或者指定的时间点。,完全恢复 1、分为归档和非归档模式,如果目标数据库是非归档模式,那么数据库需要在mount状态进行恢复 2、如果是归档模式,只要不是恢复系统表空间或undo表空间以及控制文件,而是恢复其他数据文件,数据库在打开的
41、状态下就可以进行,如果控制文件和spfile都丢失,那么必须先还原spfile,再还原控制文件 一、启用了自动备份控制文件,且备份集位于闪回恢复区域 1、每次备份时,都会自动备份控制文件和spfile,并将这两种文件放在同一个备份集中。如果我们失去了spfile,则需要还原该文件,那么实例需要启动到nomount状态,控制文件可以不打开。 2、启动实例时,我们需要借助一个参数文件,该参数文件的内容不要求很完整,只要能够将数据库启动到nomount状态即可。,控制文件和spfile所在的备份集位于闪回恢复区,该区域的文件名是随机生成的,因此,要从其中恢复spfile,必须仔细找到spfile所在
42、的最新备份集。因为没有从控制文件中得到备份信息,因此需要手工的寻找spfile所在备份集的名字。 一般控制文件和spfile都在一个备份集中,而且文件比较小,大都比较小,一般在10M以下。找到备份集以后,执行命令进行恢复。,在linux下面,出现了一个问题。,具体流程就是 1、寻找spfile和控制文件所在的备份集,然后恢复出来。,spfile恢复成功。,如果没有指定spfile的恢复路径,默认恢复到$ORACLE_HOME/dbs目录中去.,将两个控制文件删除。,这个备份集中没有找到控制文件。,反复的尝试,终于找到了控制文件所在的备份集。,还原控制文件和spfile的步骤都是一样的 1、找到
43、spfile所在的路径 2、找到文件所在的备份集 3、使用命令restore spfile from 备份集的路径名称 4、使用命令restore controlfile from 备份集的路径名称 分为几种情况 1、启用了自动备份控制文件,而且备份集位于闪回恢复区随便找一个ora文件将数据库启动到nomount状态,因为闪回恢复区的文件名字是数据库自己管理的,因此我们只能尝试着使用每一个备份片,使用restore进行恢复尝试。 2、启用了自动备份控制文件,且备份集位于不同的指定路径中,那么备份集的名字和路径一定是按照我们指定的format参数来命名的。 我们直接可以使用下面的命令进行恢复,获
44、得dbid的方式有两种1、通过自动备份控制文件的名字获得2、通过mount数据库以后的select dbid from v$database,set dbid=1209353873runset controlfile autobackup format for device type disk to c:backup%F;restore spfile from autobackup; runset controlfile autobackup format for device type disk to c:backup%F;restore controlfile from autobacku
45、p; restore spfile to pfile c:initoraclr10g.ora from autobackup;/将spfile还原出来,然后转换成为pfile,3、没有启用自动备份控制文件 如果没有启用自动备份控制文件,那么每次备份1号数据文件的时候,都会强制备份控制文件和spfile,因此还是需要找到备份片,然后使用restore进行还原。restore spfile from c:backup07qwjljsadrestore controlfile from c:backup07qwjljsad,前面讲了还原数据库的spfile和控制文件的方式方法,非归档模式下面的完全恢
46、复。,备份数据库。,1、控制文件、联机重做日志文件、数据文件全都损坏1、数据库启动到nomount状态,还原控制文件,因为自动备份启动,而且备份未放在闪回恢复区,控制文件里面有这些信息,根据这些信息,我们能够找到数据文件,归档日志文件等备份信息。因此我们需要控制文件备份,即使这些文件备份不是最新的。,2、数据库关闭的情况下删除控制文件、联机重做日志文件、数据文件,将数据库启动到nomount状态,找到BDID,控制文件还原到位。,将数据库进行mount。,还原所有的数据文件。,恢复数据库,因为联机重做日志文件丢失。所以使用noredo。,自上次备份以来的所有数据丢失。,二、控制文件和联机重做日
47、志文件没有丢失,只有数据文件丢失。 省略了spfile和控制文件的寻找恢复。将数据库启动到mount状态,使用restore database和recover database进行恢复即可。 如果自上次备份以来,日志文件进行了切换,但是备份时的current日志文件组始终没有被覆盖。(间隔时间短、联机日志文件大、业务量小等原因)。那么在进行恢复的时候,可以实现无数据丢失。,当前日志组是2.,备份表空间users,数据库对外提供服务。,在上次备份以来,备份时的current日志文件组还没有被覆盖。我们不知道是否被覆盖。假设没有被覆盖。,删除了users的数据文件。,启动数据库到mount状态。,
48、还原数据库,假设联机日志文件没有被覆盖,还能够配合备份进行数据恢复。,恢复成功。 可以直接打开数据库。,如果日志文件被覆盖,那么recover命令会失败。 我们只能进入SQLPLUS中,发出如下的命令。SQLRECOVER DATABASE UNTIL CALCEL 然后直接输入cancel,媒体恢复结束。数据库可以以resetlogs启动。,三、控制文件没有损坏、联机重做日志文件和数据文件损坏,将数据库启动到mount状态,还原数据库。,联机日志文件没有回来。,我们在backup database以后,又重新备份了users表空间。,使用backup database时的备份集进行users
49、数据文件的还原。,上面的错误在于 1、backup database 2、backup tablespace users 恢复的时候,users表空间使用的是第二个备份集 显然有问题,我们使用指定的备份集进行还原可以避免这种情况。对于非归档模式,这种问题还是比较常见。,再次执行恢复。,将数据库恢复到其他目录下面 数据文件损坏以后,原来的目录不能使用了,我们可以使用别的目录。 表空间system和users出现损坏。其余文件都没有问题。但是非归档只能进行全部还原。,找到最近一次的全备份的tag,TAG20090317T082842,归档模式下面的完全恢复 前提必须具有自备份以来以来所有的归档日志,如果缺少归档日志文件或者丢失联机重做日志文件,则只能进行不完全恢复,如果丢失控制文件,则需要创建控制文件或者按照前面讲到的从以前的备份中还原控制文件,显然后者更好一些。 一、非系统表空间损坏,而控制文件和联机日志文件没有损坏,数据库中在正常的使用。,Users表空间损坏。,说明一个问题,run内所有的操作并没有作为一个事务出现。,数据恢复回来。,如果数据库在关闭的状态下失去数据文件。那么将数据库启动到mount状态。然后执行上面的操作。 如果是数据文件损坏,使用下面的操作。,