Chinaunix首页 | 论坛 | 博客
  • 博客访问: 305057
  • 博文数量: 92
  • 博客积分: 2541
  • 博客等级: 少校
  • 技术积分: 1015
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-03 08:50
文章分类

全部博文(92)

文章存档

2010年(3)

2009年(14)

2008年(75)

我的朋友

分类: Oracle

2008-06-03 09:31:06

                                  笔记: 

 Rman可以备份数据文件、归档日志、控制文件、参数文件、备份集文件(其他rman操作备份产生)。Rman备份文件有两种存储方式:镜像拷贝和备份集。两者是有区别的,备份集只备份使用过的数据块而镜像拷贝是拷贝整个数据文件。

一、创建用作恢复目录的表空间:(在目录数据库中创建恢复目录所用表空间)
CREATE TABLESPACE TS_RMAN
    LOGGING
    DATAFILE 'd:\oracle\product\10.2.0\oradata\testrman\TS_RMAN_001.dbf' SIZE 512M
    REUSE DEFAULT STORAGE ( INITIAL 64K NEXT 64K MINEXTENTS 1 MAXEXTENTS 505
    PCTINCREASE 0 );
commit;

二、赋权限等
create user RMAN identified by RMAN;
commit;
grant resource,connect,RECOVERY_CATALOG_OWNER to RMAN ;
commit;
grant create table to RMAN ;
commit;
alter user RMAN quota unlimited ON TS_RMAN;
commit;
alter user RMAN default tablespace TS_RMAN;
commit;
alter user RMAN temporary tablespace temp;
commit;

三、连接数据库
1.连接到目标数据库(不使用恢复目录)
c:\>ramn target nocatalog
或者
c:\rman nocatalog
RMAN>connect target
2。连接到目标数据和恢复目录数据库//先连接目标数据库.再连接目录数据库
C:\>rman target catalog
或者
c:\rman
RMAN>connect target      // 连接到目标数据库
RMAN>connect catalog   //连接到恢复目录数据库

四、在目录数据库中创建恢复目录
RMAN>rman catalog    //先连接到目录数据库
RMAN> create catalog tablespace TS_RMAN;

五、注册目标数据库到恢复目录
C:\>rman
RMAN> connect catalog rman/rman
RMAN>register database; 

select to_char(sysdate, 'yyyy-mm-dd hh24:mm:ss') from dual;  //查看数据库系统的时间。

六、执行全备份
rman>run
{
backup
incremental level 0
format '/home/oracle/db_%d_%s_%p_%t'
database
tag='backup_inc0';
}

说明:所备份的文件存放到/home/oracle下面
当前日期为2008年6月6日,备份生成2个文件名称为:db_CATTER_5_1_656705096
                                               db_CATTER_6_1_656706263
另外在/home/oracle/prodcut/10.2.0/db_1/dbs/下生成:snapcf_catter.f文件。

七、对目标数据库做一个level为1的增量备份(增量备份是指备份一个或多个数据文件的自从上一次同一级别的或更低级别的备份以来被修改过的数据块)
c:\>rman>run
{
 backup incremental level 1 for recover of copy with tag 'backup_inc0' database;
}

 

其他:
1。重新同步恢复目录
  重新同步恢复目录是使用RESYNC CATALOG命令来完成的。重新同步恢复目录是为了使,恢复目录和目标数据库控制文件保持同步,当目标数据库物理结构发生改变(增加和删除表空间、增加数据文件)时,应该重新同步恢复目录。
RMAN>resync catalog;
    执行后,RMAN会建立快照控制文件,比较恢复目录和快照控制文件,然后使用快照控制文件信息更新恢复目录,
    注意:当执行某些RMAN命令(如backup、delete等)时,会自动重新同步恢复目录。


其他概念或命令:
1。恢复目录的概念
恢复目录是由RMAN使用、维护的用来放置备份信息的仓库。RMAN利用恢复目录记载的信息去判断如何执行需要的备份恢复操作。恢复目录可以存在于ORACLE数据库的计划中。虽然恢复目录可以用来备份多个数据库,建议为恢复目录数据库创建一个单独的数据库。

2。
rman>show all   //显示所有rman环境配置

如果想恢复某项设置,我们执行如下命令:CONFIGURE... CLEAR
下面详细讲一下rman的各项配置的含义:
(1)、 Configuring the Default Device Type for Backups
配置缺省备份设备
缺省情况下rman默认的备份设备为磁盘disk,我们也可以配置其他介质作为rman的备份设备如磁带等。
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO sbt;

(2)、Configuring the Default Backup Type for Disk Backups
 配置磁盘备份的备份类型:备份集或者镜像拷贝(文件拷贝)

