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

  • 相关阅读:
    UVALive 7141 BombX
    CodeForces 722D Generating Sets
    CodeForces 722C Destroying Array
    CodeForces 721D Maxim and Array
    CodeForces 721C Journey
    CodeForces 415D Mashmokh and ACM
    CodeForces 718C Sasha and Array
    CodeForces 635C XOR Equation
    CodeForces 631D Messenger
    田忌赛马问题
  • 原文地址:https://www.cnblogs.com/smallrock/p/3542684.html
Copyright © 2011-2022 走看看