RMAN学习笔记01——登录


从今天开始学习一下RMAN的使用。RMAN在Oracle中的重要性就不用多说了,反正要备份数据库不用RMAN是不可想象的。所以明确一下 RMAN的细节用法是非常必要的,从今天开始花几天时间从各个方面学习一下详细用法。本文很大程度上参考了junsansi大牛的《一步一步学RMAN》,另外参考了一些Oracle基础读物。下面开始,首先是使用RMAN前的一些准备工作。


1、使用RMAN时,需要将数据库设置为归档模式

SQL> conn sys/sys as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination D:\oracle\oradata\dodo\archive
Oldest online log sequence 26
Next log sequence to archive 28
Current log sequence 28

开启归档方法:
a. shutdown immediate
b. startup mount
c. alter database archivelog
d. alter database opne

禁止归档方法:
a. shutdown immediate
b. startup mount
c. alter database noarchivelog
d. alter database open


2、创建备份用户和表空间:

SQL> create tablespace recovery_tbs datafile 'D:\oracle\oradata\dodo\recovery_tbs.ora' size 15M autoextend on next 10M;

Tablespace created

SQL> create user rman identified by rman default tablespace recovery_tbs;

User created

SQL> grant connect,resource,recovery_catalog_owner to rman;

Grant succeeded

SQL> alter user rman quota unlimited on recovery_tbs;

User altered


3、登录rman:

①登录rman后使用connect target命令登录:

C:\Documents and Settings\wangxiaoqi>set oracle_sid=dodo

C:\Documents and Settings\wangxiaoqi>rman

Recovery Manager: Release 9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

RMAN> connect target /

connected to target database: DODO (DBID=472976704)

②直接用rman命令登录:

C:\Documents and Settings\wangxiaoqi>rman target /

Recovery Manager: Release 9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: DODO (DBID=472976704)

RMAN>

③链接远程数据库:

C:\Documents and Settings\wangxiaoqi>rman target sys/sys as sysdba @dodo2

Recovery Manager: Release 9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: DODO2 (DBID=472976705)

RMAN>


4、创建恢复目录:

C:\Documents and Settings\wangxiaoqi>rman

Recovery Manager: Release 9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

RMAN> connect catalog rman/rman

connected to recovery catalog database1
recovery catalog is not installed

RMAN> create catalog;

recovery catalog created

若想把恢复目录创建到其他表空间,则使用:
RMAN> create catalog tablespace XXX;

删除恢复目录:
RMAN> drop catalog;


5、连接恢复目录:

在登录RMAN后连接:
RMAN> connect catalog rman/rman

connected to recovery catalog database

也可以直接登录时就连接:
C:\Documents and Settings\wangxiaoqi>rman target / catalog rman/rman

Recovery Manager: Release 9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: DODO (DBID=472976704)
connected to recovery catalog database

RMAN>

不连接catalog:
C:\Documents and Settings\wangxiaoqi>rman target / nocatalog

Recovery Manager: Release 9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: DODO (DBID=472976704)
using target database controlfile instead of recovery catalog


6、注册数据库:

在RMAN中有恢复目录的情况下,连接目标数据后还需要注册数据库
即将目标数据库中的控制文件转到恢复目录中
同一个恢复目录中只能注册一个目标数据库。

RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete


7、使用log方式登录:

首先创建一个用于记录log信息的文件
然后在登录时使用:

C:\Documents and Settings\wangxiaoqi>rman target / log D:\oracle\oradata\dodo\logs\rman_log.txt
RMAN>

当使用了log时,所有的信息将不在屏幕上打印,而直接存入log文件中
所以一般操作还是不要使用log,当执行一个很长的批处理时,可能需要在log文件中记录下操作信息

RMAN学习笔记02——常用设置


昨天学习了RMAN环境的搭建以及登录的方法,今天学习一下RMAN中的一些设置、常用命令、以及参数的意义。工欲善其事,必先利其器嘛。总的来说RMAN的参数并不是非常复杂,基本上一天时间的学习可以基本掌握,再接下去就是要通过实践来强化记忆和了解实际用法了。


1、打开和关闭数据库:

基础知识回顾:

Oracle的启动过程分为三个阶段:
① 启动数据库实例:读取定义启动参数的文件、分配SGA区、启动后台进程
② 加载数据库文件:读取参数文件指定的控制文件、将数据库文件与已启动实例关联
③ 打开数据库:打开联机数据文件、日志文件

