oracle 9i 物化视图9i怎么看rman 备份信息视图

Linux下Oracle9i RMAN备份及恢复步骤_嘉善博客
┆┆┆┆┆┆
Linux下Oracle9i RMAN备份及恢复步骤
1、切换服务器归档模式,如果已经是归档模式可跳过此步: %sqlplus /nolog (启动sqlplus) SQL& conn / as sysdba (以DBA身份连接数据库) SQL& (立即关闭数据库) SQL& startup mount (启动实例并加载数据库,但不打开) SQL& alter (更改数据库为归档模式) SQL& (打开数据库) SQL& alter syst (启用自动归档) SQL& exit (退出) 2、连接: %rman target=rman/rman@mydb (启动恢复管理器) 3、基本设置: RMAN& configure default (设置默认的备份设备为磁盘) RMAN& configure device type disk parallelism 2; (设置备份的并行级别,通道数) RMAN& configure channel 1 device type disk fromat '/backup1/backup_%U'; (设置备份的文件格式,只适用于磁盘设备) RMAN& configure channel 2 device type disk fromat '/backup2/backup_%U'; (设置备份的文件格式,只适用于磁盘设备) RMAN& configure contr (打开控制文件与服务器参数文件的自动备份) RMAN& configure controlfile autobackup format for device type disk to '/backup1/ctl_%F'; (设置控制文件与服务器参数文件自动备份的文件格式) 4、查看所有设置: RMAN& show all 5、查看数据库方案报表: RMAN& 6、备份全库: RMAN& backup database plus arc (备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志) 7、备份表空间: RMAN& backup tablespace system plus arc (备份指定表空间及归档的重做日志,并删除旧的归档日志) 8、备份归档日志: RMAN& backup archive 9、复制数据文件: RMAN& copy datafile 1 to '/oracle/dbs/system.copy'; 10、查看备份和文件复本: RMAN& 11、验证备份: RMAN& validate backupset 3;12、从自动备份中恢复服务器参数文件: RMAN& (立即关闭数据库) RMAN& (启动实例) RMAN& restore spfile to pfile '/backup1/mydb.ora' (从自动备份中恢复服务器参数文件) 13、从自动备份中恢复控制文件: RMAN& (立即关闭数据库) RMAN& (启动实例) RMAN& restore controlfile to '/backup1' (从自动备份中恢复控制文件) 13、恢复和复原全数据库: RMAN& (立即关闭数据库) RMAN& exit (退出) %mv /oracle/dbs/tbs_12.f /oracle/dbs/tbs_12.bak (将数据文件重命名) %mv /oracle/dbs/tbs_13.f /oracle/dbs/tbs_13.bak (将数据文件重命名) %mv /oracle/dbs/tbs_14.f /oracle/dbs/tbs_14.bak (将数据文件重命名) %mv /oracle/dbs/tbs_15.f /oracle/dbs/tbs_15.bak (将数据文件重命名) %rman target=rman/rman@mydb (启动恢复管理器) RMAN& startup pfile=/oracle/admin/mydb/pfile/initmydb.ora (指定初始化参数文件启动数据库) RMAN& (还原数据库) RMAN& (恢复数据库) RMAN& (打开数据库) 14、恢复和复原表空间: RMAN& sql 'alter tablespace users offline immediate'; (将表空间脱机) RMAN& exit (退出恢复管理器) %mv /oracle/dbs/users01.dbf /oracle/dbs/users01.bak (将表空间重命名) %rman target=rman/rman@mydb (启动恢复管理器) RMAN& rest (还原表空间) RMAN& reco (恢复表空间) RMAN& sql 'alter tablespace users online'; (将表空间联机) 15、增量备份与恢复: 第一天的增量基本备份: RMAN& backup incremental level=0 database plus arc 第二天的增量差异备份: RMAN& backup incremental level=2 database plus arc 第三天的增量差异备份: RMAN& backup incremental level=2 database plus arc 第四天的增量差异备份: RMAN& backup incremental level=1 database plus arc 第五天的增量差异备份: RMAN& backup incremental level=2 database plus arc 第六天的增量差异备份: RMAN& backup incremental level=2 database plus arc 第七天的增量差异备份: RMAN& backup incremental level=0 database plus arc 增量恢复: RMAN& RMAN& exit %mv /oracle/dbs/tbs_12.f /oracle/dbs/tbs_12.bak %mv /oracle/dbs/tbs_13.f /oracle/dbs/tbs_13.bak %mv /oracle/dbs/tbs_14.f /oracle/dbs/tbs_14.bak %mv /oracle/dbs/tbs_15.f /oracle/dbs/tbs_15.bak %rman target=rman/rman@mydb RMAN& startup pfile=/oracle/admin/mydb/pfile/initmydb.ora RMAN& RMAN& RMAN&标签:在数据恢复的过程中,可能会出现很多预料不到的错误。这里,将我碰到过的几个比较难缠的问题描述一下,并给出解决方案。
1.1&& RMAN-06026
在用备份集还原数据文件的过程中,可能会出现问题RMAN-0626。查看它的错误描述如下:
[chengzx@V2401]$ oerr rman 6026
6026, 1, "some targets not found - aborting restore"
// *Cause:& Some of the files specified for
restore could not be found.
//&&&&&&&&&
Message , or 6025 is also issued to indicate which
//&&&&&&&&&
files could not be found.& Some common reasons why
//&&&&&&&&&
can not be restored are that there is no backup
//&&&&&&&&&
or copy of the file that is known to recovery manager, or
//&&&&&&&&&
there are no backups or copies that fall within the criteria
//&&&&&&&&&
specified on the RESTORE command, or some datafile copies have
//&&&&&&&&&
been made but not cataloged.
// *Action: The Recovery Manager LIST command can be used to
display the
//&&&&&&&&&
backups and copies that Recovery Manager
//&&&&&&&&&
knows about.& Select the files to be restored from
that list.
从描述中看是说备份集不存在,但是从RMAN中又能明确看到备份集存在:
using target database controlfile instead of recovery
List of Backup Sets
===================
BS Key& Type LV
Size&&&&&&
Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------
---------------
601M&&&&&&
DISK&&&&&&&
00:01:29&&&&
BP Key: 11&& Status:
AVAILABLE&& Tag:
Piece Name: D:\ORACLE\BACKUP\0FJDIAT2_1_1_
& List of Datafiles in backup set 11
& File LV Type Ckp
SCN&&& Ckp
Time& Name
& ---- -- ---- ---------- --------- ----
0& Incr & 11-APR-08
D:\ORACLE\ORADATA\TSDB\SYSTEM01.DBF
0& Incr & 11-APR-08
D:\ORACLE\ORADATA\TSDB\ORATEXT01.DBF
要解决这个问题,需要用到ORACLE的一个内部package:dbms_backup_restore。
可以用如下的脚本来还原这些数据文件:
devtype varchar2(256);
devtype:=sys.dbms_backup_restore.deviceAllocate
(type=&'',ident=&'t1');
sys.dbms_backup_restore.restoreSetD
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=&01,
&&&&&&&&&&&&&&&
toname=&'D:\ORACLE\ORADATA\TSDB\SYSTEM01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=&17,
&&&&&&&&&&&&&&&
toname=&'D:\ORACLE\ORADATA\TSDB\ORATEXT01.DBF');
sys.dbms_backup_restore.restoreBackupPiece(done=&done,
&&&&&&&&&&&&&&&
handle=&'D:\oracle\backup\0BJDI02G_1_1_',
params=&null);
sys.dbms_backup_restore.deviceD
然后在恢复一下数据库就可以了:
SQL& recover database using backup controlfile
1.2&& ORA-01190
在进行RMAN操作的时候,当出现控制文件和数据库的SCN不一致的情况时,系统不能正常open,报错ORA-01190。查看对它的描述:
[chengzx@V2401]$ oerr ora 1190
0, "controlfile or data file %s is from before the
last RESETLOGS"
// *Cause: Attempting to use a data file when the log reset
information in
//&&&&&&&&&
the file does not match the controlfile. Either the data file
//&&&&&&&&&
or the controlfile is a backup that was made before the most
//&&&&&&&&&
recent ALTER DATABASE OPEN RESETLOGS.
// *Action: Restore file from a more recent backup.
可以通过在spfile或者pfile中加入一个_allow_resetlogs_corruption=TRUE来解决这个问题。具体添加的方法就不具体说了。
1.3&& ORA-01991
在恢复数据库的过程中,可能会经常碰到错误ORA-01991。查看它的描述:
[chengzx@V2401]$ oerr ora 1991
0, "invalid password file '%s'"
// *Cause:
// *Action:
可以用如下命令来解决这个问题:
C:\& orapwd file=C:\oracle\DATABASE\PWDtsdb.ORA
password=dascom
恢复数据库时,可能会遇到字符集报错PLS-00553问题
该问题一般情况下为原数据库与恢复时使用的目标数据库的字符集不一致,处于该种情况下,如果能确认数据库字符集最好,若不能确认则使用rman
target sys/password方式进入rman方式,而不是使用rman target / 进入。
1.5 在备份时需要数据库为archive log模式运行,可以采用如下步骤进行
通过一下命令来确认数据库是否为归档模式:
Archive log
修改pfile文件的log_archive_start=true,重新启动数据库之后通过下述方式将数据库修改为归档模式。
1)&& sqlplus
2)&& conn /as
1&&& 基础知识
在存储业务数据的时候,用的是Oracle开发的关系数据库。同时,Oracle还提供了专门的备份和恢复管理工具RMAN(Recovery
Manager),它在Oralce
9i后得到了很大的提高。鉴于我们所采用的Oracle数据库都是9i版本的,所以我们可以采用RMAN来实现对业务数据的备份和恢复。这也是经过考虑了RMAN所具有的多个优点:
l. 支持在线热备份,备份时不影响数据库的正常使用;
2.&支持多级增量备份,通过制定合适的备份策略,可以减少恢复和还原数据库的时间;
支持并行备份、恢复,减少备份的时间;
3.备份、恢复使用简单,从Oracle8开始支持,到Oracle9版本时已经非常成熟。
4.& 由于RMAN可以做到对数据块级的变化检查,所以每次备份的数据量非常小。
5.&数据库必须运行于归档模式下方可运用该工具进行备份
提供的备份类型
RMAN提供了2种备份的类型:
l& 全库备份
做全库备份时,RMAN将备份数据库中的所有数据块。
l& 增量备份
做增量备份时,RMAN只备份自上次备份以来修改的数据块。
它支持5级(0-4级)备份。
增量备份前,应该先做一个0级的备份。如果没有做,在做其他级别的备份时,oracle自动完成一个0级备份。
在1-4级增量备份中,又可分为两种增量备份方式:cumulative(累积备份)方式和非cumulative(差异备份)方式。采用cumulative方式执行n级增量备份时,RMAN备份自上次n-1级或者更低级别的备份后被修改的数据块。非cumulative方式,只备份上次增量备份后被修改的数据块。
恢复目录(Recovery Catalog)就是保存RMAN备份信息的数据库。
使用Recovery Catalog来存储备份信息有很多好处:
l& 可以在一个catalog中存储多个数据库的备份信息;
可以在一个catalog中存储多条日志流分支(incarnation)的备份信息;
l& 可以支持更多备份命令和自动备份函数;
但是,使用Recovery Catalog来保存RMAN的备份信息,也需要其他的额外开销:
l& 需要新建一个数据库。否则,catalog维护数据的优势就没有了;
l& 需要足够的空间来保存备份信息;
l& 需要备份catalog信息;
l& 必要是还需要更新catalog信息。
这些都给维护catalog带来了一些麻烦。
RMAN还可以在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件。
保存在控制文件的备份信息是很危险的,如果控制文件的破坏将导致备份信息的丢失与恢复的失败,而且,没有恢复目录,很多RMAN的命令将不被支持。
但是它可以节省很多额外的维护工作。
因为我们的业务数据库不是很复杂,用Recovery
Catalog模式来备份它,不能体现出catalog的核心优势,而只会增加维护的复杂程度。所以,我们用nocatalog的模式来备份。
为了避免controlfile的破坏造成数据丢失,在RMAN中设置自动备份controlfile,以便保证Controlfile能够及时得到备份和保存。
RMAN在执行备份和恢复的时候,需要用到多个参数的配置。Oracle
9i可以配置一些参数如通道,备份保持策略等信息,通过一次设定可以多次使用,而且,设置中的信息不影响脚本中的重新设置。RMAN
默认的配置参数,通过show all 就可以看出来。
Bin目录下执行rman,
Connect target/
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CONFIGURE BACKUP OPTIMIZATION OFF;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR TYPE
DISK TO ‘%F’;
CONFIGURE DEVICE TYPE DISK PARALLELISM 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE
DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE
DISK TO 1;
CONFIGURE MAXSETSIZE TO UNLIMITED;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO
‘/u01/app/oracle/product/9.0.2/dbs/snapcf_U02.f’;
RMAN中配置参数的命令为configure。
下面,根据我的数据库的实际情况,给出RMAN备份和恢复的配置参数。
2.1&& 修改数据库为归档模式
step1:更改数据库参数,设置LOG_ARCHIVE_DEST_1 参数指向正确位置,设置LOG_ARCHIVE_START
参数为TRUE
step2:SQL&shutdown immediate
step3:SQL&startup mount
step4:SQL&alter
step5:SQL&
这个不是RMAN的参数,但是在设置RMAN参数的时候,需要用到这个值。
为了统一备份集的保存目录,保存数据文件的规整有序,我们推荐,在本机的$ORACLE_BASE目录的父目录下创建一个backup的目录,这个目录和oradata目录平行。再在其下创建$ORACLE_SID目录,备份集保存在该目录下。
我们推荐至少还需要在另外一台机器上保存备份集。如果这台机器上也有$ORACLE_BASE目录,则设置相同,如果没有的话,可以用一个目录来取代$ORACLE_BASE,但是其下面的2级目录不变。
为了描述方便,我们用变量$BACKUP_HOME来表示本机上的备份目录$ORACLE_BASE/backup/$ORACLE_SID,用$BACKUP_HOME1来表示另一台机器上的响应目录。但是需要注意的是,在RMAN的配置中,不能适用这些变量,因为RMAN出了能识别它定义的几个变量外,是不能识别其他变量的,甚至连$ORACLE_BASE这样的变量也不能识别。所以在配置的时候,应该用绝对路径来替换这2个变量。但是在下面的描述中,为了方便,就没有替换,请注意。
2.3&& 备份集保存策略
备份集保存策略分为两个:一个是时间策略,决定至少保存一个备份能恢复到指定的日期;一个冗余策略,规定至少有几个冗余的备份。
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 5
CONFIGURE RETENTION POLICY TO REDUNDANCY 5;
CONFIGURE RETENTION POLICY TO NONE;
在第一个策略中,是保证至少有一个备份能恢复到Sysdate-5 的时间点上,之前的备份
将标记为Obsolete。第二个策略中说明至少需要有三个冗余的备份存在,如果多余三个备份
以上的备份将标记为冗余。NONE 可以把使备份保持策略失效,Clear 将恢复默认的保持策
我们推荐在业务点用冗余策略来设置备份集的保存策略。考虑到备份集对磁盘空间的需求较大,我们一般保存2个备份集就可以了:
2.4&& 配置默认IO 设备类型
IO 设备类型可以是磁盘或者磁带,在默认的情况下是磁盘,可以通过如下的命令进行重新配置。
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE DEFAULT DEVICE TYPE TO SBT;
注意,如果换了一种IO设备,相应的配置也需要做修改,如
RMAN& CONFIGURE DEVICE TYPE SBT
PARALLELISM 2;
根据我们业务点的实际情况,唯一的存储硬件就是磁盘。所以我们推荐将默认的IO设备设置为Disk:
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
2.5&& 设置并行备份
RMAN支持并行备份与恢复,也可以在配置中指定默认的并行程度。如
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
指定在以后的备份与恢复中,将采用并行度为4,同时开启4个通道进行备份与恢复。
如果设置并行度大于1,则一次备份数据将分成多份(和并行度相等)进行保存。这样,虽然备份数度快一下,但是备份数据文件却比较分散,甚至有可能造成备份集不一致的问题(我曾经碰到过一个问题:采用PARALLELISM
2进行level
0备份,第一个通道的文件备份完成,第2个通道由于磁盘空间不足,导致备份失败。这样,第一个通道和第2个通道所备份的文件的备份集就不一致了)。而我们在现网中每次备份数据并不是非常大,以并行度1进行备份,速度也能够承受。所以,我们推荐,将平行度设置为1:
CONFIGURE DEVICE TYPE DISK PARALLELISM 1;
并行度为1是默认值,所以,可以不设置该参数。
并行的数目决定了开启通道的个数。如果指定了通道配置,将采用指定的通道,如果没
有指定通道,将采用默认通道配置。
通道是RMAN的服务进程与I/O 设备之前读写的途径,一个通道将对应一个服务进程。
通过CONFIGURE配置自动分配的通道,而且可以通过数字来指定不同的通道分配情
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT
‘/U01/ORACLE/BACKUP/%U’
CONFIGURE CHANNEL n DEVICE TYPE DISK FORMAT
‘/U01/ORACLE/BACKUP/%U’
如果觉得单个备份集不放心,可以设置多个备份集的拷贝,如
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE
DISK TO 2;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE
DISK TO 2;
如果指定了多个拷贝,可以在通道配置或者备份配置中指定多个拷贝地点
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT
‘/u01/backup/%U’, ‘/u02/backup/%U’;
我们推荐分配一个通道,因为备份的并行度决定了通道的数量,并行度为1,只需要一个通道,那么设置多个通道也用不着了。另外推荐保留2份备份的拷贝,并且将这2份拷贝保存在不同的机器上,增加备份集的安全性。
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE
DISK TO 2;
CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT
‘$BACKUP_HOME/%U_%T’, ‘$BACKUP_HOME1/%U_%T’;
注意:在配置的适用,一定要用绝对路径来取代$BACKUP_HOME和$BACKUP_HOME1。
从9i开始,可以配置控制文件的自动备份。通过如下的命令,可以设置控制文件的自动备份:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
对于没有恢复目录的备份策略来说,这个特性是特别有效的,控制文件的自动备份发生
在任何backup或者copy命令之后,或者任何数据库的结构改变之后。
可以用如下的配置指定控制文件的备份路径与格式
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR TYPE
DISK TO ‘%F’;
在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性,这个快照可以通
过如下配置:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO
‘/oracle/snapcf_SSMNDB1.f’;
因为Controlfile不能同时备份2份,则可以将这个文件备份到另外一台服务器上,作为contolfile的一个备份。
控制文件的备份也保存在备份目录下。我们推荐配置如下:
&&& CONFIGURE
CONTROLFILE AUTOBACKUP FORMAT FOR TYPE DISK TO
‘$BACKUP_HOME\%F’;
&&& CONFIGURE
SNAPSHOT CONTROLFILE NAME TO ‘$BACKUP_HOME1/SNCF_$ORACLE_SID’;
注意:在配置的适用,一定要用绝对路径来取代$BACKUP_HOME和$BACKUP_HOME1。
可以在配置中设置备份的优化,如
CONFIGURE BACKUP OPTIMIZATION ON;
如果优化设置打开,将对备份的数据文件、归档日志或备份集运行一个优化算法。
备份文件可以自定义各种各样的格式,如下:
l& %c 备份片的拷贝数
l& %d 数据库名称
l& %D 位于该月中的第几天 (DD)
l& %M 位于该年中的第几月 (MM)
l& %F 一个基于DBID
唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,
其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD 为日期,QQ 是一个1-256
l& %n 数据库名称,向右填补到最大八个字符
l& %u 一个八个字符的名称代表备份集与创建时间
l& %p 该备份集中的备份片号,从1 开始到创建的文件数
l& %U 一个唯一的文件名,代表%u_%p_%c
l& %s 备份集的号
l& %t 备份集时间戳
l& %T 年月日格式(YYYYMMDD)
推荐如下配置RMAN的参数:
l& 至少保存2个可用的冗余集;
l& 自动备份控制文件。因为控制文件中存储了RMAN的备份信息;
l& 设置默认的IO设备类型为Disk。好像也没有别的选择;
l& 配置2个备份的拷贝;
在本机$ORACLE_BASE\backup\$ORACLE_SID下面保存一份备份拷贝,在另外一台服务器上保存另外一份拷贝(可通过共享文件夹来实现);
l& 清晰表示各类文件的备份文件;
l& 优化备份。
这样,得到的配置参数实例如下:
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO
'/u02/oradatabak/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
CONFIGURE CHANNEL 1 DEVICE TYPE DISK
'/u02/oradatabak/%U_%T';
#CONFIGURE CHANNEL 1 DEVICE TYPE DISK
'/u02/oradatabak/%U_%T',&&
'$BACKUP_HOME1/%U_%T';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO
'$BACKUP_HOME1/SNCF_$ORACLE_SID.f';
注意:在配置的适用,一定要用绝对路径来取代$BACKUP_HOME和$BACKUP_HOME1和$ORACLE_SID
以上黄色线标注的,需要按照这种格式写,比如 ’/home/oracle/databack/%U_%T’
检查SET_DUPLEX=ON
为了减少备份文件占用的磁盘空间、和备份所需要的运行时间,建议业务数据采用多级备份的机制。
同时,为了减少在数据库出现故障的时候,恢复数据所需要的时间,每隔一段时间,实现一次0级备份。按照如此,制定备份策略为:
l& 每一个月做一次0级备份;
考虑到计费集中在每个月的1日和15日,为了避免和它们产生冲突,可以在每个月的5日或者10日进行0级备份。
l& 每个星期做一次1级备份,采用非cumulative的方式;
建议在工作日的凌晨做,这样我们可以在上班后检查是否备份成功。所以,不建议在星期日和星期六凌晨做。
l& 每天做一次2级备份,采用非cumulative的方式。
这样得到,需要恢复数据时,恢复所需的最长时间为恢复一个零级备份+三个一级备份+6个二级备份+当天的归档文件所需要的时间。
制定了这样的备份策略,则可以写一个脚本来自动执行。不管业务点是新开的还是已有的,也不管开始执行备份的当天是应该执行哪级备份,都可以直接执行脚本。如果执行脚本的当天是执行2级备份,则RMAN也会自动生成一个母本的0级备份集而不是生成2级备份。
RMAN的备份命令
备份的命令主要有copy和backup。Copy是用来保存数据文件的镜像,backup用来生成只有RMAN可以识别的备份文件。我们主要用backup命令来做备份。
前面我们也提到,为了减少备份文件的大小,建议用差异增量备份的方法来做备份。Oracle默认的备份方法就是差异增量备份。
由此,可得到备份的命令如下:
Backup incremental level n database [filesperset 4];
l& n为0~2,根据执行备份的日期而定;
为了避免一个备份文件过大,可以将一次备份得到的数据写入多个文件。Filesperset参数指示了一个备份文件中保存多少个数据文件的备份数据。
为了避免存储备份集而占用大量的磁盘空间,需要定期维护备份集,删除无效的备份集和无效的archivelog来释放空间。
查看当前的备份集
删除当前备份集
在RMAN中配置了备份集的保存策略后,RMAN能够自动监测出来哪些备份集已经无效。可使用如下命令查看:
如果存在无用的备份集,可以用下面的命令删除:
如果delete obsolete后,report
obsolete运行结果还有无效的备份集,而这些obsolete又不存在。则可能是RMAN保存的备份信息出现了错误。可以用crosscheck检查一下备份集后在report&delete
一次obsolete来消除误报信息。
如果RMAN备份正常,那么在最后一次备份时间之前产生的archivelog都是无效的,都可以删除。根据备份策略,最后一次备份的时间为当天的某一时刻,所以,至多保存2天的archivelog就够了。
可以用如下的命令来删除不需要的archivelog:
RMAN& delete archivelog until time
‘sysdate-2’;
如果备份的数据比较大,备份时间比较长,可以利用如下语句,大致查询出备份的进度:
SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
&ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
&FROM V$SESSION_LONGOPS
&WHERE OPNAME LIKE 'RMAN%'
&AND OPNAME NOT LIKE '%aggregate%'
&AND TOTALWORK != 0
&AND SOFAR &&
TOTALWORK;
可以从下列相关视图中了解到备份的一些情况:
V$ARCHIVED_LOG
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION
V$BACKUP_DATAFILE
V$BACKUP_REDOLOG
V$BACKUP_SET
V$BACKUP_PIECE
V$BACKUP_DEVICE
V$CONTROLFILE_RECORD_SECTION
可以根据数据库故障的不同情况对数据库进行恢复和还原:
&O& 表空间的恢复
&O& 全库恢复
&O& 控制文件恢复
&O& SPFILE文件恢复
在使用RMAN进行恢复的时候,需要重新读写数据文件。为了保证数据文件的写一致性,数据库必须处于关闭状态。所以,在恢复的过程中,数据库是不可用的。
因为在RMAN中设置的自动备份控制文件,所以,一旦控制文件有变化,都能够自动备份起来。也就是说,可以通过控制文件的备份文件来恢复控制文件。
下面给出一个实例。
数据库CHENGZX的控制文件全部丢失。恢复过程如下:
1.&& 以nomount方式启动数据库:
SQL& startup nomount;
2.&& 通过rman来还原控制文件;
$ rman target /
RMAN& restore controlfile from
‘C:\oracle\database\CHENGZX_C-';
其中,CHENGZX_C-为控制文件备份文件。
3.&& mount数据库;
4.&& 恢复database;
SQL& recover database using backup controlfile
ORA-00279: change
generated at 03/13/:55
needed for thread 1
ORA-00289: suggestion :
D:\ORACLE\ORADATA\CHENGZX\ARCHIVE_ARCHIVE_LOG_001_00404.ALOG
ORA-00280: change
for thread 1 is in sequence #404
Specify log: {&RET&=suggested |
filename | AUTO | CANCEL}
(此时,用redo log挨个试试:)
D:\oracle\oradata\Chengzx\REDO01.LOG
ORA-00328: archived log ends at change , need later
ORA-00334: archived log:
'D:\ORACLE\ORADATA\CHENGZX\REDO01.LOG'
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would
get error below
ORA-01152: file 1 was not restored from a sufficiently old
ORA-01110: data file 1:
'D:\ORACLE\ORADATA\CHENGZX\SYSTEM01.DBF'
[sys]& recover database using backup controlfile
ORA-00279: change
generated at 03/13/:55
needed for thread 1
ORA-00289: suggestion :
D:\ORACLE\ORADATA\CHENGZX\ARCHIVE_ARCHIVE_LOG_001_00404.ALOG
ORA-00280: change
for thread 1 is in sequence #404
Specify log: {&RET&=suggested |
filename | AUTO | CANCEL}
D:\oracle\oradata\Chengzx\REDO02.LOG
Log applied.
Media recovery complete.
5.& 打开database。
一般情况下,spfile文件的备份有很多,比如pfile或者init.ora,仅仅spfile文件损坏了,可以通过它们来恢复。
如果在极端情况下,spfile和pfile、init.ora一起损坏了,还可以通过RMAN的备份集来恢复。
应为RMAN在备份Controlfile的时候,会将spfile同时备份在一起,所以Controlfile的备份集中包含了spfile的内容,这些内容通过编辑工具直接打开controlfile的备份集就可以得到。将它们copy出来,生成pfile,然后再得到spfile就可以了。
如果某个数据文件丢失了,可以对其进行恢复。
下面给出一个实例。
Test1数据库的System表空间文件'D:\ORACLE\ORADATA\TEST1\SYSTEM01.DBF'丢失了。需要恢复它。
SQL& startup
ORACLE instance started.
Total System Global Area&
&&&&&&&&&&&&&&454468
Size&&&&&&&&&&&&
Buffers&&&&&&&&&
Buffers&&&&&&&&&&&&&&&&
667648 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace
ORA-01110: data file 1:
'D:\ORACLE\ORADATA\TEST1\SYSTEM01.DBF'
恢复步骤如下:
1.&& 还原该文件到0级备份的是的状态:
RMAN& restore datafile 1;
Starting restore at 13-MAR-08
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from
backup set
restoring datafile 00001 to
D:\ORACLE\ORADATA\TEST1\SYSTEM01.DBF
channel ORA_DISK_1: restored backup piece 1
piece handle=D:\ORACLE\BACKUP\TEST1\03JB6DCH_1_1_
tag=TAG425 params=NULL
channel ORA_DISK_1: restore complete
Finished restore at 13-MAR-08
2.&& 恢复文件到最后的状态。
RMAN& recover datafile 1;
Starting recover at 13-MAR-08
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental datafile backupset
channel ORA_DISK_1: specifying datafile(s) to restore from
backup set
destination for restore of datafile 00001:
D:\ORACLE\ORADATA\TEST1\SYSTEM01.DBF
channel ORA_DISK_1: restored backup piece 1
piece handle=D:\ORACLE\BACKUP\TEST1\05JB6DEM_1_1_
tag=TAG533 params=NULL
channel ORA_DISK_1: restore complete
starting media recovery
media recovery complete
Finished recover at 13-MAR-08
恢复表空间和数据库的方法和恢复数据文件的方法基本上是相同的,只是在restore/recover命令中,datafile关键字换成tablespace就可以了。
RMAN& rest
RMAN& reco
块恢复Block Media Recovery (BMR),是恢复的最小单元,
通过块可以减少恢复时间,而且数据文件可以在线。
恢复块的时候,必须指定具体的块号,如:
RMAN& BLOCKRECOVER datafile 6 BLOCK
要恢复的坏块信息可以从报警与跟踪文件,表与索引的分析,以及具体的查询语句中获得。产生块损坏的原因一般是间断或随机的IO
错误或者是内存的块错误。
块的错误信息保存在V$DATABASE_BLOCK_CORRUPTION,用如下命令恢复该视图中列出的坏块:
RMAN& BLOCKRECOVER CORRUPTION LIST
RESTORE UNTIL TIME 'sysdate-10';
备份的坏块信息保存在V$BACKUP_CORRUPTION和V$COPY_CORRUPTION中,可以用如下的命令来恢复坏块:
RMAN& BLOCKRECOVER datafile 2 BLOCK
12, 13 datafile 7 BLOCK 5, 98, 99 datafile 9 BLOCK 19;
RMAN& BLOCKRECOVER TABLESPACE SYSTEM
DBA 94405 FROM TAG
"weekly_backup";
RMAN& BLOCKRECOVER TABLESPACE SYSTEM
DBA 94405 RESTORE UNTIL TIME 'SYSDATE-2';
不完全恢复就是将数据库恢复到之前的某个状态。需要进行这个操作,一般是出现了2种情况:
1)&& 用户误操作。
用户对数据库种的数据误操作了,导致数据库中数据不完整,需要恢复误操作的数据。
对于这种情况,可以用RMAN来恢复数据库,但是有一些弊端:
&O& 但是在恢复之前,需要精确知道误操作的时间,以便能够将数据库恢复到误操作之前。
&O& 误操作之后的所有数据库操作都将丢失,即使这些操作是正确的,关键的;
需要停止数据库。因为用RMAN恢复的时候,数据库必须处于关闭状态。此时,数据库不可用。知道数据恢复后才能继续提供使用。
除了用RMAN进行恢复外,还有一个方法就是使用logmnr工具从Redo log文件中挖出误操作来,用undo
SQL重新生成由于误操作而丢失的数据。进行这个操作,不需要停止数据库,也不会影响误操作后正确操作所修改的数据,和用RMAN恢复的方法相比较,有很多优势。
所以在由于误操作而造成数据库恢复时,推荐采用logmnr的方式。
2)&& 磁盘出现故障。
数据库所在服务器的磁盘出现故障,导致Redo log 或者Archive
log数据文件损坏,系统无法恢复到最后时刻。此时,需要执行不完全恢复。
执行一个不完全恢复的步骤如下:
A)& 还原数据库到最后一个备份集所备份的状态:
Starting restore at 19-MAR-08
using target database controlfile instead of recovery
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=11 devtype=DISK
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from
backup set
restoring datafile 00001 to
D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF
restoring datafile 00002 to
D:\ORACLE\ORADATA\TEST\UNDOTBS01.DBF
restoring datafile 00003 to
D:\ORACLE\ORADATA\TEST\INDX01.DBF
restoring datafile 00004 to
D:\ORACLE\ORADATA\TEST\TOOLS01.DBF
restoring datafile 00005 to
D:\ORACLE\ORADATA\TEST\USERS01.DBF
channel ORA_DISK_1: restored backup piece 1
piece handle=D:\0QJBLLIH_1_1_ tag=TAG609
params=NULL
channel ORA_DISK_1: restore complete
Finished restore at 19-MAR-08
恢复到最后一个备份集保存的状态成功。
B)& 尝试做完全恢复;
Starting recover at 19-MAR-08
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental datafile backupset
channel ORA_DISK_1: specifying datafile(s) to restore from
backup set
destination for restore of datafile 00001:
D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF
destination for restore of datafile 00002:
D:\ORACLE\ORADATA\TEST\UNDOTBS01.DBF
destination for restore of datafile 00003:
D:\ORACLE\ORADATA\TEST\INDX01.DBF
destination for restore of datafile 00004:
D:\ORACLE\ORADATA\TEST\TOOLS01.DBF
destination for restore of datafile 00005:
D:\ORACLE\ORADATA\TEST\USERS01.DBF
channel ORA_DISK_1: restored backup piece 1
piece handle=D:\ORACLE\BACKUP\TEST\0SJBLM1I_1_1_
tag=TAG410 params=NULL
channel ORA_DISK_1: restore complete
starting media recovery
RMAN-00571:
===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS
===============
RMAN-00571:
===========================================================
RMAN-03002: failure of recover command at 03/19/2008
RMAN-06053: unable to perform media recovery because of missing
RMAN-06025: no backup of log thread 1 seq 51 scn
to restore
RMAN-06025: no backup of log thread 1 seq 50 scn
to restore
RMAN-06025: no backup of log thread 1 seq 49 scn
to restore
RMAN-06025: no backup of log thread 1 seq 48 scn
to restore
RMAN-06025: no backup of log thread 1 seq 47 scn
to restore
从中可以看到,由于丢失了redo log和archive log,导致不能恢复到最后的状态。从中可以看出,seq
46以后的archivelog没有了,则可以回复到seq 46.
C)& 做精确的不完全恢复;
RMAN& recover database until sequence 46
Starting recover at 19-MAR-08
using channel ORA_DISK_1
starting media recovery
media recovery complete
Finished recover at 19-MAR-08
应该说,对数据库的备份集保存2份拷贝,在一台服务器的磁盘完全损坏的情况下,至少还有一份可用的备份集(保存2份备份集的机器的磁盘都完全损坏,这种概率还是很小的)。通过这份备份集,我们就可以做到数据库的恢复,至少是不完全恢复。
但是还有一个问题没有验证,那就是如果运行数据库软件的服务器不可用,我们是否可以用备份集在另外一台服务器上恢复这些数据呢?这个需要验证。暂时先搁置。
RMAN备份和恢复实例
下面列举一个实例,说明一下RMAN的备份和恢复。
以天津联通DB2为例。备份文件出了保存在DB2上外,还保存在DB1上。DB1有一个共享文件夹/mnt/CN1。
天津联通的$ORACLE_BASE=/export/home/oracle/app/oradata, $ORACLE_SID=
SSMNDB2。所以得到备份目录:
$BACKUP_HOME=/export/home/oracle/app/backup/SSMNDB2
$BACKUP_HOME1=/mnt/CN1/backup/SSMNDB2
5.1&& 备份
如下步骤使用RMAN进行备份:
1)& 登录RMAN;
$ rman target /
或者 $ rman targe sys/dascom@ssmndb2
2)& 检查和配置RMAN参数;
如果和推荐的配置不相同,直接再次配置相应的参数:
RMAN& CONFIGURE RETENTION POLICY TO REDUNDANCY
RMAN& CONFIGURE BACKUP OPTIMIZATION ON;
RMAN& CONFIGURE DEFAULT DEVICE TYPE TO DISK;
RMAN& CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN& CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR
DEVICE TYPE DISK TO
'/export/home/oracle/app/backup/SSMNDB2/%F';
RMAN& CONFIGURE DEVICE TYPE DISK PARALLELISM
RMAN& CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE
TYPE DISK TO 2;
RMAN& CONFIGURE CHANNEL 1 DEVICE TYPE DISK
'/export/home/oracle/app/backup/SSMNDB2/%U_%T',&&
‘/mnt/CN1/backup/SSMNDB2/%U_%T';
RMAN& CONFIGURE MAXSETSIZE TO UNLIMITED;
RMAN& CONFIGURE SNAPSHOT CONTROLFILE NAME TO
'/mnt/CN1/backup/SSMNDB2/SNCF_SSMNDB2.f';
3)& 清理历史备份集;
不管是新的工程点,还是运行过RMAN的老工程点,将RMAN记录的备份集全部删除先,保证备份集符合备份策略的设定:
4)& 执行0级备份;
删除了之前的备份集,那么就先执行一个0级备份作为母备份集:
RMAN& backup incremental level 0 database
filesperset 4;
Filesperset 4:表示每个备份集中有4个数据文件。
执行完以上4步,则RMAN的环境就已经搭建好了。上面的步骤只需要执行一次就可以了,之后不用再执行。
5)& 执行备份;
按照每天的日期计算需要执行哪级备份。推荐在每个月的5日执行0级备份,在每隔星期一的凌晨执行1级备份,在其他日期的凌晨执行2级备份。
RMAN& backup incremental level 0 database
filesperset 4;
6)& 检查备份集,删除无效的备份集;
7)& 删除无用的Archivelog;
因为每天执行备份,所以只需要保持以天的archivelog就可以了。
RMAN& delete archivelog until time
‘sysdate-1’;
第5~7步,是需要每天都执行的。
除了手动执行外,还可以写一个脚本来完成5~7步,并将脚本放入Crontab中自动调用就可以了。一个可用的脚本,稍后给出。
5.2&& 恢复
恢复是在数据库出现故障后,执行的操作。但并不是所有的故障都需要用RMAN来恢复。下面几种情况不需要用RMAN来恢复数据:
&O& 数据库运行正常,但执行了误操作,修改了数据;
这种情况可以用logmnr来恢复数据。
&O& 双机环境运行数据库。
只要不是两台数据库同时出现了问题,那么就不需要用RMAN来恢复数据,只需要用好的DB来恢复坏的DB上的数据就可以了。
下面以某数据文件损坏了为例子来说明恢复的过程吧。
1)& 检查可用的备份集;
从rman中可以看到所有的备份集,也可以看到每个备份文件是由于执行哪级备份得到的。找出最后一次0级备份得到的文件和以后执行1级和
2级得到的文件,就是一个完整的备份集。
如果备份目录没有受到伤害,那么这一步基本上不用执行。
2)& 将可用的备份集放到RMAN配置的备份目录下;
如果备份目录没有受到伤害,那么这一步基本上不用执行。
3)& 执行恢复。
参考5.3的步骤。
4)& 执行0级备份
数据库恢复后,再执行一次0级备份,保护最新数据。
5.3&& 在其他服务器上恢复数据
经过验证,可以用备份集在另外的服务器上恢复数据。下面以一个例子来说明恢复的过程。
源数据库:192.168.91.13上的TSDB
恢复目标DB:192.168.91.225上的TSDB
在225服务器上按照13上的目录结构创建一个新数据库TSDB。///需要使用XManager工具,在新机器上使用时,需要注意DISPLAY的选择,并注意.profile的修改。
2)& 将13上的备份集copy到225上。
3)& 以nomount的方式启动225上的数据库TSDB。
SQL& startup nomount
ORACLE instance started.
Total System Global Area&
Size&&&&&&&&&&&&&&&&&&
454468 bytes
Size&&&&&&&&&&&&
Buffers&&&&&&&&&
Buffers&&&&&&&&&&&&&&&&
667648 bytes
4)& 恢复controlfile。
RMAN& restore controlfile from
'D:\oracle\backup\SNCFTSDB.ORA';
Starting restore at 03-APR-08
using target database controlfile instead of recovery
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=10 devtype=DISK
channel ORA_DISK_1: copied controlfile copy
replicating controlfile
input filename=D:\ORACLE\ORADATA\TSDB\CONTROL01.CTL
output filename=D:\ORACLE\ORADATA\TSDB\CONTROL02.CTL
output filename=D:\ORACLE\ORADATA\TSDB\CONTROL03.CTL
Finished restore at 03-APR-08
5)& Mount数据库。
alter database mount
ERROR at line 1:
ORA-01991: invalid password file
'C:\oracle\DATABASE\PWDtsdb.ORA'
如果出现这个错误,可以不用理会。
6)& 恢复数据库TSDB。
Starting restore at 03-APR-08
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from
backup set
restoring datafile 00001 to
D:\ORACLE\ORADATA\TSDB\SYSTEM01.DBF
restoring datafile 00002 to
D:\ORACLE\ORADATA\TSDB\UNDOTBS01.DBF
restoring datafile 00003 to
D:\ORACLE\ORADATA\TSDB\CWMLITE01.DBF
restoring datafile 00004 to
D:\ORACLE\ORADATA\TSDB\DRSYS01.DBF
restoring datafile 00005 to
D:\ORACLE\ORADATA\TSDB\EXAMPLE01.DBF
restoring datafile 00006 to
D:\ORACLE\ORADATA\TSDB\INDX01.DBF
restoring datafile 00007 to D:\ORACLE\ORADATA\TSDB\ODM01.DBF
restoring datafile 00008 to
D:\ORACLE\ORADATA\TSDB\TOOLS01.DBF
restoring datafile 00009 to
D:\ORACLE\ORADATA\TSDB\USERS01.DBF
restoring datafile 00010 to D:\ORACLE\ORADATA\TSDB\XDB01.DBF
restoring datafile 00011 to
D:\ORACLE\ORADATA\TSDB\EC_DATA.ORA
restoring datafile 00012 to
D:\ORACLE\ORADATA\TSDB\EC_IDX.ORA
restoring datafile 00013 to
D:\ORACLE\ORADATA\TSDB\EC_TMP.ORA
restoring datafile 00014 to
D:\ORACLE\ORADATA\TSDB\EMS_DATA.ORA
restoring datafile 00015 to
D:\ORACLE\ORADATA\TSDB\EMS_IDX.ORA
restoring datafile 00016 to
D:\ORACLE\ORADATA\TSDB\EMS_TMP.ORA
channel ORA_DISK_1: restored backup piece 1
piece handle=D:\ORACLE\BACKUP\03JCSP7I_1_1_
tag=TAG744 params=NULL
channel ORA_DISK_1: restore complete
Finished restore at 03-APR-08
starting media recovery
unable to find archive log
archive log thread=1 sequence=299
RMAN-00571: ==========================================
RMAN-00569: ======= ERROR MESSAGE STACK FOLLOWS ============
RMAN-00571: ==========================================
RMAN-03002: failure of recover command at 04/03/2008
RMAN-06054: media recovery requesting unknown log: thread 1 scn
在recover database
的时候,出现以上的错误,没有关系,它表示不能恢复到源数据库最后的状态,但是能够恢复到最后一次备份时的状态。
7)& 以resetlogs的方式打开数据库。
SQL& alter dat
Database altered.
如果想恢复到最后的状态,需要archivelog和redo
log是有效的。如果他们有效的话,直接再将这些文件copy到225的相应目录下就可以了。这样,recover
database运行的时候不会报错误。
恢复过程可能出现的错误以及解决方法
在数据恢复的过程中,可能会出现很多预料不到的错误。这里,将我碰到过的几个比较难缠的问题描述一下,并给出解决方案。
6.1&& RMAN-06026
在用备份集还原数据文件的过程中,可能会出现问题RMAN-0626。查看它的错误描述如下:
[chengzx@V2401]$ oerr rman 6026
6026, 1, "some targets not found - aborting restore"
// *Cause:& Some of the files specified for
restore could not be found.
//&&&&&&&&&
Message , or 6025 is also issued to indicate which
//&&&&&&&&&
files could not be found.& Some common reasons why
//&&&&&&&&&
can not be restored are that there is no backup
//&&&&&&&&&
or copy of the file that is known to recovery manager, or
//&&&&&&&&&
there are no backups or copies that fall within the criteria
//&&&&&&&&&
specified on the RESTORE command, or some datafile copies have
//&&&&&&&&&
been made but not cataloged.
// *Action: The Recovery Manager LIST command can be used to
display the
//&&&&&&&&&
backups and copies that Recovery Manager
//&&&&&&&&&
knows about.& Select the files to be restored from
that list.
从描述中看是说备份集不存在,但是从RMAN中又能明确看到备份集存在:
using target database controlfile instead of recovery
List of Backup Sets
===================
BS Key& Type LV
Size&&&&&&
Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------
---------------
601M&&&&&&
DISK&&&&&&&
00:01:29&&&&
BP Key: 11&& Status:
AVAILABLE&& Tag:
Piece Name: D:\ORACLE\BACKUP\0FJDIAT2_1_1_
& List of Datafiles in backup set 11
& File LV Type Ckp
SCN&&& Ckp
Time& Name
& ---- -- ---- ---------- --------- ----
0& Incr & 11-APR-08
D:\ORACLE\ORADATA\TSDB\SYSTEM01.DBF
0& Incr & 11-APR-08
D:\ORACLE\ORADATA\TSDB\ORATEXT01.DBF
要解决这个问题,需要用到ORACLE的一个内部package:dbms_backup_restore。
可以用如下的脚本来还原这些数据文件:
devtype varchar2(256);
devtype:=sys.dbms_backup_restore.deviceAllocate
(type=&'',ident=&'t1');
sys.dbms_backup_restore.restoreSetD
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=&01,
&&&&&&&&&&&&&&&
toname=&'D:\ORACLE\ORADATA\TSDB\SYSTEM01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=&17,
&&&&&&&&&&&&&&&
toname=&'D:\ORACLE\ORADATA\TSDB\ORATEXT01.DBF');
sys.dbms_backup_restore.restoreBackupPiece(done=&done,
&&&&&&&&&&&&&&&
handle=&'D:\oracle\backup\0BJDI02G_1_1_',
params=&null);
sys.dbms_backup_restore.deviceD
然后在恢复一下数据库就可以了:
SQL& recover database using backup controlfile
6.2&& ORA-01190
在进行RMAN操作的时候,当出现控制文件和数据库的SCN不一致的情况时,系统不能正常open,报错ORA-01190。查看对它的描述:
[chengzx@V2401]$ oerr ora 1190
0, "controlfile or data file %s is from before the
last RESETLOGS"
// *Cause: Attempting to use a data file when the log reset
information in
//&&&&&&&&&
the file does not match the controlfile. Either the data file
//&&&&&&&&&
or the controlfile is a backup that was made before the most
//&&&&&&&&&
recent ALTER DATABASE OPEN RESETLOGS.
// *Action: Restore file from a more recent backup.
可以通过在spfile或者pfile中加入一个_allow_resetlogs_corruption=TRUE来解决这个问题。具体添加的方法就不具体说了。
6.3&& ORA-01991
在恢复数据库的过程中,可能会经常碰到错误ORA-01991。查看它的描述:
[chengzx@V2401]$ oerr ora 1991
0, "invalid password file '%s'"
// *Cause:
// *Action:
可以用如下命令来解决这个问题:
C:\& orapwd file=C:\oracle\DATABASE\PWDtsdb.ORA
password=dascom
恢复数据库时,可能会遇到字符集报错PLS-00553问题
该问题一般情况下为原数据库与恢复时使用的目标数据库的字符集不一致,处于该种情况下,如果能确认数据库字符集最好,若不能确认则使用rman
target sys/password方式进入rman方式,而不是使用rman target / 进入。
6.5 在备份时需要数据库为archive log模式运行,可以采用如下步骤进行
通过一下命令来确认数据库是否为归档模式:
Archive log
修改pfile文件的log_archive_start=true,重新启动数据库之后通过下述方式将数据库修改为归档模式。
1)&& sqlplus
2)&& conn /as
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 oracle 11g rman 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信