(3)、Configuring Control File and Server Parameter File Autobackup
 配置控制文件和参数文件自动备份
我们可以通过下面命令来启用和停用控制文件自动备份。
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
如果控制文件自动备份启动,每次控制文件内容发生变化的时候,oracle 自动在如下目录下(如果没有指定控制文件备份格式,并且安装了快速恢复区flash recovery area的话)备份控制文件。 …\flash_recovery_area\SID\AUTOBACKUP\2007_01_04\。

(4)、Configuring the Control File Autobackup Format
   配置控制文件自动备份格式
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:\cf_%F';
如果是asm存储设备,可以如下设置控制文件自动备份格式:
CONFIGURE CONTROLFILE AUTOBACKUP FOR DEVICE TYPE DISK TO '+dgroup1';
清除控制文件自动备份格式命令如下:
CONFIGURE CONTROLFILE AUTOBACKUP FOR DEVICE TYPE DISK CLEAR;
CONFIGURE CONTROLFILE AUTOBACKUP FOR DEVICE TYPE sbt CLEAR;
当然我们也可以在执行rman操作的设置备份格式,如:
RMAN> SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE sbt TO 'controlfile_%F';
RMAN> BACKUP AS COPY DATABASE;
以上设置在整个rman操作控制台生效。
RMAN> RUN {
       SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/tmp/%F.bck';
       BACKUP AS BACKUPSET DEVICE TYPE DISK DATABASE;
      }
这个set设置在rman程序块生效。

(5)、Configuring the Backup Retention Policy
   配置备份保留策略
备份保留策略有2种方式:一种是基于时间的保留策略,一种是基于冗余度的保留策略。
based on a recovery window (the maximum number of days into the past for which you can recover) or redundancy (how many copies of each backed-up file to keep).
Configuring a Recovery Window-Based Retention Policy
RECOVERY WINDOW参数指出了最大保留时间为从当前日期到多少天前。
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
Rman将保留着这期间的任何全库备份和level 0的增量备份,同时rman也保留着归档日志和level 1的增量备份,以便于可以做这个期间的基于时间点的恢复。Rman不会删除过期的备份,如果我们用REPORT OBSOLETE可以看到过期的备份并且执行DELETE OBSOLETE来删除过期的备份。
Configuring a Redundancy-Based Retention Policy
REDUNDANCY参数指出了我们想保留几份备份文件。
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
查看当前备份保留策略:
RMAN> SHOW RETENTION POLICY;
如果我们执行以下命令来清除备份保留策略,rman将不会将任何备份标记为过期。
CONFIGURE RETENTION POLICY TO NONE;

3.LIST命令
LIST BACKUP;       # lists backup sets, image copies, and proxy copies
LIST BACKUPSET;    # lists only backup sets and proxy copies
LIST COPY;         # lists only disk copies
LIST BACKUP BY FILE; # shows backup sets, proxy copies, and image copies
LIST COPY BY FILE;   # shows only disk copies
LIST EXPIRED BACKUP;
LIST EXPIRED BACKUP BY FILE;
LIST BACKUP SUMMARY;  # lists backup sets, proxy copies, and disk copies
LIST EXPIRED BACKUP SUMMARY;
LIST BACKUP OF DATABASE;  # lists backups of all files in database
LIST COPY OF DATAFILE 'ora_home/oradata/trgt/system01.dbf';  # lists copy of specified datafile
LIST BACKUPSET 213;  # lists specified backup set
LIST DATAFILECOPY '/tmp/tools01.dbf';  # lists datafile copy
LIST BACKUPSET TAG 'weekly_full_db_backup';  # specify a backup set by tag
LIST COPY OF DATAFILE 'ora_home/oradata/trgt/system01.dbf' DEVICE TYPE sbt; # specify a backup or copy by device type
LIST BACKUP LIKE '/tmp/%'; # specify a backup by directory or path
LIST COPY OF DATAFILE 2 COMPLETED BETWEEN '10-DEC-2002' AND '17-DEC-2002'; # specify a backup or copy by a range of completion dates
LIST ARCHIVELOG ALL BACKED UP 2 TIMES TO DEVICE TYPE sbt; # specify logs backed up at least twice to tape
LIST BACKUP OF DATAFILE 1;
LIST BACKUP OF TABLESPACE;
LIST BACKUP OF DATAFILE;
LIST BACKUP ARCHIVELOG ALL; #简要信息
LIST BACKUP OF ARCHIVELOG ALL; #详细信息
LIST BACKUP OF CONTROFILE;
LIST BACKUP OF SPFILE;