数据库启动可分为:
① startup:正常方式启动实例、加载数据库文件、打开数据库
② startup force:强制打开数据库
③ startup mount:只启动实例,不打开数据库(用于切换模式、恢复数据等)
④ alter database open:startup mount后打开数据库

数据库关闭可分为:
① shutdown normal:正常关闭,必须等所有用户退出后才关闭
② shutdown immediate:立即关闭,所有正在处理的事务回退
③ shutdown abort:异常关闭,马上关闭数据库,但不对事务进行处理

由于备份一般需要在关闭数据库的情况下操作,所以RMAN具有直接打开和关闭数据库的功能。
所有操作指令与sqlplus下的命令完全相同。


两种基本类型的RMAN命令:独立命令和作业命令。

独立命令: 在 RMAN 提示符下单独执行,不能显示为 RUN 内的子命令。
RMAN提示符下执行,通常是自包含的。以下是一些独立命令:
• CHANGE
• CONNECT
• CREATE CATALOG、RESYNC CATALOG
• CREATE SCRIPT、DELETE SCRIPT、REPLACE SCRIPT
作业命令:必须位于 RUN 命令的大括号内,以组的形式执行,一些命令既可以作为独立命令执行,也可以作为作业命令执行。通常被组合在命令块内并按顺序执行。如果块内的任一命令失败,RMAN就会停止处理,不再执行块内的其它命令。但仍然保留所有已执行命令的结果,不会以任何形式撤消。仅能作为作业命令运行的命令示例是 ALLOCATE CHANNEL。因为仅为执行作业分配通道,所以该命令不能作为独立命令发出。有一些命令既可以在提示符下发出,也可以在RUN命令块内发出,如 BACKUP DATABASE。如果发出的是独立命令,则RMAN将使用自动通道分配功能分配所需的通道。您可以交互模式或批处理模式执行独立命令和作业命令。

2、常用命令

① 要使用操作系统命令:

RMAN> host;

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\wangxiaoqi>

与SqlPlus中不同的是,RMAN中host后面必须加“;”

② 使用SQL命令:

RMAN> SQL 'ALTER SYSTEM ARCHIVE LOG ALL';

但是使用SQL命令的限制比较多,主要是针对数据库级的操作,很多的SQL语句都是无法使用的
因此最好的方法是先host登录到OS,再sqlplus进入SQL:

RMAN> host;

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\wangxiaoqi>sqlplus wangxiaoqi/wangxiaoqi

SQL*Plus: Release 9.2.0.1.0 - Production on Thu Sep 18 14:30:03 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL>


3、 首先列出所有指标:

RMAN> show all;
using target database controlfile instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\ORACLE\ORA92\DATABASE\SNCFDODO.ORA';# default


4、 配置自动通道数:

RMAN> show device type;

RMAN configuration parameters are:
CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default

RMAN> configure device type disk parallelism 2; --表示并行数

new RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

指定在以后的备份与恢复中,将采用并行度为2,同时开启2个通道进行备份与恢复,当然也可以在run中指定通道来决定备份与恢复的并行程度。并行的数目决定了开启通道的个数。如果指定了通道配置,将采用指定的通道,如果没有指定通道,将采用默认通道配置。有点儿绕是吧,我来给你白话一把。

默认情况下,自动分配通道的并行度为1,如果你通过设置PARALLELISM设置了并行通道为2,那么在run块中,如果你没有单独通过ALLOCATE CHANNEL命令指定通道,它会默认使用2条并行通道,如果你在run命令块中指定了数个ALLOCATE CHANNEL,那么rman在执行备份命令时会以你设置的channel为准,而不管configure中配置了多少个并行通道。需要注意的一点是,在backup命令中有一个FILESPERSET参数,该参数是指rman建立的每个备份集中所能包含的备份片段(即磁盘文件)的最大数,该参数默认值为64,如果在执行backup命令时没有指定该参数值,那么rman会仅使用第一个通道来执行备份,其它通道将处于空闲状态。关于通道数与FILESPERSET值之间也有一个大小关系,逻辑稍显复杂这些就不多废话了,总之一条,filesperset值不要小于你设定的通道数。

RMAN> show device type;

RMAN configuration parameters are:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;

若要清除对通道数的设置(其它参数同):

RMAN> configure device type disk clear;

old RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
RMAN configuration parameters are successfully reset to default value
starting full resync of recovery catalog
full resync complete


5、制定自动通道默认设备:

RMAN> show default device type;

RMAN configuration parameters are:
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

RMAN> configure default device type to sbt; --磁带备份

new RMAN configuration parameters:
CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

RMAN> configure default device type clear; --还原默认设置

old RMAN configuration parameters:
CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
RMAN configuration parameters are successfully reset to default value
starting full resync of recovery catalog
full resync complete


6、配置磁盘:

RMAN> show channel;

RMAN configuration parameters are:
RMAN configuration has no stored or default parameters

RMAN> configure channel device type disk format 'D:\oracle\oradata\dodo\rmanback\ora_%t_%s_%p';

new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'D:\oracle\oradata\dodo\rmanback\ora_%t_%s_%p';
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

RMAN> configure channel 2 device type disk format 'D:\oracle\oradata\dodo\rmanback\ora_%t_%s_%p';

new RMAN configuration parameters:
CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT 'D:\oracle\oradata\dodo\rmanback\ora_%t_%s_%p';
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

RMAN> show channel;

RMAN configuration parameters are:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'D:\oracle\oradata\dodo\rmanback\ora_%t_%s_%p';
CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT 'D:\oracle\oradata\dodo\rmanback\ora_%t_%s_%p';

注:%t代替时间戳;%s代替备份组号;%p代替备份片号

取消:

RMAN> configure channel 2 device type disk clear;

old RMAN configuration parameters:
CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT 'D:\oracle\oradata\dodo\rmanback\ora_%t_%s_%p';
old RMAN configuration parameters are successfully deleted
starting full resync of recovery catalog
full resync complete


7、控制文件配置:

启动控制文件的自动备份:

RMAN> configure controlfile autobackup on;

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

RMAN> show controlfile autobackup;

RMAN configuration parameters are:
CONFIGURE CONTROLFILE AUTOBACKUP ON;

设置控制文件、服务器参数文件备份文件格式路径:

RMAN> configure controlfile autobackup format for device type disk to 'D:\oracle
\oradata\dodo\rmanback\ctl_%F'; --F必须大写

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:\oracle\orada
ta\dodo\rmanback\ctl_%F';
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete


8、保存策略:

保存策略分两种

时间策略:决定至少有一个备份能恢复到指定的日期

RMAN> configure retention policy to recovery window of 3 days;

new RMAN configuration parameters:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

注:保证至少有一个备份能恢复到3天前的时间点上,之前备份标注为obsolete

冗余策略:决定至少有几个冗余的备份:
RMAN> configure retention policy to redundancy 3;

old RMAN configuration parameters:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
new RMAN configuration parameters:
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

注:至少需要有3个冗余备份,若多于3个,则以前备份标记为obsolete

取消策略:

RMAN> configure retention policy to none;

查看策略:

RMAN> show retention policy

RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;

注:可以用 RMAN> report obsolete; 来查找当前的obsolete备份。


9、备份优化设置:

打开备份优化:
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;

关闭备份优化:
RMAN> CONFIGURE BACKUP OPTIMIZATION OFF;


具体优化机制比较复杂,需要注意以下两点:
①type只能选一种,不能disk和sbt都选
②BACKUP DATABASE或BACKUP ARCHIVELOG命令中带有ALL或LIKE参数

RMAN学习笔记03——备份


基础知识准备得差不多了,今天开始进入RMAN备份的实际演练。RMAN的备份提供了非常多的种类选择,例如冷备、热备、全库备份、数据文件备份、Log备份、controlfile备份等等,非常全面。当然实际环境中的备份基本都是使用脚本进行,但是这里先学习一下单条命令的语法和格式处理:


一、Copy备份:

Copy用于数据文件的备份,可以复制单个数据文件、归档日志和控制文件等等。(其实跟OS里的复制粘贴是一个道理)

具体语法如下:
COPY KEYWORD <input_file> TO <location> ;

其中:input_file用文件地址'D:\oracle\oradata\dodo\WXQ_TBS.ORA'来表示需要备份的单个数据文件。

KEYWORD说明了文件的类型,包括:

DATAFILE: 备份数据文件
CURRENT CONTROLFILE: 备份控制文件
ARCHIVELOG: 备份归档日志
DATAFILECOPY: 备份已经备份的数据文件
CONTROLFILECOPY: 备份已经备份的控制文件
BACKUPPICE: 备份已经使用BACKUP备份的文件

