RMAN的入门篇

一、RMAN连接数据库#

1.  连接本地数据库#

[oracle@oracle hotbak]$ export oracle_sid=orcl
[oracle@oracle hotbak]$ rman target/

恢复管理器: Release 11.2.0.1.0 - Production on 星期三 12月 21 01:43:25 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

连接到目标数据库: ORCL (DBID=1458478724)

  注: 如果是一个实例,则不需要指定

或者

复制代码
[oracle@oracle hotbak]$ rman 

恢复管理器: Release 11.2.0.1.0 - Production on 星期三 12月 21 01:54:22 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

RMAN> connect target/

连接到目标数据库: ORCL (DBID=1458478724)
复制代码

 

2.  连接远程数据库#

复制代码
[oracle@oracle hotbak]$ rman target sys/sinosoft@dbsrv1

恢复管理器: Release 11.2.0.1.0 - Production on 星期三 12月 21 02:02:41 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

连接到目标数据库: DBSRV1 (DBID=294555525)

RMAN> 
复制代码

   当然,在这里你也可以同样先启动rman,再通过connect 创建连接。

3. 将终端输出定向到日志文件中#

[oracle@oracle ~]$ rman target/ log /tmp/rman.log
RMAN> show all;

 

4. 启动关闭数据库#

RMAN> shutdown immediate

RMAN> startup mount;

RMAN> alter database open;

数据库已打开

    启动和关闭的命令跟SQL 环境下完全一模一样。

5. 执行操作系统命令#

复制代码
RMAN> host;

[oracle@oracle ~]$ ls /tmp/rman.log
/tmp/rman.log
[oracle@oracle ~]$ exit
exit
主机命令完成

RMAN> 
复制代码

6. 执行SQL语句#


RMAN> SQL 'ALTER SYSTEM checkpoint';

sql 语句: ALTER SYSTEM checkpoint

    rman 中的sql环境不能执行 SELECT语句,或者说执行不报错,但你也看不到结果。

二、 定义RAMN的配置#

 --显示RAMN的配置#

复制代码
RMAN> show all;

db_unique_name 为 ORCL 的数据库的 RMAN 配置参数为:
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 BACKUP TYPE TO BACKUPSET; # 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 ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_orcl.f'; # default
复制代码

  该命令使用也相当灵活,其后跟上不同的类型的配置参数,即可以显示不同类型的配置,如:
  SHOW CHANNEL;
  SHOW DEVICE TYPE;
  SHOW DEFAULT DEVICE TYPE;

 --修改配置#

1、CONFIGURE RETENTION POLICY 配置备份保留策略

基于时间:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF n DAYS;
基于冗余数量:
CONFIGURE RETENTION POLICY TO REDUNDANCY n;
也可以取消备份保留策略:
CONFIGURE RETENTION POLICY TO NONE;

2、CONFIGURE BACKUP OPTIMIZATION 配置备份优化

打开备份优化:
CONFIGURE BACKUP OPTIMIZATION ON;
关闭备份优化:
CONFIGURE BACKUP OPTIMIZATION OFF;

 

3、CONFIGURE DEFAULTDEVICE TYPE 配置IO 设备类型

RMAN 支持的IO 设备类型有两种:磁盘(DISK)和磁带(SBT),默认情况下为磁盘。
使用磁盘设备:
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
使用磁带设置:
CONFIGURE DEFAULT DEVICE TYPE TO SBT;

 

4、CONFIGURE CONTROLFILE AUTOBACKUP 配置控制文件自动备份

是否自动备份,包含两个状态:OFF 和ON
打开自动备份
CONFIGURE CONTROLFILE AUTOBACKUP ON
禁止自动备份
CONFIGURE CONTROLFILE AUTOBACKUP OFF
同时可以通过如下配置指定备份的控制格式,路径。例如:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:/backup/%F';


在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性,这个快照可以通过如下配置:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:/BACKUP/SNCFDEMO.'dbf;

 

5、CONFIGURE DEVICE TYPE 设置并行备份

RMAN 支持并行备份与恢复,也可以在配置中指定默认的并行程度。例如:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;

 

6、CONFIGURE DATAFILE BACKUP COPIES 设置备份文件冗余度

 

 我们想把某条更改过的配置再置为初始应该怎么办呢,很简单,用如下命令:#

RMAN> configure CONTROLFILE AUTOBACKUP clear;