4.两个重要的恢复命令:
RESTORE:按照RMAN存储库的条目从备份文件恢复需要的文件。
RECOVER:使用数据文件和REDO文件进行完全的或者时间点的数据库媒体恢复。

RMAN恢复概要:
1、 首先要确定需要恢复哪些文件,控制文件、参数文件、归档日志文件和数据文件。
2、 选择正确的恢复方式。例如恢复一个单独的表空间或者数据文件,可以在数据库OPEN状态下把需要恢复的表空间或者数据文件OFFLINE,如果需要恢复所有的数据文件,必须关闭数据库然后在数据库MOUNT状态执行RESTORE。
3、 用RESTORE命令从备份恢复丢失的数据库文件的时候,可以把备份数据库文件恢复原始位置或者恢复到一个新的位置(例如原始磁盘损坏),例如我们想把控制文件恢复到新的位置,则必须要修改SPFILE;如果想把数据文件或者REDO文件恢复到其他位置,则必须修改CONTROLFILE。
4、 如果从备份中恢复了数据文件,必须执行RECOVER来执行数据库恢复。
恢复的最终结果就是要让我们可以再次使用数据库。例如丢失了控制文件而从备份执行恢复我们需要RESTART数据库;如果恢复了个别的表空间或者数据文件我们最终需要把恢复的表空间或者数据文件ONLINE。
总之,执行数据库恢复是要根据具体情况来决定我们到底概要执行什么样的操作的。例如仅仅恢复了SPFILE的话,我们不必执行媒体恢复RECOVER操作。如果我们丢失了部分CONTROLFILE,数据库会自动SHUTDOWN,我们可以从有效的CONTROLFILE拷贝覆盖已经损坏的CONTROLFILE,或者修改参数文件中的CONTROL_FILES参数,把已经损坏的控制文件去掉,这样我么就可以再次启动我们的数据库了;如果我们从备份中恢复了CONTROLFILE,尽管我们没有恢复数据文件,我们也必须要执行媒体恢复并且用带有OPEN RESETLOGS参数的方式来OPEN数据库。

数据库的状态和数据文件的位置决定了什么时候该执行恢复,该如何恢复,我们可以按照如下方式来检查是否有数据库文件需要执行媒体恢复。

 

删除备份集:
RMAN>delete backup;

 

 

                           不完全恢复:

*********************************************************************

一.基于时间的恢复
   不完全恢复只适用于ARCHIVELOG模式,而且只能在MOUNT状态下来完成。
1.查看表manager.code_table的行数
SQL>select count(*) from manager.code_table;
  COUNT(*)
----------
       104
查看当前时间为09:47:04

截断该表:
truncate table manager.code_table;

2.将数据库启动到MOUNT状态
sql>startup force mount;

3.登录到目录数据库及恢复目录数据库,恢复到09:47:04这个时候:
rman target catalog

rman>run {
sql'alter session set NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"';
set until time='2008-06-08 09:47:04';
restore database;
recover database;
sql 'alter database open resetlogs';
}

   当使用resetlogs选项打开数据库以后,会复位日志序列号 ,并生产新的数据库副本。注意:在10G之前,
在不完全恢复之后,必须重新备份数据库;从10G开始,ORACLE提供了安全机制可以确保规定日志不会被覆盖
,从而使得在恢复数据库时可以使用早期数据库副本的备份,但在执行了不完全恢复之后,建议删除早期的所有备份,并重新备份你数据库,如下:

rman>
run {
delete noprompt backup;
delete noprompt copy;
bakcup database format='/home/oralce//db_%d_%s_%p_%t';
sql 'alter system archive log current';
}

二.基于SCN恢复:
  以下模拟用户误删除表manager.code_table为例,
首先确定在被删除前SCN的值:

sql>select current_scn from v$database; //查看到SCN值为2128975

sql>startup force mount;

run{
set until scn=2128975;
restore database;
recover database;
sql 'alter database open resetlogs';
}

*********************************************************************

 

                            完全恢复:

*********************************************************************

                                   rman完全恢复
  (以下例子均通过本人实践验证成功!)

restore命令用来转储数据文件备份,
recover命令用来应用归档日志,
switch database命令可以改变控制文件所记载的数据文件位置和名称。


rman>report schema;    //查看数据库的物理结构方案

  一.恢复SYSTEM表空间的数据文件

例子1.system表空间的数据文件丢失(实践成功)

启动时候:
SQL> startup
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/home/oracle/oradata/catter/system01.dbf'

首先启动到mount状态:
sql>startup force mount;
连接到目标数据库及恢复目录:
rman targer catalog
rman>
run {
restore datafile 1 ;
recover datafile 1 ;
sql 'alter database open';
}


