朱穎琪
摘 要:在業(yè)務(wù)系統(tǒng)中,Oracle數(shù)據(jù)庫(kù)作為一種大型關(guān)系型數(shù)據(jù)庫(kù)是世界上使用最為廣泛的數(shù)據(jù)庫(kù)管理工具。它具有巨大人機(jī)功能——SHELL設(shè)計(jì)語(yǔ)言,作它能夠交互式解析和執(zhí)行用戶輸入的命令或者自動(dòng)地解析和執(zhí)行預(yù)先設(shè)定好的命令符。本文通過(guò)對(duì)SHELL腳本與Oracle數(shù)據(jù)庫(kù)相結(jié)合實(shí)現(xiàn)一種自動(dòng)安全備份與管理數(shù)據(jù)庫(kù)數(shù)據(jù)的高效管理方法。
關(guān)鍵詞:SHELL腳本;Oracle數(shù)據(jù)庫(kù);備份管理
中圖分類號(hào):TP311.131 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-2064(2017)20-0016-02
1 引言
Oracle數(shù)據(jù)庫(kù)的備份管理一直是數(shù)據(jù)庫(kù)管理中的重要維護(hù)點(diǎn),因此怎樣對(duì)數(shù)據(jù)備份實(shí)施有效的維護(hù)管理成為重要問(wèn)題。針對(duì)這一問(wèn)題在Linux操作系統(tǒng)下引入SHELL腳本,便能簡(jiǎn)潔有效的做到對(duì)數(shù)據(jù)庫(kù)的備份管理。
2 腳本實(shí)現(xiàn)
通過(guò)在Linux平臺(tái)的Redhat 6.8操作系統(tǒng)上搭建Oracle 11.2.0.4數(shù)據(jù)庫(kù),使用SHELL腳本實(shí)現(xiàn)數(shù)據(jù)備份管理的幾個(gè)重要功能點(diǎn)[1]。
2.1 定時(shí)自動(dòng)發(fā)起全庫(kù)備份腳本
通過(guò)Linux的crontab定時(shí)計(jì)劃任務(wù)中添加自動(dòng)發(fā)起時(shí)間和腳本可做到自動(dòng)在后臺(tái)發(fā)起全庫(kù)備份任務(wù)。
目標(biāo):備份腳本每天0點(diǎn)自動(dòng)執(zhí)行;數(shù)據(jù)庫(kù)全備份;備份保留14天,過(guò)期自動(dòng)刪除;保留操作日志備查。
腳本dbback.sh如下:
run{ allocate channel c1 device type disk;
crosscheck backup;
sql 'alter system archive log current';
backup database format '/opt/Oracle/backup/dbback/db_%d_%T_%U';
backup current controlfile format '/opt/Oracle/backup/controlfileback/cntrl_%s_%p_%s';
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt backup of database completed before 'sysdate - 14';
release channel c1; }
Oracle管理員身份執(zhí)行crontab -e
0 0 * * 0 /opt/Oracle/backup/script/dbback.sh 2>&1 >/dev/null
設(shè)定為零點(diǎn)自動(dòng)發(fā)起dbback.sh腳本,開始自動(dòng)全庫(kù)備份。
2.2 定時(shí)自動(dòng)發(fā)起數(shù)據(jù)庫(kù)歸檔備份并自動(dòng)刪除過(guò)期歸檔
Oracle數(shù)據(jù)庫(kù)有聯(lián)機(jī)重做日志,記錄對(duì)數(shù)據(jù)庫(kù)所做的修改,這些操作會(huì)記錄在聯(lián)機(jī)重做日志里,當(dāng)數(shù)據(jù)庫(kù)處于歸檔狀態(tài)并切換日志的時(shí)候,被切換的日志會(huì)進(jìn)行歸檔,歸檔的日志文件會(huì)存放在歸檔目錄。數(shù)據(jù)庫(kù)運(yùn)行過(guò)程會(huì)不斷切換聯(lián)機(jī)重做日志,歸檔目錄會(huì)逐漸被占滿,如果不做刪除歸檔日志,聯(lián)機(jī)重做日志將不能切換,會(huì)造成數(shù)據(jù)庫(kù)掛起,從而導(dǎo)致上層應(yīng)用不可用。因此需要及時(shí)對(duì)過(guò)期歸檔日志做刪除處理[2]。
目標(biāo):備份腳本每隔4小時(shí)自動(dòng)執(zhí)行一次;備份數(shù)據(jù)庫(kù)歸檔日志;歸檔備份保留7天,過(guò)期自動(dòng)刪除;保留操作日志備查。加載環(huán)境變量腳本delet_archive.sh
RMAN=$ORACLE_HOME/bin/rman
WEEK=$((`date +%w`))
date=`date +%Y-%m-%d`
Date >>$LOGFILE
Sh /data/rman/script/archive_delete.rman $RMAN $LOGFILE
刪除歸檔腳本 archivelog_delete.sh
Crosscheck archivelog all;
Delete noprompt expired archivelog all;
Delete noprompt archivelog until time' sysdate-7';
Oracle用戶使用crontab -e進(jìn)行編輯,設(shè)定執(zhí)行的時(shí)間:240 * * * * sh/data/rman/script/delet_archive.sh
2.3 定時(shí)自動(dòng)發(fā)起數(shù)據(jù)庫(kù)增量備份
增量備份是指在上一次備份后,備份與前一次相比增加被修改的文件。第一次增量備份的對(duì)象是進(jìn)行全備后所產(chǎn)生的增加和修改的文件;第二次增量備份的對(duì)象是進(jìn)行第一次增量備份后所產(chǎn)生的增加和修改的文件,如此類推。這種備份方式優(yōu)點(diǎn)是:沒(méi)有重復(fù)的備份數(shù)據(jù),數(shù)據(jù)量不大,時(shí)間很短。但增量備份的數(shù)據(jù)恢復(fù)較麻煩。必須具有上一次全備份和所有增量備份磁盤(一旦丟失或損壞其中的一盤磁盤,就會(huì)造成恢復(fù)的失?。?,并且它們必須依次沿著全備份到增量備份的時(shí)間逐個(gè)反推恢復(fù),這就極大地延長(zhǎng)了恢復(fù)時(shí)間[3]。
備份策略:每周日凌晨做0級(jí)備份;每周一,四做一級(jí)備份;每周二,三,五,六做二級(jí)備份:
00 4 * * 0 /u01/app/Oracle/rman_bak/scripts/rman_bak.sh 0 (0級(jí)備份腳本)
00 4 * * 1,4 /u01/app/Oracle/rman_bak/scripts/rman_bak.sh 1 (1級(jí)備份腳本)endprint
00 4 * * 2,3,5,6 /u01/app/Oracle/rman_bak/scripts/rman_bak.sh 2 (2級(jí)備份腳本)
備份腳本:
run{allocate channel c1 type disk;
crosscheck backupset of archivelog all;
backup filesperset 3 format '$BACKUP_PATH/data/$DATE/arch.%d.live.$LEVEL.%t'(archivelog from time 'sysdate-7' all delete input);
delete noprompt expired backupset of archivelog all;
release channel c1;}
run{allocate channel c1 type disk;
crosscheck backupset of archivelog all;
backup filesperset 3 format '$BACKUP_PATH/data/$DATE/arch.%d.live.$LEVEL.%t' (archivelog from time 'sysdate-1' all);
delete noprompt expired backupset of archivelog all;
release channel c1;}
2.4 使用腳本自動(dòng)驗(yàn)證備份數(shù)據(jù)有效性
數(shù)據(jù)備份過(guò)程中可能由于操作系統(tǒng)層面或者硬件層面的故障導(dǎo)致數(shù)據(jù)丟失,可使用腳本調(diào)用RMAN工具檢查數(shù)據(jù)備份過(guò)程中數(shù)據(jù)塊的完整性,以此保證備份數(shù)據(jù)有效性。
目標(biāo):腳本每天3點(diǎn)自動(dòng)校驗(yàn)全庫(kù)備份或者單一數(shù)據(jù)文件一次;保留操作日志備查。
全庫(kù)備份SHELL腳本validate.sh
run{ allocate channel c1 device type disk;
crosscheck backup;
validate database;
release channel c1; }
最后以O(shè)racle身份執(zhí)行crontab -e
0 3 * * * /opt/Oracle/backup/script/validate.sh 2>&1 >/dev/null
3 結(jié)語(yǔ)
Oracle的自動(dòng)化SHELL腳本簡(jiǎn)單高效的解決日常備份管理的各種問(wèn)題,便捷的可移植性也能在其它操作系統(tǒng)平臺(tái)的Oracle備份管理中發(fā)揮同樣作用。熟練使用Oracle后,還可根據(jù)數(shù)據(jù)庫(kù)相關(guān)維護(hù)操作命令融合腳本,擴(kuò)展自動(dòng)化腳本適用范圍。
參考文獻(xiàn)
[1]SHELL.腳本學(xué)習(xí)指南[M].機(jī)械工業(yè)出版社,2009.
[2]黃鐳罡.通過(guò)UNIX Shell腳本實(shí)現(xiàn)對(duì)Oracle數(shù)據(jù)庫(kù)集中監(jiān)控管理[D].上海交通大學(xué),2010.
[3]Oracle.11g數(shù)據(jù)庫(kù)最佳入門教程[M].清華大學(xué)出版社,2014.endprint