旧的 RMAN 配置参数:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN 配置参数已成功重置为默认值

 

--FORMAT字符串替代变量#

使用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);s
注:如果在BACKUP 命令中没有指定FORMAT选项,则RMAN 默认使用%U 为备份片段命名。

 

 三、RMAN备份数据库#

--备份全库#

RMAN> backup database;

     执行上述命令后将对目标数据库中的所有数据文件进行备份,

如果没有显式指定FORMAT参数,rman 会自动为每个备份片段命名,默认保存在$ORACLE_BASE/flash_recovery_area/SID/backupset下面

[oracle@oracledb 2016_12_21]$ pwd
/opt/oracle/app/flash_recovery_area/DBSRV1/backupset/2016_12_21
[oracle@oracledb 2016_12_21]$ ll
总用量 429588
-rw-r----- 1 oracle oinstall 439889920 12月 21 14:09 o1_mf_nnndf_TAG20161221T140401_d5n6tr2h_.bkp

如果指定了FORMAT参数,则备份在指定的目录下

[oracle@oracle backup]$ pwd
/u03/rman/backup
[oracle@oracle backup]$ ll
总用量 407764
-rw-r-----. 1 oracle oinstall 407388160 12月 21 21:49 backup_09ro29uj_1_1

当然,也可以通过显式指定format 参数来自定义备份片段的命令规则,比如:

RMAN> BACKUP DATABASE FORMAT '/tmp/BACKUP/%U';

--通过list 命令查看刚刚创建的备份信息

复制代码
RMAN> list backup of database;
BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间  
------- ---- -- ---------- ----------- ------------ ----------
7       Full    1.62G      DISK        00:00:45     21-12月-16
        BP 关键字: 7   状态: AVAILABLE  已压缩: NO  标记: TAG20161221T143048
段名:/tmp/BACKUP/0bro1gco_1_1
  备份集 7 中的数据文件列表
  文件 LV 类型 Ckp SCN    Ckp 时间   名称
  ---- -- ---- ---------- ---------- ----
  1       Full 13147385   21-12月-16 /opt/oracle/app/oradata/dbsrv1/system01.dbf
  2       Full 13147385   21-12月-16 /opt/oracle/app/oradata/dbsrv1/sysaux01.dbf
  3       Full 13147385   21-12月-16 /opt/oracle/app/oradata/dbsrv1/undotbs01.dbf
  4       Full 13147385   21-12月-16 /opt/oracle/app/oradata/dbsrv1/users01.dbf
  5       Full 13147385   21-12月-16 /opt/oracle/app/oradata/costctl/COSTCTL_TBS.dbf
  6       Full 13147385   21-12月-16 /opt/oracle/app/oradata/dbsrv1/DEV_DATA.DBF
  7       Full 13147385   21-12月-16 /opt/oracle/app/oradata/pdms/PDMS_DATA.dbf
复制代码

 #

--备份表空间#

只要实例启动并处于加载状态,不论数据库是否打开,都可以在rman 中对表空间进行备份,而且不
需要像手动备份那样先'ALTERTABLESPACE... BEGIN BACKUP'。例如:

RMAN> backup tablespace DEV_DATA;

查看备份集

复制代码
RMAN> LIST BACKUP OF TABLESPACE DEV_DATA;

备份集 7 中的数据文件列表
文件 LV 类型 Ckp SCN Ckp 时间 名称
---- -- ---- ---------- ---------- ----
6 Full 13147385 21-12月-16 /opt/oracle/app/oradata/dbsrv1/DEV_DATA.DBF

BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
9 Full 18.98M DISK 00:00:00 21-12月-16
BP 关键字: 9 状态: AVAILABLE 已压缩: NO 标记: TAG20161221T143911
段名:/opt/oracle/app/flash_recovery_area/DBSRV1/backupset/2016_12_21/o1_mf_nnndf_TAG20161221T143911_d5n8wj9v_.bkp
备份集 9 中的数据文件列表
文件 LV 类型 Ckp SCN Ckp 时间 名称
---- -- ---- ---------- ---------- ----
6 Full 13147708 21-12月-16 /opt/oracle/app/oradata/dbsrv1/DEV_DATA.DBF

复制代码

发现有两个片段,删除一个

RMAN> delete backupset 9;

 

--备份指定数据文件#

RMAN> BACKUP DATAFILE n;

如果要查看指定数据文件的备份,可以用:

RMAN> LIST BACKUP OF DATAFILE n;

注:n=指定的的数据文件序号,如果需要备份的数据文件有多个,n=多个序号,中间以逗号分隔:RMAN> backup datafile 1,2;

 

--备份控制文件#

1.最简单的方式,通过CONFIGURE 命令将CONTROLFILE AUTOBACKUP 置为ON。
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
然后你再通过rman 做任何备份操作的同时,都会自动对控制文件做备份。


2.对编号为1 的数据文件,即SYSTEM 表空间的数据文件做备份时,RMAN 也会自动对控制文件做备份。


3.手动执行备份命令。

RMAN> BACKUP CURRENT CONTROLFILE;

 

4.执行BACKUP 时指定INCLUDE CURRENT CONTROLFILE 参数,例如:

RMAN> BACKUP DATABASEINCLUDE CURRENT CONTROLFILE;


如果要查看备份的控制文件,可以通过:

RMAN> LIST BACKUP OF CONTROLFILE;

 

--备份归档日志文件#

在RMAN 中备份归档日志有两种方式

1、利用BACKUP ARCHIVELOG 命令备份

RMAN> BACKUP ARCHIVELOG ALL;

2、 在BACKUP 过程中利用PLUS ARCHIVELOG 参数备份,例如:

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

则在备份数据库的同时自动对所有归档文件进行备份。这种方式与上种有什么区别呢,区别太明显
了,BACKUP.....PLUS ARCHIVELOG 命令在备份过程中会依次执行下列步骤:
1>.运行ALTER SYSTEM ARCHIVE LOG CURRENT 语句对当前redolog 进行归档。
2>.执行BACKUP ARCHIVELOG ALL 命令备份所有已归档日志。
3>.执行BACKUP 命令对指定项进行备份。
4>.再次运行ALTER SYSTEM ARCHIVE LOG CURRENT 对当前redolog 归档。
5>.对新生成的尚未备份的归档文件进行备份。

 

RMAN 提供了DELETE ALL INPUT 参数,加在BACKUP 命令后,则会在完成备份后自动删除归档目录中已备份的归档日志

RMAN>  backup archivelog all delete input;

完成备份之后,可以通过下列命令查看已备份的归档日志片段:

RMAN> LIST BACKUP OF ARCHIVELOG ALL;

 

四、删除备份#

1、删除陈旧备份#

  当使用RMAN 执行备份操作时,RMAN 会根据备份冗余策略确定陈旧备份

RMAN> delete obsolete;

2、删除EXPIRED 备份#

   执行crosscheck 命令核对备份集,那么会将该备份集标记为EXPIRED 状态。为了删除相应的备份记录,可以执行delete expired backup 命令。

RMAN> delete expired backup;

3、删除EXPIRED 副本#

RMAN> delete expired copy;

4、删除特定备份集#

RMAN> delete backupset 19;

5、删除特定备份片#

RMAN> delete backuppiece '/backup/DEMO_19.bak';

6、删除所有备份集#

RMAN> delete backup;

7、删除特定映像副本#

RMAN> delete datafilecopy '/backup/DEMO_19.bak';

8、删除所有映像副本#

RMAN> delete copy;

9、在备份后删除输入对象#

RMAN> delete archivelog all delete input;
RMAN> delete backupset 22 format = ''/backup/%u.bak'' delete input

 10、 删除归档日志#

方式1:

DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

方式2:

1
2
3
RMAN> list archivelog all;
RMAN> crosscheck archivelog all; --命令的作用是将磁盘或者磁带上不存在的日志标记为expired
RMAN> delete expired archivelog all;--删除过期的归档日志

  


五、 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:本视图显示了已经创建的备份片段的信息。

 #

 可以通过如下SQL 语句获得正在进行的镜像复制操作的状态信息:

复制代码
Select sid,
       serial#,
       context,
       sofar,
       totalwork,
       round(sofar / totalwork * 100, 2) "% Complete"
  From v$session_longops
 where opname like 'RMAN:%'
   and opname not like 'RMAN:aggregate%'
复制代码

通过如下SQL 获得rman 用来完成备份操作的服务进程的SID 与SPID 信息:

Select sid, spid, client_info
          from v$process p, v$session s
         where p.addr = s.paddr
           and client_info like '%id=rman%'

 

 

 

 

posted @   头痛不头痛  阅读(818)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示
主题色彩