例子2:system表空间数据文件所在磁盘出现故障的恢复(成功!)

如果数据文件所在磁盘出现硬件故障,那么数据文件将不能被转储到其原来的位置,为了恢复该文件,必须将其转储到其他磁盘,必须用SET NEWNAME 来指定新的位置.

首先启动到mount状态:
sql>startup force mount;
连接到目标数据库及恢复目录:
rman targer catalog
rman>
run {
set newname for datafile 1 to '/home/oracle/oradata/catter/system01.dbf';
restore datafile 1 ;
switch datafile 1;
recover datafile 1 ;
sql 'alter database open';
}

   二.恢复数据库

例子1.所有数据文件都丢失,(成功)
可以通过查询动态性能视图来确定要恢复的数据文件
SQL> select file#,error from v$recover_file;

sql>startup force mount;
连接到目标数据库及恢复目录:
rman targer catalog
rman>
run {
restore database ;
recover database ;
sql 'alter database open';
}
 
如果数据文件所在的磁盘出现硬件故障,则需要指定新的数据文件位置:

sql>startup force mount;
连接到目标数据库及恢复目录:
rman targer catalog
rman>
run {
set newname for datafile 1 to '/home/oracle/system01.dbf';
set newname for datafile 2 to '/home/oracle/undotbs01.dbf';
set newname for datafile 3 to '/home/oracle/sysaux01.dbf';
set newname for datafile 4 to '/home/oracle/users01.dbf';
.
.
restore database ;
switch datafile all;
recover database ;
sql 'alter database open';
}

   三.在OPEN状态下恢复关闭后意外丢失的数据文件
 
   如果在关闭状态下数据文件出现介质失败,哪么数据库无法打开,假如在关闭状态下数据文件所在磁盘出现损坏。

    尽管在MOUNT状态下可以恢复数据文件(如上),但因为这种恢复方法会增加数据库停用时间,
所以应该在OPEN状态下恢复该数据文件,除了SYSTEM表空间外,其他数据文件都可以使用如下方法进行恢复:

在数据OPEN状态下,误删了数据文件CIRCUL.ORA
在启动或关闭数据时,会有提示:
ORA-01110: data file 9: '/home/oracle/oradata/catter/CIRCUL.ORA'
ORA-27041: unable to open file
提示数据文件9找不到,或者用select file#,error from v$recover_file;来确定要恢复的文件

先启动启动到mount状态:
SQL>startup force mount; 

RMAN>
run {
sql 'alter database datafile 9 offline';
sql 'alter database open';
restore datafile 9 ;
recover datafile 9 ;
sql 'alter database datafile 9 online';
}

   四.在OPEN状态下恢复打开时意外丢失的数据文件
  在OPEN下,数据文件出现丢失,

RMAN>
run {
sql 'alter database datafile 4 offline';
restore datafile 4 ;
recover datafile 4 ;
sql 'alter database datafile 4 online';
}

    五.恢复表空间

     当数据处于OPEN状态 ,如果某个表空间的所有数据文件全部出现介质失败
RMAN>
run {
sql 'alter tablespace CIRCUL offline for recover';
restore tablespace CIRCUL;
recover tablespace CIRCUL;
sql 'alter tablespace CIRCUL online';
}

如果是硬件故障,则需要改变位置:
RMAN>
run {
sql 'alter tablespace CIRCUL offline for recover';
set newname for datafile 9 to '/home/oracle/CIRCUL.ORA';
restore tablespace CIRCUL;
switch datafile all;
recover tablespace CIRCUL;
sql 'alter tablespace CIRCUL online';
}

*********************************************************************

 

                         rman维护命令

*********************************************************************


1 .report
 report schema;                       列出目标数据库的表空间和数据文件信息。
 report obsolete redundance 2         报告陈旧备份
 report unrecoverable                 报告不可恢复的数据文件
 report need backup                   报告需要备份的数据文件

2. list
 list backup                          列出所有备份
 list backup of database              列出数据文件备份集
 list backup of controlfile           列出控制文件备份集
 list backup of archivelog all        列出归档日志备份集
 list backup of spfile                列出SPFILE备份集
 list backup of spfile                列出数据文件映像副本
 list copy of controlfile             列出控制文件映像副本
 list copy of archivelog              列出归档日志映像副本
 list backup of spfile                列出数据库副本

3.crosscheck
该命令用于核对磁盘和磁带上的备份文件,以确保RMAN资料库与备份文件保持同步。

 crosscheck backup                    核对所有备份集
 crosscheck backup of database        核对所有数据文件的备份集
 crosscheck backup of tablespace system 核对特定 的表空间备集

*********************************************************************

 

 

阅读(2298) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~