举例说明:

RMAN> copy datafile 'D:\oracle\oradata\dodo\XDB01.DBF' to 'D:\oracle\oradata\dodo\rmanback\test1.cp';
RMAN> copy current controlfile to 'D:\oracle\oradata\dodo\rmanback\test2.cp';
注:current controlfile 不能制定文件名


二、BackUp备份:

BACKUP是对数据的备份,可以备份某个表空间或者整个数据库,语法如下:
BACKUP [level] <backup_type> ;

LEVEL为备份增量级,取值为FULL(全备份)或INCREMENTAL(增量备份)

BACKUP_TYPE为备份的数据库对象类型,包括以下几类:

1.备份数据库:


RMAN> BACKUP DATABASE FORMAT 'e:\oradata\backup\%U';

注:若不加FORMAT则自动复制到自己设定的默认channel目录里,若没有默认设置,则备份到ORACLE_HOME/database下


RMAN> run {
2> allocate channel ch1 device type disk format 'e:\oradata\backup\%U';
3> allocate channel ch2 device type disk format 'e:\oradata\backup\%U';
4> BACKUP DATABASE;}

注:备份之后可使用一下命令显示备份信息 RMAN> list backup of database;

2.备份表空间:


RMAN> BACKUP TABLESPACE USERS FORMAT 'e:\oradata\backup\%U';


RMAN> configure channel 1 device type disk format 'e:\oradata\backup\%U';
RMAN> BACKUP TABLESPACE USERS;

注:channel后面跟的为号数,不是名字,不能用ch1


RMAN> run {
2> allocate channel ch1 device type disk format 'e:\oradata\backup\%U';
3> BACKUP TABLESPACE SYSTEM;}

注:查看备份信息 RMAN> list backup of tablespace users;

3.备份数据文件:

首先需要使用以下SQL来确定每个datafile的编号:

select file_name,file_id,tablespace_name from dba_data_files;


RMAN> BACKUP DATAFILE 1,2,3;

注: RMAN> list backup of datafile n;

4.备份控制文件:


RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> configure controlfile autobackup format for device type disk to 'e:\oradata\backup\ctl_%F';
设置自动备份controlfile,以后任何操作都会自动备份到相应地址


对于SYSTEM TABLESPACE会自动备份CONTROLFILE


RMAN> BACKUP CURRENT CONTROLFILE;


在其他的备份操作中加入CONTROLFILE备份
RMAN> BACKUP TABLESPACE USERS INCLUDE CURRENT CONTROLFILE;

注:查看备份情况 RMAN> list backup of controlfile;

5.备份归档文件:


RMAN> BACKUP ARCHIVELOGALL [DELETE INPUT, DELETE ALL INPUT];

ALL :备份全部归档日志
DELETE INPUT :备份结束后删除已经备份的归档日志
DELETE ALL INPUT :备份结束后删除归档目录中的所有文件


在其他的备份操作中加入ARCHIVELOG备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

PLUS ARCHIVELOG的工作流:
1.运行ALTER SYSTEM ARCHIVE LOG CURRENT语句对当前redolog进行归档
2.执行BACKUP ARCHIVELOG ALL命令备份所有已归档日志
3.执行BACKUP命令对指定项进行备份
4.再次运行ALTER SYSTEM ARCHIVE LOG CURRENT对当前redolog归档
5.对新生成的尚未备份的归档文件进行备份

查看:RMAN> LIST BACKUP OF ARCHIVELOG ALL;


三、增量备份:

RMAN提供了1-3级的增量备份级别来提高备份速度。
增量备份可以在归档模式和非归档模式下进行,但是在非归档模式下只能进行脱机备份。

RMAN> BACKUP INCREMENTAL LEVEL=1 TABLESPACE system;


RMAN学习笔记04——操作指令


在使用RMAN进行备份和恢复之后,有很多命令可以用来查询当先的备份集、以及各类状态、信息。下面简单介绍一下这些命令的使用方法:


一、run命令:

run作为rman中的批处理命令,其实质是将原来单个执行的命令组合到一起,放在run{}之间,批量执行。
使用run的优点是其中的任何一条命令失败后则整个批处理停止执行。

run可以执行的命令包括:BACKUP、ALLOCATE、EXECUTE、SCRIPT、RESTORE、RECOVER、SQL、HOST

