rman 本质上是一个客户端的应用程序,用来建立到目标数据库之的间连接,
并在目标数据库上创建对应的服务器进程。
rman 登录
格式:
rman target user_name/password@network_service_name
[catalog user_name/password@network_service_name]
如:
rman target /
rman target sys/oracle
rman target sys/oracle@t173
rman target sys/oracle@t173 catalog sys/oracle@CAT
登录后提示符就变成 RMAN> 了
RMAN环境配置:
RMAN> show all; #查看rman环境配置
在所有的配置参数中,强烈建议设置控制文件自动备份。
RMAN> configure controlfile autobackup on;
开启控制文件自动备份后,下次只要有备份就会自动备份控制文件
另外数据库的物理结构发生变化时,会自动备份控制文
自动备份的位置:闪回区
RMAN> configure controlfile autobackup format for device type disk
2> to '/u03/rman/ctlbak/%F';
RMAN备份时的备份类型:
备份集(backupset)
将数据文件里,使用过的数据块取出,放到备份文件中。
在进行备份集备份时,会产生一个备份片的概念。
备份片就是备份产生的物理备份文件,一个备份集能产生多个备份片
备份集是这些片的集合。
在rman中可以设置一个备份片的最大大小,如:
RMAN> configure channel device type disk
format '/u03/rman/%U' maxpiecesize 500m;
这样一个大的备份集就会产生多个备份片
镜像副本(copy)
类似于通过复制来备份数据文件。
备份时的格式符:
%d 数据库名称
%I 数据库DBID
%e 归档日志序列号
%D 该月的第几天
%M 月份数
%T yyyymmdd
%F 用于控制文件,基于DBID的唯一名字
%N 表空间名
%U 唯一文件名
%s 备份集号
%p 备份片号
rman 命令类型:
1、独立命令
只能在RMAN的提示符下运行,如:
connect target /
create catalog
2、作业命令
只能在作业中使用,作业与事务类似,它是用 run { }
括起来的一系列命令,执行时要么全成功,要么全失败。
如: allocate channel
3、独立或作业命令
即可以RMAN提示符下用,也可以在作业中用
如: backup restore recover
RMAN备份:
backup [backup_level] <backup_object> [option]
backup_level有:
full 完全备份
incremental 增量备
backup_object
database
tablespace
datafile
spfile
archivelog
option
format
tag
channel
maxsetsize
例:备份数据库
backup database;
backup as backupset database;
RMAN> backup as backupset database
format '/u03/rman/%d_%T_%s_%p';
默认的备份位置:如果没设通道,放在闪回中
如果设置了通道,放在通道指定的位置
例:备份表空间:
backup tablespace users;
例:备份时限制备份集大小(备份时指定)
backup as backupset database format '/u03/rman/%d_%T_%s_%p'
maxsetsize 600m;
例:限制备份片大小(在通道指定)
CONFIGURE CHANNEL DEVICE TYPE DISK
FORMAT '/u03/rman/%U' MAXPIECESIZE 500 M;
RMAN> run {
2> allocate channel c1 device type disk format
'/u03/rman/%d_%T_%s_%p'
3> maxpiecesize 200m;
4> backup as backupset database channel c1;
5> release channel c1;
6> }
备份数据文件:
RMAN> backup datafile 2;
另外,为了加快备份速度可以启用多通道(对cpu、io有一定的要求)
使用多通道要在run {} 块中。
RMAN> run {
2> allocate channel c1 device type disk format
'/u03/rman/c1_%T_%s_%p';
3> allocate channel c2 device type disk format
'/u04/backup/c2_%T_%s_%p';
4> backup tablespace system channel c1;
5> backup tablespace users channel c2;
6> release channel c1;
7> release channel c2;
8> }
10中提供了对备份集的压缩功能,即压缩备份:
backup as compressed backupset ......
RMAN 也提供了对数据文件检测、检验的功能
RMAN> backup validate database; #检验数据文件的物理、逻辑损坏
备份归档日志:
backup archivelog ...
RMAN> backup archivelog all
format '/u03/rman/arch_log_%d_%T_%s_%p'; #备所有归档
RMAN> backup archivelog from time 'sysdate-3';
#备份最近三天来的归档
RMAN> backup archivelog from sequence 5;
RMAN> backup archivelog from sequence 5 until sequence 8;
RMAN> backup archivelog all delete all input;
#备份完后,将原来的归档删除
RMAN> backup tablespace users plus archivelog;
平时清归档
不要直接到归档目录去删除归档日志文件,而是在RMAN中删除。
备份控制文件:
RMAN> backup current controlfile;
RMAN> backup tablespace users include current controlfile
[plus archivelog];
备份参数文件:
RMAN只能备份SPFILE
backup spfile;
多重备份:
多重备份,即同时备几份放到不同的地方
RMAN> backup copies 2 tablespace users
format '/u03/rman/%d_%T_%s_%p','/u04/backup/%d_%T_%s_%p';
RMAN> run {
2> set backup copies=2;
3> backup tablespace users format '/u03/rman/%d_%T_%s_%p',
4> '/u04/backup/%d_%T_%s_%p';
5> }
RMAN日志功能
就是将RMAN的执行的输出结果放到文件中保存
方法一(spool log):
RMAN> spool log to '/home/oracle/rman.log' append;
RMAN> backup tablespace system;
RMAN> spool log off;
方法二(使用rman带的日志功能)
shell$ rman target /
log=/home/oracle/rman_`date +%Y-%m-%d_%H:%M:%S`.log
RMAN增量备份:
增量备只备份上一次备份以来发生变化过的数据块
增量备只能对数据文件。
增量备类型:
差异增量
从小于等于当前备份级别的最近一次备份开始备
累积增量
从小于当前备份级别的最近一次备份开始备
增量备的基础是0级备,就是说要做增量备的话,必须先做一个0级备(实际是全备)
增量备的方法:
差异增量:
1)
RMAN> backup incremental level 0 database; #做一个起点
2)
RMAN> backup incremental level 2 database; #实施增量备
累积增量:
1)
RMAN> backup incremental level 0 database; #做一个起点
2)
RMAN> backup incremental level 1 cumulative database;
块变化跟踪
10G,为了加快增量备的速度,引入了一个文件,用来记录自上一次备份
以来,变化过的数据块地址,该文件叫变化中跟踪文件。
启用:
SQL> alter database enable block change tracking using
file '/u02/bct.trc';
禁用:
SQL> alter database disable block change tracking;
查询:
SQL> select * from v$block_change_tracking;
RMAN信息查询:
RMAN> list backup 查看备份
RMAN> list backup of tablespace users;
RMAN> list backupset 73;
RMAN> list copy; 查看镜象副本或归档日志
RMAN> list archivelog all; 查看归档日志
RMAN> list archivelog from time='sysdate-2';
RMAN> list backup of spfile;
RMAN> list backup of controlfile;
RMAN> report schema; 报告数据库物理文件
RMAN> report obsolete; 报告过期(废弃)的备份
RMAN> report need backup; 报告需要备份的文件
RMAN> report need backup days 3;
RMAN> list expired backup; 显示备份片已丢失的备份
检测备份:
RMAN> crosscheck backup;
删除备份:
RMAN> delete backup; 删除所有备份
RMAN> delete backupset 83;
RMAN> delete noprompt backupset 86; 删除时不要提示
RMAN> delete noprompt expired backupset;
删除备份片丢失的备份不提示
RMAN> delete obsolete; 删除过期(多余)的备份
检测备份:
RMAN> validate backupset 87;
[oracle@t183 ~]$ dbv file=sysaux01.dbf
#dbv是一个操作系统工具,在操作系统提示符下运行的,而非RMAN
RMAN中执行SQL命令:
sql 'sql命令',如:
RMAN> sql 'alter system switch logfile';
自动备份的实现:
1) 根据需求写一个备份脚本
#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/10.2/db_1
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export PATH
rman target / log=/home/oracle/rman.log/rman_`date +%Y-%m-%d_%H:%M:%S`.log <<EOF
run {
allocate channel c1 device type disk format '/u03/rman/%d_%T_%s_%p';
allocate channel c2 device type disk format '/u03/rman/%d_%T_%s_%p';
sql 'alter system switch logfile';
backup database channel c1;
backup archivelog all channel c2;
sql 'alter system switch logfile';
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
delete archivelog until time='sysdate-7';
release channel c1;
release channel c2;
}
EOF
2) crontab 定期调用以上脚本来达到定期备份的目的
[oracle@t183]$ crontab -e
10 2 * * * /home/oracle/rman_backup.sh