通用性

Rman备份及恢复的特点我就不介绍了

如果你们公司的数据量每天不超过100G并且磁盘IO还可以的话,那么用我这个脚本是完全够用的

# 准备工作

RMAN备份,首先要开归档(归档模式)之后才能做RMAN备份,一般默认都是关闭的

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     6
Current log sequence           8
SQL> 

再建几个文件夹

[root@sdb ~]# mkdir /sdata/
[root@sdb ~]# chown -R oracle:oinstall /sdata/

[oracle@sdb sdata]$ mkdir logs
[oracle@sdb sdata]$ mkdir arch
[oracle@sdb sdata]$ mkdir backup
[oracle@sdb sdata]$ mkdir bin
[oracle@sdb sdata]$ ls
arch  backup  bin  logs
[oracle@sdb sdata]$ 

# 开启归档

alter system set log_archive_dest_1='location=/sdata/arch' scope=both;

shutdown immediate;  
startup mount;   
alter database archivelog;
alter database open;
archive log list;

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /sdata/arch
Oldest online log sequence     6
Next log sequence to archive   8
Current log sequence           8
SQL> 

查询以确定数据库位于archivelog模式中且归档过程正在运行

select log_mode from v$database;  
select archiver from v$instance;  

日志切换 (这一句的目的是,确保你未来产生的日志文件都发生在你刚刚建好的文件夹里)

alter system switch logfile;  

# RMAN备份

vi /sdata/bin/rman_backup_lev0.sh                 0级备份脚本
#!/usr/bin/bash
.  /home/oracle/.bash_profile
rman nocatalog target  /  msglog /sdata/logs/rman_backup_`date +%Y%m%d`.log << EOF 
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
run {
allocate channel dev1 type disk maxpiecesize=6G;
allocate channel dev2 type disk maxpiecesize=6G;

backup as compressed backupset 
incremental level=0
database format '/sdata/backup/inc0_%d_%T_%U' tag='inc0' include current controlfile;
sql "alter system archive log current";
change archivelog all crosscheck;
backup as compressed backupset 
archivelog all format '/sdata/backup/arch_%d_%T_%U' tag='bakarch';
delete noprompt archivelog until time 'sysdate-3' all;

backup as compressed backupset
format='/sdata/backup/ctlbak_%s_%p_%T_%d.ctl'
tag='bkctl'
current controlfile reuse;
backup spfile format='/sdata/backup/spfilebak_%s_%p_%T_%d';
CROSSCHECK BACKUP;
delete noprompt obsolete;

release channel dev1;
release channel dev2;
}
exit;
EOF

给脚本赋权限:

[oracle@sdb bin]$ chmod +x rman_backup_lev0.sh 
[oracle@sdb bin]$ ls -rlt
total 4
-rwxr-xr-x. 1 oracle oinstall 929 Jan 16 08:29 rman_backup_lev0.sh
[oracle@sdb bin]$ 

# 定时任务(用oracle用户建)

crontab -e
35 08 * * *     sh /sdata/bin/rman_backup_lev0.sh  >/dev/null 2>&1 #RMAN Backup

注意

1、不要有明显报错“RMAN-”,“FAILED”,“ERROR”,“ORA-”

2、CONFIGURE RETENTION POLICY TO REDUNDANCY 2; 指的是备份两份结果,如果往大了改,要注意arch、backup的空间使用率,不要超过40%

3、定时任务尽量业务不繁忙时做。因为rman这套东西备份起来很吃IO