Windows计划任务+批处理文件实现oracle数据库的定时备份与恢复

1.  备份:

PS:2014-1-15

如果导出的dmp数据文件不大的话,就直接每天导出好了,不要只保存七天的数据。然后顶起通过winrar对文件进行打包,我发现dmp文件的压缩包还是很高的。

那么就需要考虑在导出的dmp文件末尾加上日期了。bat脚本里面有date和time的函数,通过以下函数我们就可以得到想要的日期了。如果要求日期是以"-"结束,需要设定日期的格式为YYYY-M-D,而不是YYYY/M/D才可以。

C:\Users\User>echo %date:~0,10%-%time:~0,2%-%time:~3,2%-%time:~6,2%
2014-01-15-15-52-43

得到日期格式以后,我们的导出脚本就可以修改为

exp xuwei/xuwei@orcl file=f:\mydata_mytest\oradata_%date:~0,10%-%time:~0,2%-%time:~3,2%-%time:~6,2%.dmp log=f:\mydata_mytest\oradata_%date:~0,10%-%time:~0,2%-%time:~3,2%-%time:~6,2%.log

然后创建计划任务每天都执行一次即可。

PS:2014-4-3

今天发现以上脚本不能执行,这是因为%time%有一个问题, 时间中的小时, 不足两位不会自动补0(系统中不足两位时, 是补空格的, 所以我们判断到时空格, 用0来替换就可以了),具体参考:http://blog.csdn.net/bagboy_taobao_com/article/details/7198578 。修改以后的脚本如下:

@echo off
set NLS_LANG= AMERICAN_AMERICA.AL32UTF8
set hour=%time:~,2%
if "%time:~,1%"==" " set hour=0%time:~1,1%
set temp=%date:~0,4%-%date:~5,2%-%date:~8,2%-%hour%-%time:~3,2%-%time:~6,2%
exp BAOL4Dev_CGN/BAOL4Dev_CGN@env1d file=D:\db_backup\daily_backup\oradata_%temp%.dmp log=D:\db_backup\daily_backup\oradata_%temp%.log
pause

PS:2014-06-19对于时间格式的判断

http://www.sql9.com/?id=86

http://bbs.csdn.net/topics/110143577

上面的日期格式还不是最优化的,因为%date:~0,10%的输出结果可能是2014/06/19,也有可能是2014-06-19,这取决于系统对于日期格式的设定。所以对于data不能直接取全部字段,而是要将年月日单独取出来。

C:\Users\wei.xu>echo %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
20140619170757

1.1.  创建database_exp.bat批处理文件

首先首先创建七天的dmp和log空文件,然后创建一个用于导出数据库的批处理文件,这个脚本能够备份最近七天的数据库,database_ext.bat内如如下所示:

del f:\mydata_mytest\oradata7.dmp del f:\mydata_mytest\oradata7.logren f:\mydata_mytest\oradata6.dmp oradata7.dmp ren f:\mydata_mytest\oradata5.dmp oradata6.dmp ren f:\mydata_mytest\oradata4.dmp oradata5.dmp ren f:\mydata_mytest\oradata3.dmp oradata4.dmp ren f:\mydata_mytest\oradata2.dmp oradata3.dmp ren f:\mydata_mytest\oradata.dmp oradata2.dmp ren f:\mydata_mytest\oradata6.log oradata7.log ren f:\mydata_mytest\oradata5.log oradata6.log ren f:\mydata_mytest\oradata4.log oradata5.log ren f:\mydata_mytest\oradata3.log oradata4.log ren f:\mydata_mytest\oradata2.log oradata3.log ren f:\mydata_mytest\oradata.log oradata2.logexp xuwei/xuwei@orcl file=f:\mydata_mytest\oradata.dmp log=f:\mydata_mytest\oradata.log

(ps:2013-8-8)

 

ren f:\mydata_mytest\oradata6.dmp oradata7.dmp ren命令第一个是带路径的,第二个参数是不带路径的,表示就在第一个文件的目录下。

 

(ps:2011-12-29)

