您好,欢迎访问一九零五行业门户网

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

之前涉及到oracle定期备份的问题走的都是操作系统层面的任务计划,下面用oracle的taskscheduler定期执行oracle的备份,详细步骤见下:1备份语句/oracle/bak/full
之前涉及到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
其它类似信息

推荐信息