通过oracle任务计划定期备份数据库
之前涉及到oracle定期備份的問(wèn)題走的都是操作系統(tǒng)層面的任務(wù)計(jì)劃,下面用oracle的task?scheduler?定期執(zhí)行oracle的備份,詳細(xì)步驟見(jiàn)下:
1?備份語(yǔ)句/oracle/bak/fullbk.txt如下:
[oracle@dest?~]$?cat?/oracle/bak/fullbk.txt
run{
delete?noprompt?obsolete;???????#?以不提示的方式刪除狀態(tài)為obsolete的備份(注意備份是否obsolete和備份保留策略有關(guān))
crosscheck?backup;??????????????#?校驗(yàn)rman資料庫(kù)中記錄的備份是否存在于磁盤(pán)或物理設(shè)備上,如果不存在,則更改rman資料庫(kù)中該備份記錄為expired狀態(tài)
delete?noprompt?expired?backup;?#?以不提示的方式刪除rman資料庫(kù)中所有標(biāo)記為expired狀態(tài)的記錄
crosscheck?archivelog?all;??????#?校驗(yàn)rman資料庫(kù)中所有歸檔記錄,對(duì)在物理設(shè)備上不存在的歸檔,在rman資料庫(kù)中更新其標(biāo)記為expired
delete?noprompt?expired?archivelog?all;?#以不提示的方式刪除rman資料庫(kù)中所有標(biāo)記為expired狀態(tài)的歸檔記錄
backup?incremental?level=0??database?format?'/backup/crm/full-%T-%U.bak';?#做一個(gè)0級(jí)別的數(shù)據(jù)庫(kù)全備份
backup?archivelog?all??format?'/backup/crm/arch-%T-%U.bak';?#備份所有歸檔
backup?current?controlfile?format?'/backup/crm/ctl-%T-%U.bak';?#備份當(dāng)前控制文件
backup?spfile?format?'/backup/crm/spf-%T-%U.bak';??????????????#?備份參數(shù)文件??
delete?noprompt?archivelog?all?completed?before?'SYSDATE?-?7';?#?以不提示的方式刪除7天之前的所有歸檔
}
注意?以上腳本僅僅是為測(cè)試,該腳本對(duì)于從上一次全備份到數(shù)據(jù)庫(kù)當(dāng)前狀態(tài)丟失了一部分歸檔,或者歸檔損壞的情況,是無(wú)法進(jìn)行完全恢復(fù)的。
2?備份腳本/oracle/bak/rman.sh如下:
[oracle@dest?~]$?cat?/oracle/bak/rman.sh?
#!/bin/bash
export?today=`date?+%Y%m%d%H%M`
export?ORACLE_HOME=/oracle/app/db1
export?ORACLE_SID=CRM
$ORACLE_HOME/bin/rman?target?sys/DHHZDHHZ?log=/oracle/bak/crm.log?cmdfile=/oracle/bak/fullbk.txt
mv?/oracle/bak/crm.log??"/oracle/bak/crm${today}.log"
此腳本讓rman調(diào)用/oracle/bak/fullbk.txt文本中的備份語(yǔ)句,記錄當(dāng)前備份過(guò)程于日志文件,并更改生成的日志文件名為當(dāng)前日期。
3?在oracle中創(chuàng)建program
begin
??dbms_scheduler.create_program?(
???program_name???????????=>'oracle_bk_program',
???program_action?????????=>'/oracle/bak/rman.sh',
???program_type???????????=>'EXECUTABLE',
???enabled????????????????=>true,
???comments???????????????=>'oracle.sh');
end;
/?
查詢我們剛剛創(chuàng)建的program如下
select?program_name,program_type,program_action,number_of_arguments,enabled?from?user_scheduler_programs?where?program_name='ORACLE_BK_PROGRAM';
PROGRAM_NAME???????????PROGRAM_TYPE?????PROGRAM_ACTION??????NUMBER_OF_ARGUMENTS?ENABL
-------------------?----------------?----------------------?-------------------?-----
ORACLE_BK_PROGRAM?????EXECUTABLE???????/oracle/bak/rman.sh??????????????0????????TRUE
注意如果要修改程序,job或者shceduler則可用如下語(yǔ)句
BEGIN
??DBMS_SCHEDULER.SET_ATTRIBUTE?(
???name???????????=>?'',
???attribute??????=>?'',
???value??????????=>?'');
END;
/
如下:
BEGIN
??DBMS_SCHEDULER.SET_ATTRIBUTE?(
???name???????????=>?'oracle_bk_schedule',
???attribute??????=>?'repeat_interval',
???value??????????=>?'FREQ=DAILY;BYHOUR=15,16,17');
END;
/
4?創(chuàng)建一個(gè)scheduler
begin
dbms_scheduler.create_schedule(
?schedule_name????=>'oracle_bk_schedule',
?repeat_interval??=>'FREQ=DAILY;BYHOUR=15,16,17',
?comments?????????=>'backup?start?3pm');
end;
/
查選我們剛剛創(chuàng)建的scheduler如下:
SQL>?select?schedule_name,repeat_interval?from?user_scheduler_schedules?where?schedule_name='ORACLE_BK_SCHEDULE';
SCHEDULE_NAME??????????????????REPEAT_INTERVAL
------------------------------?------------------------------------------------------------
ORACLE_BK_SCHEDULE?????????????FREQ=DAILY;BYHOUR=17
5?創(chuàng)建一個(gè)job,在job中引用創(chuàng)建的程序和scheduler
注意?After?you?create?a?job?and?enable?it,?the?Scheduler?automatically?runs?the?job?according?to?its?schedule?or?when?the?specified?event?is?detected
begin
dbms_scheduler.create_job(
job_name???????=>'oracle_bk',
program_name???=>'oracle_bk_program',
schedule_name??=>'oracle_bk_schedule',
enabled????????=>true);
end;
/
查詢我們剛剛創(chuàng)建的job如下:
SQL>?select?job_name,job_type,job_action,?REPEAT_INTERVAL,enabled,state?from?user_scheduler_jobs?where?job_name='ORACLE_BK';
JOB_NAME?????????JOB_TYPE??????JOB_ACTION?????REPEAT_INTERVAL??ENABL?STATE
------------?-------------?-----------------?-----------------?-----?---------------
ORACLE_BK??????????????????????????????????????????????????????TRUE??SCHEDULED???????????????????????????????????????????????????????????????????????????????????????????????????????????
SQL>?
6?查詢創(chuàng)建job的運(yùn)行狀況如下:
select?log_id,log_date,status,additional_info?from?user_scheduler_job_run_details?where?job_name='ORACLE_BK';
????LOG_ID?LOG_DATE?????????????????????????????STATUS???????????????ADDITIONAL_INFO
----------?-----------------------------------?----------?------------------------------
???????511?22-JAN-14?03.54.43.650305?PM?+08:00?SUCCEEDED
???????514?22-JAN-14?03.58.51.953108?PM?+08:00?SUCCEEDED
???????519?22-JAN-14?04.58.10.062466?PM?+08:00?SUCCEEDED
???????522?22-JAN-14?05.57.50.288474?PM?+08:00?SUCCEEDED
7?查詢生成的備份日志文件記錄如下:
[oracle@dest?bak]$?ls?-lt
total?304
-rw-r--r--?1?oracle?oinstall??9680?Jan?22?17:57?crm201401221756.log
-rw-r--r--?1?oracle?oinstall?10595?Jan?22?16:58?crm201401221656.log
-rw-r--r--?1?oracle?oinstall?13155?Jan?22?15:58?crm201401221556.log
-rw-r--r--?1?oracle?oinstall?12681?Jan?22?15:54?crm201401221551.log
注意?1?刪除program和scheduler前應(yīng)先刪除調(diào)用program和schedule的job
?????2?之前rman.sh腳本缺少#!/bin/bash?以及rman未輸入全路徑導(dǎo)致任務(wù)計(jì)劃不能執(zhí)行提示腳本不能執(zhí)行
?????3?關(guān)于oracle?scheduler的詳細(xì)介紹請(qǐng)參考官方文檔
本文轉(zhuǎn)自 zhangxuwl 51CTO博客,原文鏈接:http://blog.51cto.com/jiujian/1354083,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的通过oracle任务计划定期备份数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle vm 实施图解
- 下一篇: Librepilot-创建UAVObje