通过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,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
126 11
|
3月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
3月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
3月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
230 3
|
3月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
116 3
|
3月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
67 7
|
2月前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
3月前
|
数据库
【赵渝强老师】数据库的备份方式
备份数据库是指将数据库中的数据及相关信息保存起来,以便在系统故障时恢复。备份对象不仅限于数据本身,还包括数据库对象、用户权限等。根据备份策略、类型和模式的不同,可分为整体/部分备份、完全/增量备份、一致/非一致备份。文中还附有相关视频讲解。
|
15天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
1天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
61 42

热门文章

最新文章

推荐镜像

更多