一个超简易的RMAN备份并保留到异地的方案,仅适用于小规模环境
1、需求
客户原有个中心机房A,里面有台windows 服务器运行oracle 11g
在不远的机房B里有台XXG备份一体机对这个oracle进行定时备份,但是由于XXG备份一本体过保且备份故障无法继续了。
客户想要实现一个简易的备份,并能存储到B机房的服务器中,以防止数据丢失。
2、简易RMAN备份及异地保留方案设计
由于数据库不是很大,实际的数据量只有几十G,于是计划如下:
1、在A中心的数据库服务器上配置定时RMAN备份
2、在B中心的服务器上配置FTP,并打通A中心数据库服务器到B中心FTP的网络
3、配置A中心的数据库RMAN备份后,进行RAR压缩备份,再上传备份包到B中心的FTP上
4、A中心的数据库服务器保留15天备份。B中心的备份一直保留。
A中心的数据库服务器新建如下
--备份目录
F:\BACKUP
--ftp及rman日志
F:\backup\FTP-LOG
--存储相关的执行脚本
F:\scriptr\rman_backup_full.bat //备份执行脚本
F:\script\Dbfull.rman //备份脚本
F:\script\ftp.bat //FTP上传脚本
F:\script\clear15.bat //定时清理
3、 配置脚本
1、创建备份脚本
备份脚本F:\script\Dbfull.rman
run{
allocate channel c1 type disk;
backup incremental level 0 tag 'db0' format 'f:\backup\rman_backup_db%u_%s_%p.dbf'database
include current controlfile;
release channel c1;
sql 'alter system archive log current';
allocate channel c10 type disk;
backup filesperset 50 format 'f:\backup\rman_backup_arch%u_%s_%p.dbf' archivelog all delete input;
release channel c10;
} run{
allocate channel t1 type disk;
allocate channel t2 type disk;
allocate channel t3 type disk;
report obsolete;
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
release channel t1;
release channel t2;
release channel t3;
}
执行任务脚本F:\scriptr\rman_backup_full.bat
rman target / log='F:\backup\FTP-LOG\RMAN_BACKUP_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%".log' cmdfile=f:\script\Dbfull.rman
FTP定时上传任务脚本F:\script\ftp.bat
"c:\Program Files (x86)\WinRAR\Rar.exe" a -ep -df -m0 F:\backup\RMAN_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.rar F:\backup\*.log F:\backup\*.dbfset FILENAME=RMAN_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.rarecho open 10.10.1.253 >>F:\script\ftp.txt
echo ftpuser>>F:\script\ftp.txt
echo Jiacheng2022>>F:\script\ftp.txt
echo bin >>F:\script\ftp.txt
echo prompt off >>F:\script\ftp.txt
echo lcd f:\backup >>F:\script\ftp.txt
echo mput %FILENAME% >>F:\script\ftp.txt
echo prompt on >>F:\script\ftp.txt
echo bye >>F:\script\ftp.txt
echo quit >>F:\script\ftp.txtftp -s:F:\script\ftp.txt >F:\backup\FTP-LOG\ftp_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.log 2>F:\backup\FTP-LOG\err_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.logdel f:\script\ftp.txt
保留15天备份脚本F:\script\clear15.bat
forfiles /p "F:\backup" /m *.rar /d -15 /c "cmd /c del @path"
最后在windows上创建三个定时任务:
1、每天定时备份oracle脚本:\scriptr\rman_backup_full.bat
2、定时FTP上传脚本F:\script\ftp.bat (与第一个任务时间错开)
3、定时清理空间F:\script\clear15.bat
最后就是告诉运维工程师,定期检查F:\BACKUP\FTP-LOG目录,看看有没有报错即可。
4、总结
这个就是个纯简易方案,还是存在不少缺陷
1、没有任何的纠错机制,各个脚本之间独立运行,一步报错后面步步错。
2、任务之间的时间间隔要自己提前计算好
3、还需要运维工程师定期检查
当然,好处有一点:就是不用额外的花钱。