手动配置通道的语法

run{
ALLOCATE CHANNEL channel_name DEVICE TYPE DISK;
BACKUP ...
...}

可以设置多个以提高效率

其他的命令以后详述。


二、列表指令:

RMAN> LIST BACKUP OF DATABASE; //列出全库备份信息
RMAN> LIST COPY OF TABLESPACE 'SYSTEM'; //列出COYP后的TABLESPACE信息
RMAN> LIST BACKUP OF DATAFILE D:\oracle\oradata\dodo\SYSTEM01.DBF'; //列出制定数据文件备份信息

RMAN> LIST EXPIRED BACKUP; //得到过期的备份信息
RMAN> LIST EXPIRED COPY;

其他需要的信息均可按以上格式得到


三、删除指令:

1、删除所有backup备份:

RMAN> delete backup;

2、删除所有copy备份:

RMAN> delete copy;

3、删除陈旧备份:

RMAN> delete obsolete;

注:按备份冗余策略确定陈旧备份,具体参见“RMAN学习笔记02--常用设置”

4、删除expired备份:

首先使用crosscheck命令核对备份集:
RMAN> crosscheck backup;
RMAN> crosscheck copy;

会将终止的备份集标记为expired,然后删除
RMAN> delete expired backup;
RMAN> delete expired copy;

说明:crosscheck命令的作用是检测backup或copy的文件是否存在或损坏,当损坏或删除时标注为expired
标记之后使用delete expired删除错误文件以及目录中的信息。

5、删除特定备份集:

RMAN> delete backupset 19;
注:具体的备份集号可使用LIST命令查看

6、删除特定备份片:

RMAN> delete backuppiece 'D:\ORACLE\ORADATA\DODO\RMANBACK\1EJRIHHI_1_1';

注意:路径必须全部用大写,否则报错
其实这个路径可以通过LIST命令中的Piece Name来获得

7、删除特定映像副本:

RMAN> delete datafilecopy 'D:\ORACLE\ORADATA\DODO\RMANBACK.A';
地址可以通过< RMAN> list copy; >命令结果集中的NAME字段获得
注意:此处的地址可以用小写

8、删除archivelog:

RMAN> delete archivelog 'D:\ORACLE\ORADATA\DODO\ARCHIVE\1_16.DBF';
RMAN> delete archivelog all;
RMAN> delete archivelog all delete input;


四、其他的命令:

1、catalog命令:

catalog命令主要用于将手动备份文件加入到恢复目录中,命令格式如下:
CATALOG <type> <file_name> <option> ;

type包括:
DATAFILECOPY、CONTROLFILECOPY、ARCHIVELOG

opntion包括:
TAG=tag_name //标记名称
LEVEL=intger //增量备份级数

例:
RMAN> catalog archivelog 'D:\ORACLE\ORADATA\DODO\ARCHIVE\1_17.DBF';
RMAN> catalog datafilecopy 'D:\oracle\oradata\dodo\rmanback\A' tag='abc' level=1;

注意:archivelog不支持设置tag和level


2、CHANGE命令:

用于手动修改目录中的信息状态,具体格式如下:
CHANGE <type> <file_name> [option];

type包括:
DATAFILECOPY、BACKUP OF、COPY OF、CONTROLFILECOPY、ARCHIVELOG

opntion包括:
DELETE:表示将文件删除
AVAILABLE:将恢复目录中指定的文件修改为可用
UNAVAILABLE:将恢复目录中指定的文件修改为不可用
UNCATALOG:将已被物理删除的文件信息从恢复目录中删除

例:
RMAN> change datafilecopy 'D:\oracle\oradata\dodo\rmanback\A' delete;


五、脚本运行命令:

1、直接在系统下执行:

C:\Documents and Settings\wangxiaoqi> D:
D:\> cd oracle\oradata\dodo\rmanback
D:\oracle\oradata\dodo\rmanback> rman target / @test.rman

2、登录后执行:

RMAN> @backup_db.rman

3、利用run运行:

RMAN> RUN { @test.rman }

运行存储在恢复目录中的脚本:

RMAN> RUN { EXECUTE SCRIPT test_command };

4、执行操作系统脚本:

D:\oracle\oradata\dodo\rmanback> rman cmdfile=test.rman

注意:必须在脚本中加入登录信息

RMAN学习笔记05——恢复


