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%'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了