database_exp.bat解析:上面的批处理语句其实非常简单,就是让七个dmp文件组成一个长度为7的队列,然后每次备份数据库的时候删除队列头部,也就是备份最后的那个oracle7.dmp文件,这个时候oralce6.dmp成为队列头部元素,将oralce6.dmp命名为oracle7.dmp,后面的一次类推。知道最后将oracle.dmp重命名为oracle2.dmp,然后使用exp命令导出数据库文件,导出的文件存放在oracle.dmp文件中。

今天碰到一个问题,就是有一个text.dmp文件,我只想导入这个.dmp文件中的一个表或者是两个表,那么应该如何实现。其实imp命令有一系列的参数,我们可以通过tables这个参数来控制需要导入的数据库表。导入一张表的情况,导入命令如下:

imp username/password@SID file=f:\test.dmp tables=WORKFLOW ignore=y

如果是导入两张或者两张表以上,那么就需要通过括号括起来,导入命令如下:

imp username/password@SID file=f:\test.dmp tables=(EMP,WORKFLOW) ignore=y

1.2.  执行database_ext.bat批处理文件

可以双击这个批处理文件,也可以将这个批处理文件拖到cmd中执行。

2.  恢复

2.1.  建立droptables.sql脚本

这个sql脚本是用来执行数据库存储过程的。droptable.sql的内容如下所示:

execute droptables();exit

2.2.  创建存储过程       

之所以要执行这个脚本,是为了在恢复数据库之前,首先删除数据库中的所有已存在的表。

droptables存储过程用来删除当前数据库中的所有表,存储过程内容如下所示:

CREATE OR REPLACE procedure droptables isv_sql varchar2(2000) ;CURSOR cur is select table_name from user_tables order by table_name;begin for rows in cur loop v_sql := 'drop TABLE ' || rows.table_name||' cascade constraints';dbms_output.put_line(v_sql);execute immediate v_sql;end loop;execute immediate 'purge recyclebin';end droptables;

可以在Sql Developer中创建存储过程,如下图所示:

PS-2014-2-25存储过程的执行

在cmd命令窗口下

execute droptables();
exit

在sql窗口下

begin
droptables();
end;

2.3.  创建imp.bat批处理文件

imp.bat这个批处理文件用于恢复数据,其原理就是将前面备份的dmp数据库文件导入到数据库中。imp.bat内容如下所示:

sqlplus xuwei/xuwei@orcl @f:\mydata_mytest\droptables.sqlimp xuwei/xuwei@orcl file=f:\mydata_mytest\oradata.dmp full=y ignore=y

2.4.  bat文件命名的注意点

上述的两个批处理文件分别命名为database_imp.bat和database_exp.bat,如果命名为imp.bat和exp.bat,双击这两个文件都会出错,而将他们拖拽到cmd命令中则能够正常执行。这是因为批处理文件的文件名不能是命令的单词相同,上述imp和exp都是命令的名字,所以不能用来做bat文件的文件名。

3.  使用Windows任务计划程序

在控制面板中打开计划任务程序,然后按如下图进行计划任务配置。

注意点:如果要是windows系统执行计划任务,那么必须开启计划任务程序的服务,

计划任务程序所对应的服务叫做TaskSchedule,如下图所示:

时间: 2024-12-31 02:27:19

Windows计划任务+批处理文件实现oracle数据库的定时备份与恢复的相关文章

在Windows Azure上开始使用Oracle

Microsoft 和 Oracle 近期宣布建立http://www.aliyun.com/zixun/aggregation/6065.html">战略合作伙伴关系,基于此,我们将通过 Windows Azure 镜像库推出多种常用的 Oracle 软件配置.即日起,客户可以在 Windows Server 上部署运行 Oracle 数据库.Oracle WebLogic Server 和 Java PlatformSE 各种组合的预配置虚拟机映像,这些映像内置了 Oracle 软件的

windows系统下oracle数据库定时自动备份

  实现目的:为避免数据丢失或错误,对数据库数据的定时备份 实现方式:oracle导出+windows 任务 完成 学习方法:先知其然,后知其所以然 实现过程: 1. 建立文件 backup.bat (自定义文件名.bat) @echo off REM ########################################################### REM # Windows Server 2003下Oracle数据库自动备份批处理脚本 REM ##############

Windows系统下Oracle数据库每天自动备份_oracle

