需求

客户原有个中心机房A,里面有台windows 服务器运行oracle 11g

在不远的机房B里有台XXG备份一体机对这个oracle进行定时备份,但是由于XXG备份一本体过保且备份故障无法继续了。

客户想要实现一个简易的备份,并能存储到B机房的服务器中,以防止数据丢失。

简易RMAN设计

由于数据库不是很大,实际的数据量只有几十G,于是计划如下:

1、在A中心的数据库服务器上配置定时RMAN备份

2、在B中心的服务器上配置FTP,并打通A中心数据库服务器到B中心FTP的网络

3、配置A中心的数据库RMAN备份后,进行RAR压缩备份,再上传备份包到B中心的FTP上

4、A中心的数据库服务器保留15天备份。B中心的备份一直保留。

A中心的数据库服务器新建如下

1
2
3
4
5
6
7
8
9
--备份目录
F:\BACKUP
--FTP上传日志记录
F:\backup\FTP-LOG
--存储相关的执行脚本
F:\scriptr\rman_backup_full.bat //备份执行脚本
F:\script\Dbfull.rman //备份脚本
F:\script\ftp.bat //FTP上传脚本
F:\script\clear15.bat //定时清理

配置脚本

1、创建备份脚本

备份脚本F:\script\Dbfull.rman

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

1
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"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\*.dbf

set FILENAME=RMAN_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.rar

echo 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.txt

ftp -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%.log

del f:\script\ftp.txt

保留15天备份脚本F:\script\clear15.bat

1
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目录,看看有没有报错即可。

总结

这个就是个纯简易方案,还是存在不少缺陷

1、没有任何的纠错机制,各个脚本之间独立运行,一步报错后面步步错。

2、任务之间的时间间隔要自己提前计算好

3、还需要运维工程师定期检查

当然,白嫖还想要啥,哈哈!对付能用就行。

欢迎联系我一起讨论。我的微信号:Eric_xu_2023

也欢迎关注我的公众号:

1.png