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/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] file=f:\test.dmp tables=WORKFLOW ignore=y

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

imp username/[email protected] 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/[email protected] @f:\mydata_mytest\droptables.sqlimp xuwei/[email protected] 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-10 07:50:09

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

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

1.创建批处理文件 @echo off REM ########################################################### REM # Windows Server 2008下Oracle数据库自动备份批处理脚本 REM ########################################################### set CURDATE=%date:~0,4%%date:~5,2%%date:~8,2% set hour=%t

Oracle数据库泵的备份与恢复

Oracle数据库泵的备份与恢复 目录 一.数据库备份和恢复前的准备... 1 1.给数据库用户授权并创建DIRECTORY对象... 1_Toc388455817 二.数据泵的备份和恢复... 1 1.      数据库备份... 1 2.      数据库恢复... 2 三.进入交互模式... 4 一.数据库备份和恢复前的准备 1.给数据库用户授权并创建DIRECTORY对象 在SQL命令行下执行如下命令(执行sql的用户要有目录创建和授权的权限): grant create any dir

PHP7在windows上配置远程连接Oracle数据库的方法

由于项目需求,需要去其他项目组的oracle数据库上面去定时的获取一些数据,在本地配置了一下连接都oracle的方法,踩过windows上配置的一个又一个的坑,终于完成了配置,在此分享一下,希望能够帮助到有需要的的人. 1.首先验证一下他们给的只读账号是否能够连接成功,需要在本地安装连接工具(PLSQL Developer) 2.配置PLSQL Developer连接需要下载oracle即时客户端(instantclient_11_2)工具,建立一个tnsnames.ora文件里面保存连接数据库

记录在Windows上安装和使用Oracle数据库过程中的坑

1.安装Oracle Oracle软件是免费的,可以去官网下载相应的安装包.但是如果用于商业用途需要购买License.官网上针对各种平台,32位和64位都有,如果在Windows一般会下载到两个文件.以Oracle 11g为例,有两个zip压缩文件,注意安装前将两个压缩文件的内容解压后合并.安装提示监视器配置至少必须显示256种颜色,可以忽略.其他安装前置项检查,可能会闪退,实在不知什么原因,只能更换操作系统.注意安装目录不能是带空格或特殊字符的目录名,可以如C:\Oracle\.目前本人在S

ORACLE数据库数据的备份与恢复

原创作品,转自请在文字开头显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10052949.html 数据备份恢复在数据库管理中至关重要,今天,总结一下数据库备份与恢复需要注意的方面和实际操作!. 一.在备份之前首先应该执行commit语句,将所有未提交的数据进行提交,(提交了的数据也有可能在内存),执行alter system checkpoint语句,所有的脏数据(内存中所有修改过的数据,这些数据有可能被提交,也有可能未被提交)都会被写入到了磁

window下oracle数据库expdp定时备份

window下的批处理脚本如下: rem @echo off rem 获取当前日期字符串 for /f "tokens=1,2,3 delims=/- " %%a in ("%date%") do @set D=%%a%%b%%c echo %D% set log=%D%.log set backup_dmp=bbtj%D%.dmp set backup_log=bbtj%D%.log ( rem 切换盘符 E: rem 切换目录 cd E:\bbtj_backup

Oracle 数据库添加定时事件

程序设计中可能会碰到想要定时执行某段操作的情况,例如: 每月清空某张表的数据: 每年重新提取一次某张表的数据等. 这种情况可以通过设置数据库的定时任务来实现,步骤如下: (1)首先检查数据库进程数 为0标识不运行job show parameter Job_queue_processes //检查进程数语句 (命令窗口执行) 如果value的值是0,那么执行如下命令: alter system set job_queue_processes=10 scope=both //设置进程数 (2)创建

详解大数据采集引擎之Sqoop&采集oracle数据库中的数据

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop import命令将RDBMS中的数据导入到HDFS/Hive/HBase中,也可以通过sqoop export命令将HDFS/Hive/HBase中的

AppAssure备份Windows平台Oracle数据库

环境: AppAssure Core : 5.4.3.106 Oracle:  11g Enterprise Edition Release 11.2.0.1.0 -64bit OS: Windows Server 2012 R2 (Core Server and OracleDB) 备份恢复步骤如下: 1. 检查数据库模式, 查看数据库是否处于归档模式中 sqlplus / as sysdba SQL > archive log list 2. 若为非归档,则修改数据库归档模式 SQL >