linux和unix下面使用shell可以很方便实现,如果windows环境下可以结合计划任务实现 1.创建备份目录d:\backup, 创建批处理命令Bak.bat,编写备份脚本 exp user/passwd@orcl DIRECT=Y BUFFER=100000 FILE=D:\backup\scdd%date:~0,10% OWNER=('scdd') LOG=D:\backup\data.log forfiles /p "D:\backup" /s /m *.dmp /d -

oracle数据库性能调优技术:深入理解单表执行计划

一.概述 这篇文章是数据库性能调优技术的第二篇.上一篇讲解的索引调优是数据库性能调优技术的基础.这篇讲解的深入理解单表执行计划,是数据库性能调优的有力工具. 查询语句可以有多种可选执行计划,如何选择效率最高的执行计划?达梦数据库.oracle数据库.sql server数据库都是采用基于成本的查询优化,对备选执行计划进行打分,选择大家最小的执行计划进行执行.这些内容,我会在后续的几篇文章中进行详细的描述.在此之前,我们首先需要掌握如何理解数据库执行计划.这篇文章讲解只涉及单表操作的执行计划. 达

Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)

js|mysql|oracle|window|数据|数据库  Jsp 环境目前最流行的是 Tomcat5.0.Tomcat5.0 自己包含一个 Web 服务器,如果是测试,就没必要把 Tomcat 与 IIS 或 Apache 集成起来.在 Tomcat 自带的 Web 服务器下可以进行 Jsp 测试.    安装 Tomcat5.0 前需要安装 JDK(如果是 Windows server 2003 就必须安装 JDK,因为 Windows server 2003 是不带 JVM 的-Wind

oracle数据库性能调优技术:深入理解嵌套循环执行计划

一.概述 这篇文章是数据库性能调优技术的第三篇.上一篇文章讲解了深入了解单表执行计划,单表执行计划是理解多表执行计划的基础. 两张表的连接有三种执行方式:1)嵌套循环连接:2)散列连接:3)归并连接.两张表连接时选择这三种中的哪一种呢?这取决于索引.以及连接的代价.在该系列的第三篇(本文)文章中讲解嵌套循环连接,第四篇文章中讲解散列连接,第五篇文章中讲解归并连接.在第六篇以后会分析IN子查询以及EXISTS子查询. 达梦数据库.oracle数据库.sql server数据库在数据库执行计划方面并

oracle数据库性能调优技术:深入理解散列连接执行计划

一.概述 这篇文章是数据库性能调优技术系列的第四篇.上一篇文章讲解了深入理解嵌套循环连接执行计划. 上一篇文章中提到两张表的连接有三种执行方式:1)嵌套循环连接:2)散列连接:3)归并连接.散列连接是很重要的连接方式,包含比较多的内容,这篇文章中讲解为什么需要散列连接?如何理解散列连接? 和前三篇文章一样,本文讲解的是些比较抽象的内容,不拘泥于具体的数据.所以本文中使用的代价评估模型也是抽象的,假设了数据库缓冲区大小只有一个页,新页的读取必然导致旧页的释放.读完本文之后应该能够读懂达梦数据库.o

Oracle数据库如何搜集指定SQL的执行计划和解决过程中的ORA-00904错误

  Oracle 数据库如何搜集指定SQL的执行计划和解决过程中的ORA-00904错误 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处;否则请与本人联系,违者必究) 如何收集指定SQL的执行计划对开发人员来说非常重要的,这里记录下基础的收集方式,以便查阅和其他人参考. 1. 链接到sqlplus,如下图 2. 执行下面两个的命令之一 set autotrace on; (说明:打开自动分析统计,并显示SQL语句的运行结果) 3. 输入并执行要搜集执行计划的SQL语句

Oracle数据库设置任务计划备份一周的备份记录

  Oracle 数据库备份: --保留最近一周的备份记录; ====正文: ====开始============== echo 设置备份文件存放文件夹... set "tbuf=E:Cwaybackup" echo 设置备份文件名(以星期几命名,即备份文件只保存最近一周)... set name=%date% set name=%name:~-3% set name=ORCL_backup_%name% echo 是否存在同名文件,若存在则删除同名文件... if exist %tb