zoukankan      html  css  js  c++  java
  • windows计划任务+批处理文件实现oracle数据库的定时备份与恢复

    1. 备份:

    PS:2014-1-15

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

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

    C:UsersUser>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_mytestoradata_%date:~0,10%-%time:~0,2%-%time:~3,2%-%time:~6,2%.dmp log=f:mydata_mytestoradata_%date:~0,10%-%time:~0,2%-%time:~3,2%-%time:~6,2%.log

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

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

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

    复制代码
    del f:mydata_mytestoradata7.dmp 
    del f:mydata_mytestoradata7.log
    ren f:mydata_mytestoradata6.dmp oradata7.dmp
    ren f:mydata_mytestoradata5.dmp oradata6.dmp
    ren f:mydata_mytestoradata4.dmp oradata5.dmp
    ren f:mydata_mytestoradata3.dmp oradata4.dmp
    ren f:mydata_mytestoradata2.dmp oradata3.dmp
    ren f:mydata_mytestoradata.dmp oradata2.dmp
    ren f:mydata_mytestoradata6.log oradata7.log
    ren f:mydata_mytestoradata5.log oradata6.log
    ren f:mydata_mytestoradata4.log oradata5.log
    ren f:mydata_mytestoradata3.log oradata4.log
    ren f:mydata_mytestoradata2.log oradata3.log
    ren f:mydata_mytestoradata.log oradata2.log
    exp xuwei/xuwei@orcl file=f:mydata_mytestoradata.dmp log=f:mydata_mytestoradata.log
    复制代码

    (ps:2013-8-8)

    ren f:mydata_mytestoradata6.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:	est.dmp tables=WORKFLOW ignore=y

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

    imp username/password@SID file=f:	est.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 is
    v_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中创建存储过程,如下图所示:

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

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

    sqlplus xuwei/xuwei@orcl @f:mydata_mytestdroptables.sql
    imp xuwei/xuwei@orcl file=f:mydata_mytestoradata.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,如下图所示:

    原文:http://www.cnblogs.com/xwdreamer/archive/2011/07/15/2296980.html

  • 相关阅读:
    Nbear实体和接口 CodeSmith模版
    prototype1.4版中文参考手册(word,pdf,chm)
    SharePoint 2013 (SharePoint 15)的新特性
    没有域环境下安装SharePoint 2010
    产品经理(PM)常用原型图设计工具
    【转贴】mysql导入数据load data infile用法
    重新学javaweb!
    关于HIbernate中的lazy属性的一些解释
    JAVA程序员基本测试题目
    添加sql server约束
  • 原文地址:https://www.cnblogs.com/smallrock/p/3542684.html
Copyright © 2011-2022 走看看