终于又到了关键部分了,RMAN当然就是以备份和恢复最为关键,所以RMAN的恢复是非常重要的学习部分。在恢复的时候,关键不是语句的格式,而是一些相关的原理一定要搞清楚,各个层级的关系是怎么样的,相对于恢复的文件、时间点又是怎么样的,如何在catalog中进行记录,都是需要熟悉了解的概念。下面看一下:


一、恢复类型:

使用RMAN做的备份只能通过RMAN进行恢复,恢复分为两种:数据库修复(Restore)和数据库恢复(Recover)。

Restore:指用备份文件来替换已损坏的数据库文件。操作时会利用恢复目录来获取备份信息(如果没有恢复目录则使用数据库的控制文件)
Recover:利用重做日志或增量备份来重建丢失的数据。


二、恢复数据库:

恢复数据库必须使数据库处于加载状态:

RMAN> Shutdown immediate;
RMAN> Startup mount;

RMAN> Restore database;
RMAN> Recover database delete archivelogs skip tablespace temp;

RMAN> Alter database open;

注意:
1、skip指跳过某文件类型
2、若数据库是非归档模式,则必须使用RMAN> Alter database open resetlogs


三、恢复表空间:

RMAN> Shutdown immediate;
RMAN> Startup mount;
RMAN> SQL 'Alter tablespace users offline immediate';

RMAN> Restore tablespace users;
RMAN> Recover tablespace users;

RMAN> SQL 'Alter tablespace users online' ;
RMAN> Alter database open;


四、恢复数据文件:

RMAN> Shutdown immediate;
RMAN> Startup mount;
RMAN> SQL 'Alter tablespace datafile 7 offline';

RMAN> Restore datafile 7;
RMAN> Recover datafile 7;

RMAN> SQL 'Alter tablespace datafile 7 online' ;
RMAN> Alter database open;

附:文件号查询SQL
select ts.tablespace_name, df.file_name, df.file_id, tf.file_name
from dba_tablespaces ts, dba_data_files df, dba_temp_files tf
where ts.tablespace_name = df.tablespace_name(+)
and ts.tablespace_name = tf.tablespace_name(+)


五、恢复控制文件:

RMAN> Shutdown immediate;
RMAN> Startup nomount;

RMAN> Restore controlfile to 'xxxxxxxxxx'; --恢复控制文件

RMAN> Alter database mount;

RMAN> Restore database;
RMAN> Recover database;

RMAN> Alter database open;


六、不完全恢复:

1、基于时间:

RMAN> Run {
Allocate channel ch1 type disk;
Set until time ' 06-OCT-08 10:00:00 ';
Restore database;
Recover database;
SQL 'alter database open resetlogs';}

2、基于日志序列号:

RMAN> Run {
Allocate channel ch1 type disk;
Set until logseq=2 thread=4; --日志序号;文件线程号
Restore database;
Recover database;
SQL 'alter database open resetlogs';}

3、基于更改:

RMAN> Run {
Allocate channel ch1 type disk;
Set until scn n; --事务号
Restore database;
Recover database;
SQL 'alter database open resetlogs';}


七、示例,直接copy来的

C:\Documents and Settings\Administrator>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 7 月 18 10:17:44 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> conn jss/jss
已连接。
SQL> create table tmp3(col varchar2(50));
###### 创建一个临时表并插入一些数据
表已创建。

SQL> insert into tmp3 values ('test1');

已创建 1 行。

SQL> insert into tmp3 values ('test2');

已创建 1 行。

SQL> insert into tmp3 values ('test3');

已创建 1 行。

SQL> select *from tmp3;

COL
--------------------------------------------------
test1
test2
test3

SQL> commit;

提交完成。

SQL> conn / as sysdba #### 已 dba 用户连接并关闭数据库
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

SQL> host del F:\OraHome1\oradata\jssweb\jweb.ora
###### 手动删除数据文件
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 143727516 bytes
Fixed Size 453532 bytes
Variable Size 109051904 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识 / 锁定数据文件 10 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 10: 'F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA'

####### 看看,启动报错了吧
SQL> select instance_name,status from v$instance;
####### 看看当前数据库状态,应该是处于 mount
INSTANCE_NAME STATUS
---------------- ------------
jssweb MOUNTED

OK, 下面该 RMAN 出马了。
SQL>exit
C:\Documents and Settings\Administrator>set oracle_sid=jssweb

