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

摘要:
知道最后将oracle.dmp重命名为oracle2.dmp,然后使用exp命令导出数据库文件,导出的文件存放在oracle.dmp文件中。其实imp命令有一系列的参数,我们可以通过tables这个参数来控制需要导入的数据库表。
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

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

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_backupdaily_backuporadata_%temp%.dmp log=D:db_backupdaily_backuporadata_%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:Userswei.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_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中创建存储过程,如下图所示:

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

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_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计划任务+批处理文件实现oracle数据库的定时备份与恢复第8张

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

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

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

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

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

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

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

免责声明:文章转载自《windows计划任务+批处理文件实现oracle数据库的定时备份与恢复》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ESP8266-模拟输出(PWM)puppet学习之puppet证书验证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL SERVER 2008 R2 自动备份并删除过期备份数据

    我们的系统维护的过程中肯定需要对数据库进行定期的备份,但是如果定时手工备份的话,不但浪费时间,也不能保证每次都可以按时备份,所以自动备份成为了我们的不二选择,但是定时备份需要定期清理备份文件,不然会因为磁盘空间不足导致备份失败,失去备份的准确性,下面我们就一步步来看一下如果自动备份并删除过期备份数据。 1.打开SQL SERVER 2008 R2,...

SQL和NoSQL

SQL和NoSQL  目前的数据库系统非常多,有传统的关系型的数据库系统(又被称为SQL数据库系统),有最近几年流行起来的NoSQL数据库系统。其中NoSQL数据库系统又分为很多种不同的类型,根据各个系统所支持的数据模型的不同,可以分为很多类,下面做一个简单的分类,更多的分类请参见dbengines的排名。 1、SQL数据库系统 ============...

jboss日志的自定义

最近由于想着每次调试socket接收数据情况都需要源码debug好麻烦,要是能把接收到的数据输出到一个单独的日志文件,那出问题的时候,查看问题就方便多了。 log4j的日志是可以很方便自定义的,只是这个jboss没有搞过,不晓得怎么搞,查阅一番资料后,终于找到了自定义的方式。 首先,需要找到jboss目录下的 standalone.xml 这个文件,路径(...

MongoDB(6)- BSON 数据类型

BSON BSON是一种二进制序列化格式,用于在 MongoDB 中存储文档和进行远程过程调用 跟 JSON 的数据结构很像,但是支持更丰富的数据类型 数据类型 数据类型 序号 别名 备注 Double 1 double   String 2 string   Object 3 object   Array 4 array  ...

跨库事务一致性问题的解决方式(例)

    我们看一个跨库事务一致性的问题,这是一个简单的场景:有新老两个系统。相应新老两套数据库。新数据库採用分库分表的设计。考虑到项目公布之后可能存在风险,採取了新老系统的并行方案。这个系统的业务比較简单:接收来自外部的数据。然后对数据进行核对处理。为了保证新老系统可以并行。在接收数据的时候必须实现双写方案,从而导致了跨库事务的一致性问题。     以...

InnoDB关键特性之double write

# 脏页刷盘的风险 两次写的原理机制   1、解决问题   2、使用场景   3、doublewrite的工作流程   4、崩溃恢复 # doublewrite的副作用   1、监控doublewrite负载   2、关闭doublewrite场景 一、脏页刷盘风险 关于IO的最小单位:   1、数据库IO的最小单位是16K(MySQL默认,orac...