Oracle自動(dòng)備份的三種方法:
創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、介休網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城網(wǎng)站定制開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為介休等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
Oracle自動(dòng)備份數(shù)據(jù)庫不外乎以下三種方式:
WINDOWS下的任務(wù)計(jì)劃(At命令)
UNIX下的Crontab
第三方工具如Viritas
在以上三種方式中Viritas屬于第三方工具,很多人可能都沒有接觸,主要說一下windows的任務(wù)計(jì)劃與unix的cron
1、生成腳本文件,如backup.rcv 假定文件內(nèi)容如下:
$cat backup.rcv connect target sys/password rcvcat rman/rman@localname; run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’ archivelog all delete input; release channel c1; release channel c2; release channel c3; }
2、生成執(zhí)行文件在windows上生成backup_archive.bat,內(nèi)容包括rman cmdfile = backup.rcv 在unix下生成 backup_archive.sh,內(nèi)容包括oracle/ramn/rman cmdfile = backup.rcv
3、加入調(diào)度在windows中用任務(wù)計(jì)劃向?qū)Ъ纯桑蚴褂胊t命令。在unix中,在目標(biāo)機(jī)器上編寫一個(gè)文件,用以啟動(dòng)Oracle自動(dòng)備份進(jìn)程。假定文件名為ORACLE,文件將放在/var/spool/cron/crontabs目錄下
$cat oracle
0 23 * * 0 backup_archive.sh
#表示星期天23點(diǎn)對數(shù)據(jù)庫備份
0 12,18 * * * backup_archive.sh
#表示每天12點(diǎn),18點(diǎn)備份
Crontab文件的每一行由六個(gè)域(minutes,hours,day of month,month,day of week,command)組成,域之間用空格或Tab分隔開來。
分兩步做,
1.oracle 當(dāng)表中數(shù)據(jù)發(fā)生變化insert或者update
這個(gè)需要觸發(fā)器的,但是觸發(fā)器的作用也無非是數(shù)據(jù)庫層面的操作,這樣最好觸發(fā)添加一條記錄到郵件通知表,這個(gè)表加個(gè)狀態(tài)state=0
2.用程序輪訓(xùn)定時(shí)掃描這個(gè)郵件通知表,周期可以設(shè)置為30秒掃描一次,掃描到的記錄,進(jìn)行郵件發(fā)送以及這個(gè)表記錄的狀態(tài)修改為state=1
用數(shù)據(jù)庫發(fā)送,附上代碼,復(fù)制進(jìn)數(shù)據(jù)庫使用即可,部分內(nèi)容根據(jù)所在環(huán)境進(jìn)行調(diào)整
CREATE OR REPLACE PROCEDURE send_mail(
? p_recipient VARCHAR2, -- 郵件接收人
? p_subject ? VARCHAR2, -- 郵件標(biāo)題
? p_message ? VARCHAR2 ?-- 郵件正文
)
IS
?--下面四個(gè)變量請根據(jù)實(shí)際郵件服務(wù)器進(jìn)行賦值
?v_mailhost ?VARCHAR2(30) := 'smtp.XXX.com'; ? ?--SMTP服務(wù)器地址
?v_user ? ? ?VARCHAR2(30) := 'user'; ? ? ? ? ? ?--登錄SMTP服務(wù)器的用戶名
?v_pass ? ? ?VARCHAR2(20) := 'pwd'; ? ? ? ? ? ? --登錄SMTP服務(wù)器的密碼
?v_sender ? ?VARCHAR2(50) := 'user@XXX.com'; ? ?--發(fā)送者郵箱,一般與 ps_user 對應(yīng)
?
?v_conn ?UTL_SMTP. connection ; --到郵件服務(wù)器的連接
?v_msg varchar2(4000); ?--郵件內(nèi)容
BEGIN
?v_conn := UTL_SMTP.open_connection(v_mailhost, 25);
?UTL_SMTP.ehlo(v_conn, v_mailhost); --是用 ehlo() 而不是 helo() 函數(shù)
?--否則會(huì)報(bào):ORA-29279: SMTP 永久性錯(cuò)誤: 503 5.5.2 Send hello first.
?UTL_SMTP.command(v_conn, 'AUTH LOGIN' ); ? -- smtp服務(wù)器登錄校驗(yàn)
?UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_user))));
?UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_pass))));
?UTL_SMTP.mail(v_conn, v_sender); ? ? --設(shè)置發(fā)件人
?UTL_SMTP.rcpt(v_conn, p_recipient); ?--設(shè)置收件人
?-- 創(chuàng)建要發(fā)送的郵件內(nèi)容 注意報(bào)頭信息和郵件正文之間要空一行
?v_msg := 'Date:' || TO_CHAR(SYSDATE, 'dd mon yy hh24:mi:ss' )
? ? ?|| UTL_TCP.CRLF || 'From: ' || '' || v_sender || ''
? ? ?|| UTL_TCP.CRLF || 'To: ' || '' || p_recipient || ''
? ? ?|| UTL_TCP.CRLF || 'Subject: ' || p_subject
? ? ?|| UTL_TCP.CRLF || UTL_TCP.CRLF ?-- 這前面是報(bào)頭信息
? ? ?|| p_message; ? ?-- 這個(gè)是郵件正文
?UTL_SMTP.open_data(v_conn); --打開流
?UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(v_msg)); --這樣寫標(biāo)題和內(nèi)容都能用中文
?UTL_SMTP.close_data(v_conn); --關(guān)閉流
?UTL_SMTP.quit(v_conn); --關(guān)閉連接
?
EXCEPTION
?WHEN OTHERS THEN
? ? ?DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
? ? ?DBMS_OUTPUT.put_line(DBMS_UTILITY.format_call_stack);
END send_mail;
你這種情況最合適用事件驅(qū)動(dòng)類提醒服務(wù),了解一下:喵提醒,通過一個(gè)http請求就可以給你發(fā)手機(jī)信息,支持傳參,還支持短信和語音電話。
解決辦法:
修改responseFile文件,將DECLINE_SECURITY_UPDATES=的值設(shè)為true,如果為空系統(tǒng)會(huì)假設(shè)該值為false,DECLINE_SECURITY_UPDATES=的值默認(rèn)為空。
$ ./runInstaller -silent -responseFile /home/oracle/database/db_install.rsp
備注:
1.-responseFile參數(shù)后是空格,然后直接跟路徑(-responseFile path),而不是-responseFile=/path