、环境准备:
两台linux 服务器,一台已经安装好oracle数据库
FileServer: 10.17.81.189
OracleServer:10.17.81.190
1.设置ssh密匙自动访问:
在OracleServer 服务器上,在输入ssh-keygen指令后,只需要连续输入三个回车键,就可以生成不需要密码的密钥公钥对了,然后把id_rsa.pub. 上传到 FileServer 服务器上。
OracleServer:~# su - oracle #切换到oracle用户下
oracle@OracleServer:~>ssh-keygen -t rsa
oracle@OracleServer:~>scp /home/oracle/.ssh/id_rsa.pub oracle@10.17.81.189:/home/oracle/.ssh/authorized_keys
2、创建增量备份脚本
oracle@OracleServer:~> cd /opt/oracle/shell #进入到oracle shell
目录(需要自己新建目录)
oracle@OracleServer:/opt/oracle/shell> vim bakl0 #增量备份1脚本
bakl 内容如下:
#!/bin/bash
export PATH #引入路径
ORACLE_BASE=/opt/oracle
ORACLE_HOME=$ORACLE_BASE/product/11gR1/db
ORACLE_SID=ictdb #设置oracle_sid
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
/opt/oracle/product/11gR1/db/bin/rman target / <<EOF
run {
allocate channel c1 type disk;
backup
incremental level 0 # 增量为n,这里就是这里改成 lever n (n一般2级就够了) 必须要有 0 备份
format "/opt/oracle/rmanbackup/dbf/inc0_%d_%u_%T"
tag monday_inc0
database;
sql 'alter system archive log current';
backup current controlfile format '/opt/oracle/rmanbackup/control/inc0_control_%d_%u_%T';
backup archivelog all format '/opt/oracle/rmanbackup/archive/inc0_archive_%d_%u_%T' delete all input;
release channel c1;
}
我这里有增量2备份
依次建立 bakl1 bakl2 同bak0 只需要把level 0 改成 level 1 或者2 ,我习惯把备份集名字前面加上 inc【n】表示是 增量n备份
3、创建备份到文件服务器脚本,把备份的数据复制到远程文件服务器
oracle@OracleServer:/opt/oracle/shell> vim copy #复制到远程文件服务器
#!/bin/bash
#copy file to file server
for cpfile in `find /opt/oracle/rmanbackup/ -ctime -1`;
do scp -r "$cpfile" oracle@10.17.81.189:/opt/oracle/;
done
#delete before file
cd /opt/oracle/rmanbackup/
for rmfile in `find /opt/oracle/rmanbackup/ -mtime +7`;
do /bin/rm -rf "$rmfile";
done
4、设置crontab 自动备份策略
OracleServer:~ # crontab -l -u oracle
10 1 * * 0 sh /opt/oracle/shell/bakl0 #周末凌晨 1:10 执行增量0备份
10 1 * * 1 sh /opt/oracle/shell/bakl2 #周一凌晨 1:10 执行增量2备份
10 1 * * 2 sh /opt/oracle/shell/bakl2 #周二凌晨 1:10 执行增量2备份
10 1 * * 3 sh /opt/oracle/shell/bakl1 #周三凌晨 1:10 执行增量1备份
10 1 * * 4 sh /opt/oracle/shell/bakl2 #周四凌晨 1:10 执行增量2备份
10 1 * * 5 sh /opt/oracle/shell/bakl2 #周五凌晨 1:10 执行增量2备份
10 1 * * 6 sh /opt/oracle/shell/bakl2 #周六凌晨 1:10 执行增量2备份
10 3 * * * sh /opt/oracle/shell/copy #每天凌晨 3:10 备份文件到文件服务器