C:\Documents and Settings\Administrator>rman target /

恢复管理器 : 版本 9.2.0 .1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

连接到目标数据库 : JSSWEB (DBID=3391142503)

RMAN> restore datafile 'F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA';
#### 首先修复数据文件。 是不是有疑问,为什么不像上面第三节讲的那样先将该数据文件置为脱机,笨啊你,数据库都没打开,脱什么机啊,整个数据库现在都是脱机的。
启动 restore 于 18-7 月 -07

正在使用目标数据库控制文件替代恢复目录
分配的通道 : ORA_DISK_1
通道 ORA_DISK_1: sid=11 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件 00010 恢复到 F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=D:\BACKUP\1AIN4JU5_1_1 tag=TAG20070718T092837 params=NULL
通道 ORA_DISK_1: 恢复完成
完成 restore 于 18-7 月 -07

RMAN> recover datafile 'F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA';
######## 恢复数据文件
启动 recover 于 18-7 月 -07
使用通道 ORA_DISK_1

正在开始介质的恢复
完成介质的恢复

完成 recover 于 18-7 月 -07

RMAN> alter database open; ######## 看起来很顺利,打开数据库看看

数据库已打开

RMAN> host;

Microsoft Windows [ 版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.

C:\Documents and Settings\Administrator>sqlplus jss/jss #### 连到该用户

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 7 月 18 10:33:50 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

连接到 :
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> select *from tmp3; ######查询我们备份后创建的表

COL
--------------------------------------------------
test1
test2
test3
#######yeah, 成功恢复,没有数据丢失。

RMAN学习笔记06——知识点


还有一些RMAN的细节知识点需要学习一下,可以更好得了解RMAN备份的特性和工作机制。看一下这些内容是很有必要的。另外在RMAN学习的最后一篇,摘录了一个使用RMAN备份的实例,包括了简单的备份策略。具体如下:


一、FORMAT字符串的含义

%c:备份片的拷贝数(从1开始编号);
%d:数据库名称;
%D:位于该月中的天数 (DD);
%M:位于该年中的月份 (MM);
%F:一个基于DBID唯一的名称。格式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列;
%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8;
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称;
%p:表示备份集中备份片段的编号,从1 开始编号;
%U:是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式;
%s:备份集的号;
%t:备份集时间戳;
%T:年月日格式(YYYYMMDD);

注:注意区分大小写;若不特别指定,则默认使用%U。


二、冗余备份


RMAN提供了一种更谨慎的备份策略:Duplexed方式备份,其实质即是在生成备份集的同时,向指定位置生成指定份数(最大不超过4份)的备份集复制,以避免在灾难性事故时数据库损坏和备份丢失的情况下导致完全崩溃,提高备份可用性。

RMAN中提供了三种方式实现Duplexed方式备份:

1、在RMAN中执行BACKUP命令时显式指定COPIES参数
RMAN> BACKUP COPIES 3 DATABASE;
上述命令将会在全库备份的同时,自动生成当前备份集的2份拷贝到默认备份目录。

2、在RUN{}命令块中利用SET BACKUP COPIES命令为该命令块中所有的BACKUP命令设置Duplexed方式

RMAN> RUN{
2> SET BACKUP COPIES 2;
3> BACKUP DEVICE TYPE DISK FORMAT 'D:\BACKUP1\%U','D:\BACKUP2\%U'
4> TABLESPACE USERS,SALES;
5> }
上述命令将生成两份备份集,分别存储到d:\backup1和d:\backup2目录。

3、通过CONFIGURE ..... BACKUP COPIES命令设置预定义的备份Duplexed方式

CONFIGURE ... BACKUP COPIES命令可以为指定的设备类型设置默认的备份拷贝数量。这个配置仅适用于数据文件与归档重做日志文件和备份,并且,只有在使用自动分配的通道时才能够使用CONFIGURE ... BACKUP COPIES命令设置的配置。例如:
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE disk TO 2;
RMAN> CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE disk TO 2;
上述命令将disk设置上数据文件与归档文件的拷备数量设置为2,当再执行BACKUP DATABASE备份时,即会自动生成2份数据文件的备份集。


三、RMAN备份相关的动态性能表

V$ARCHIVED_LOG:
本视图包含了所有归档重做日志文件的创建情况,备份情况以及其他信息。
V$BACKUP_CORRUPTION:
这个视图显示了RMAN在哪些备份集中发现了损坏的数据坏。在你使用BACKUP VALIDATE命令对备份集进行检查时如果发现了损坏的数据块,RMAN将在这个视图中写入记录。
V$COPY_CORRUPTIO:
本视图显示了哪些镜像复制备份文件已经被损坏。
V$BACKUP_DATAFILE:
本视图通常用来获取每个数据文件中非空白数据块的数量,从而帮助你创建出大小基本相等的备份集。另外,在视图中也包含了数据文件中损坏的数据块的信息。
V$BACKUP_REDOLOG:
本视图显示了在现有的备份集中有哪些归档重做日志文件。
V$BACKUP_SET:
本视图显示了已经创建的备份集的信息。
V$BACKUP_PIECE:
本视图显示了已经创建的备份片段的信息。


四、增量备份的工作机制:

RMAN中增量备份有两种:Differential方式和Cumulative方式。通过level来判断备份策略:

Differential:


Cumulative:



五、RMAN备份类型:

完全备份(Full Backup)与增量备份(Incremental Backup)

全备与增备是针对数据文件而言,控制文件和归档日志文件不能进行增量备份。当然,后两者可以做备份优化。

打开备份(Open Backup)或关闭备份(Closed Backup)

数据库打开状态下进行备份即是打开备份,数据库关闭状态下(加载状态)进行的备份即关闭备份。

一致备份(Consistent Backup)与不一致备份(Inconsistent Backup)

数据库打开状态或不干净关闭状态(shutdown abort)进行的备份是不一致备份,利用不一致的备份修复数据库后还需要做数据库的恢复。在数据库干净关闭状态进行的备份是一致备份,利用一致备份修复数据库后不需要做数据库的恢复。



六、备份示例:

在写脚本之前,我们先明确一下我们的目标:
1 、每天夜间 1 点执行;
2 、数据库全备,同时备份控制文件及归档日志文件,备份文件保存至: D:\backup\ 目录下,并在完成归档日志文件备份后,自动删除已备份的归档日志;
3 、备份保留 7 天,过期则自动删除;
4 、保留操作日志备查;

以 Windows 环境为例 (linux 环境下与此基本类似, rman 的脚本您甚至连改都不用改,就把调用 rman 脚本的命令行改改就行了 ) :

1 、编写 rman 批处理文件

保存至: E:\oracleScript\backup\database_backup_jssweb.rman
RUN {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:/backup/%F';
ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT 'd:/backup/%U';
BACKUP DATABASE SKIP INACCESSIBLE FILESPERSET 10
PLUS ARCHIVELOG FILESPERSET 20
DELETE ALL INPUT;
RELEASE CHANNEL CH1;
}
ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;
CROSSCHECK BACKUPSET;
DELETE NOPROMPT OBSOLETE;

SKIP INACCESSIBLE :表示跳过不可读的文件。我们知道一些 offline 的数据文件只要存在于磁盘上就仍然可被读取,但是可能有些文件已经被删除或移到它处造成不可读,加上这个参数就会跳过这些文件;
SKIP OFFLINE :跳过 offline 的数据文件;
SKIP READONLY :跳过那些所在表空间为 read-only 的数据文件;

注意哟,你从网上搜索 rman 备份脚本,可能有些脚本中会出现一项: sql 'alter system archive log current'; 这句是让 archivelog 日志归档,实际上完全没必要,我们在第三节的时候讲过,通过 plus archivelog 方式备份时, rman 会自动对当前的 archivelog 进行归档。

2 、编写 dos 批处理

保存至: E:\oracleScript\backup\database_backup_jssweb.bat
设定要备份的数据库 sid 为 jssweb ,将日志按照日期输出到 E:\oracleScript\backup\logs\ 目录。

set oracle_sid=jssweb
rman target / msglog E:\oracleScript\backup\logs\%date:~0,10%.log cmdfile=E:\oracleScript\backup\database_backup_jssweb.rman

3 、设定执行计划

控制面板 -> 任务计划中添加计划,运行 E:\oracleScript\backup\database_backup_jssweb.bat ,设定日程安排中的时间。
竣工!


执行力=流程+计划+组织

把理想变成计划,
把计划变成步骤,
把步骤变成行动,
把行动变成成果。

好語說盡人必易之。規矩行盡人必繁之。福若受盡緣必孤。勢若使盡禍必至。