Oracle自動備份的三種方法:

成都創(chuàng)新互聯(lián)公司專注于井岡山企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,電子商務(wù)商城網(wǎng)站建設(shè)。井岡山網(wǎng)站建設(shè)公司,為井岡山等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
Oracle自動備份數(shù)據(jù)庫不外乎以下三種方式:
WINDOWS下的任務(wù)計劃(At命令)
UNIX下的Crontab
第三方工具如Viritas
在以上三種方式中Viritas屬于第三方工具,很多人可能都沒有接觸,主要說一下windows的任務(wù)計劃與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ù)計劃向?qū)Ъ纯桑蚴褂胊t命令。在unix中,在目標(biāo)機(jī)器上編寫一個文件,用以啟動Oracle自動備份進(jìn)程。假定文件名為ORACLE,文件將放在/var/spool/cron/crontabs目錄下
$cat oracle
0 23 * * 0 backup_archive.sh
#表示星期天23點對數(shù)據(jù)庫備份
0 12,18 * * * backup_archive.sh
#表示每天12點,18點備份
Crontab文件的每一行由六個域(minutes,hours,day of month,month,day of week,command)組成,域之間用空格或Tab分隔開來。
在 Oracle 的運維過程中,常常需要監(jiān)控任務(wù)執(zhí)行情況,這時候如果用 Java 或 Python 都可以自定義一個發(fā)郵件提醒的功能,但如果能調(diào)用 Oracle 自帶的的一些包來實現(xiàn)郵件提醒,不僅調(diào)用方便,而且提醒的靈活度更高(可以插在存儲過程的任意一個犄角旮旯里)。
這里有兩篇文章,詳細(xì)介紹了調(diào)用 Oracle 系統(tǒng)包實現(xiàn)郵件提醒功能的兩種方法:
我在使用這兩個包的時候,遇到了“ORA-24247: 網(wǎng)絡(luò)訪問被訪問控制列表 (ACL) 拒絕”的報錯。我先檢查了用戶權(quán)限,然后檢查了郵件服務(wù)器的端口權(quán)限,都沒問題,于是在網(wǎng)絡(luò)上搜索答案,原來真的報錯提示很明顯,就是 ACL 權(quán)限問題,不是其他。
于是參照 ORA-24247: 網(wǎng)絡(luò)訪問被訪問控制列表 (ACL) 拒絕 這篇文章中的方法重新設(shè)置,一調(diào)試,果然可以正常發(fā)郵件了。
分兩步做,
1.oracle 當(dāng)表中數(shù)據(jù)發(fā)生變化insert或者update
這個需要觸發(fā)器的,但是觸發(fā)器的作用也無非是數(shù)據(jù)庫層面的操作,這樣最好觸發(fā)添加一條記錄到郵件通知表,這個表加個狀態(tài)state=0
2.用程序輪訓(xùn)定時掃描這個郵件通知表,周期可以設(shè)置為30秒掃描一次,掃描到的記錄,進(jìn)行郵件發(fā)送以及這個表記錄的狀態(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
?--下面四個變量請根據(jù)實際郵件服務(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ù)
?--否則會報:ORA-29279: SMTP 永久性錯誤: 503 5.5.2 Send hello first.
?UTL_SMTP.command(v_conn, 'AUTH LOGIN' ); ? -- smtp服務(wù)器登錄校驗
?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)容 注意報頭信息和郵件正文之間要空一行
?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 ?-- 這前面是報頭信息
? ? ?|| p_message; ? ?-- 這個是郵件正文
?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ū)動類提醒服務(wù),了解一下:喵提醒,通過一個http請求就可以給你發(fā)手機(jī)信息,支持傳參,還支持短信和語音電話。
Oracle 提供了一個SendMail的套件: utl_smtp.
可以利用utl_smtp來在PL/SQL發(fā)送郵件。
utl_smtp相關(guān)函數(shù)以及用法如下所示。
declare
mailhost??VARCHAR2(50)?:=?'XXX.XXX.com';
mail_conn?utl_smtp.connection;??--定義
begin
--?開啟?Mail?Connection
mail_conn?:=?utl_smtp.open_connection(mailhost);
--?建立連接
utl_smtp.helo(mail_conn,?mailhost);
--?設(shè)定發(fā)件者
utl_smtp.mail(mail_conn,?'yun@xxx.com');
--?設(shè)定收件者
utl_smtp.rcpt(mail_conn,?'feng@xxx.com');
--?設(shè)定郵件內(nèi)容
utl_smtp.data(mail_conn,?'Subject:Oracle?Send?Mail?Test'?||?utl_tcp.CRLF?||
'To:feng@xxx.com'?||?utl_tcp.CRLF?||
'Cc:lei@xxx.com'?||?utl_tcp.CRLF?||
'Hello?World!'
);
--?關(guān)閉連接
utl_smtp.quit(mail_conn);
網(wǎng)頁題目:oracle怎么提示郵件,oracle 發(fā)郵件
當(dāng)前地址:http://chinadenli.net/article20/dsggjjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站制作、企業(yè)建站、網(wǎng)站營銷、Google、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)