Welcome 微信登录

首页 / 数据库 / MySQL / 通过Oracle任务计划定期备份数据库

之前涉及到Oracle定期备份的问题走的都是操作系统层面的任务计划,下面用oracle的task scheduler 定期执行oracle的备份,详细步骤见下: 1 备份语句/oracle/bak/fullbk.txt如下:[oracle@dest ~]$ cat /oracle/bak/fullbk.txtrun{delete noprompt obsolete; # 以不提示的方式删除状态为obsolete的备份(注意备份是否obsolete和备份保留策略有关)crosscheck backup; # 校验rman资料库中记录的备份是否存在于磁盘或物理设备上,如果不存在,则更改rman资料库中该备份记录为expired状态delete noprompt expired backup; # 以不提示的方式删除rman资料库中所有标记为expired状态的记录crosscheck archivelog all; # 校验rman资料库中所有归档记录,对在物理设备上不存在的归档,在rman资料库中更新其标记为expireddelete 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/bashexport today=`date +%Y%m%d%H%M`export ORACLE_HOME=/oracle/app/db1export ORACLE_SID=CRM$ORACLE_HOME/bin/rman target sys/DHHZDHHZ log=/oracle/bak/crm.log cmdfile=/oracle/bak/fullbk.txtmv /oracle/bak/crm.log "/oracle/bak/crm${today}.log" 此脚本让rman调用/oracle/bak/fullbk.txt文本中的备份语句,记录当前备份过程于日志文件,并更改生成的日志文件名为当前日期。 3 在oracle中创建programbegindbms_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则可用如下语句BEGINDBMS_SCHEDULER.SET_ATTRIBUTE (name => "",attribute => "",value => "");END;/如下:BEGINDBMS_SCHEDULER.SET_ATTRIBUTE (name => "oracle_bk_schedule",attribute => "repeat_interval",value => "FREQ=DAILY;BYHOUR=15,16,17");END;/  4 创建一个schedulerbegindbms_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 detectedbegindbms_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 SUCCEEDED514 22-JAN-14 03.58.51.953108 PM +08:00 SUCCEEDED519 22-JAN-14 04.58.10.062466 PM +08:00 SUCCEEDED522 22-JAN-14 05.57.50.288474 PM +08:00 SUCCEEDED 7 查询生成的备份日志文件记录如下: [oracle@dest bak]$ ls -lttotal 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的job2 之前rman.sh脚本缺少#!/bin/bash 以及rman未输入全路径导致任务计划不能执行提示脚本不能执行3 关于oracle scheduler的详细介绍请参考官方文档相关阅读:Oracle datapump expdp/impdp 导入导出数据库时hang住 http://www.linuxidc.com/Linux/2013-05/84746.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12MemSQL 入门体验小记Oracle undo 机制相关资讯      Oracle备份  Oracle数据库备份 
  • Oracle数据库备份方法  (今 20:18)
  • Oracle用户管理方式下备份数据和复  (09/23/2014 18:52:01)
  • Oracle 10.2.0.5 版本之后 asm   (08/08/2014 11:02:09)
  • 利用Oracle自带的impdp和expdp进行  (05月18日)
  • Java实现Oracle数据库备份  (08/12/2014 11:24:51)
  • Oracle备份与恢复系列  (08/01/2014 09:15:02)
本文评论 查看全部评论 (0)
表情: 姓名: 字数