日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

通过oracle任务计划定期备份数据库

發布時間:2025/7/14 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过oracle任务计划定期备份数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前涉及到oracle定期備份的問題走的都是操作系統層面的任務計劃,下面用oracle的task?scheduler?定期執行oracle的備份,詳細步驟見下:


1?備份語句/oracle/bak/fullbk.txt如下:

[oracle@dest?~]$?cat?/oracle/bak/fullbk.txt

run{

delete?noprompt?obsolete;???????#?以不提示的方式刪除狀態為obsolete的備份(注意備份是否obsolete和備份保留策略有關)

crosscheck?backup;??????????????#?校驗rman資料庫中記錄的備份是否存在于磁盤或物理設備上,如果不存在,則更改rman資料庫中該備份記錄為expired狀態

delete?noprompt?expired?backup;?#?以不提示的方式刪除rman資料庫中所有標記為expired狀態的記錄

crosscheck?archivelog?all;??????#?校驗rman資料庫中所有歸檔記錄,對在物理設備上不存在的歸檔,在rman資料庫中更新其標記為expired

delete?noprompt?expired?archivelog?all;?#以不提示的方式刪除rman資料庫中所有標記為expired狀態的歸檔記錄

backup?incremental?level=0??database?format?'/backup/crm/full-%T-%U.bak';?#做一個0級別的數據庫全備份

backup?archivelog?all??format?'/backup/crm/arch-%T-%U.bak';?#備份所有歸檔

backup?current?controlfile?format?'/backup/crm/ctl-%T-%U.bak';?#備份當前控制文件

backup?spfile?format?'/backup/crm/spf-%T-%U.bak';??????????????#?備份參數文件??

delete?noprompt?archivelog?all?completed?before?'SYSDATE?-?7';?#?以不提示的方式刪除7天之前的所有歸檔

}

注意?以上腳本僅僅是為測試,該腳本對于從上一次全備份到數據庫當前狀態丟失了一部分歸檔,或者歸檔損壞的情況,是無法進行完全恢復的。


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調用/oracle/bak/fullbk.txt文本中的備份語句,記錄當前備份過程于日志文件,并更改生成的日志文件名為當前日期。


3?在oracle中創建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;

/?

查詢我們剛剛創建的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則可用如下語句

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?創建一個scheduler

begin

dbms_scheduler.create_schedule(

?schedule_name????=>'oracle_bk_schedule',

?repeat_interval??=>'FREQ=DAILY;BYHOUR=15,16,17',

?comments?????????=>'backup?start?3pm');

end;

/

查選我們剛剛創建的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?創建一個job,在job中引用創建的程序和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;

/

查詢我們剛剛創建的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?查詢創建job的運行狀況如下:

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前應先刪除調用program和schedule的job

?????2?之前rman.sh腳本缺少#!/bin/bash?以及rman未輸入全路徑導致任務計劃不能執行提示腳本不能執行

?????3?關于oracle?scheduler的詳細介紹請參考官方文檔











本文轉自 zhangxuwl 51CTO博客,原文鏈接:http://blog.51cto.com/jiujian/1354083,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的通过oracle任务计划定期备份数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。