一、window下自动备份数据库的步骤
1、创建自动备份数据库bat文件
2、在window下创建定时器任务,定时执行1中的bat文件
二、自动备份数据库bat文件
1、创建备份文件及日志文件的文件夹(路径)
创建文件夹的命令:md <路径名>
因为是在bat文件中,会执行不止一次,可以加上一个判断条件,命令:if not exist <路径名> md <路径名>
2、导出数据库数据
备份整个库:exp <用户名>/<密码>@<实例名> file=<备份文件路径 .dmp文件> log=<日志文件路径 .log文件>full=y
备份某个用户的所有表:exp <用户名>/<密码>@<实例名> file=<备份文件路径 .dmp文件> log=<日志文件路径 .log文件> owner=(<user1>,<user2>)
备份某个用户的某几张表:exp <用户名>/<密码>@<实例名> file=<备份文件路径 .dmp文件> log=<日志文件路径 .log文件> tables=(<table1>,<table2>)
注意:权限的问题
3、定时删除过期的备份文件及日志
定时删除文件的命令格式:forfiles /p "<目录文件夹>" /s /m <筛选条件> /d -<天数> /c "cmd /c del @path"
三、 window下创建定时器任务
1、进入window管理工具->任务计划程序
2、点击右上角部分的“创建基本任务”,在弹出的选项卡中填入任务的名称及描述,然后“下一步”
3、然后创建定时器,先选择周期,在选择执行的具体时间,然后“下一步”
4、选择要执行的操作,这里选择第一项“执行程序”,然后“下一步”
5、选择要执行的程序或bat文件,完成
四、注意要点
1、因为是自动备份,所以文件名以日期自动命名,
set var1=%date% #这样得到的是日期,格式为 yyyy-mm-dd
set var2=%time% #这样得到的是时间,格式为 hh:mm:ss
set var=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% #这样得到的是日期时间字符串 格式yyyyMMddhhmmss
这个字符串可以用来给自动生成的文件命名吗?不能,这里有一个坑 日期格式是固定的,但是时间格式是不固定的,hh的位数可能为1(小于10点的时候),它不会在签名自动补零,而是空格占位
我就在这里卡了好几天,因为我测试是在白天,一点问题没有,定时器设定的是凌晨,所以,测试一点问题没有,但就是正式应用执行不成功,定时器返回(0x1)
所以需要处理一下,将得到的日期时间字符串处理一下,将空格替换为0
set var=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
set var=%var: =0%
这样就可以得到可以作为文件名的日期字符串
2、oracle导出命令exp
如果数据库的密码含有特殊字符,则需要将命令处理一下,如用户名是test,密码是test@20170719,实例名是orcl,导出为d盘下1.dmp,日志为d盘下1.log,则导出test用户所有表的命令为
exp test/"""test@20170719"""@orcl file=D:\1.dmp log=D:\1.log owner=test
2、定时器的权限问题
五、完整的bat文件
@echo off
echo 开始备份数据库
if not exist D:\oraclebackup\files md D:\oraclebackup\files
if not exist D:\oraclebackup\logs md D:\oraclebackup\logs
set var=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
set var=%var: =0%
exp test/"""test@20170719"""@orcl file=D:\oraclebackup\files\hn_%var%.dmp log=D:\oraclebackup\logs\hn_%var%.log owner=test
echo 删除7天前的备份记录
forfiles /p "D:\oraclebackup" /s /m *.dmp /d -7 /c "cmd /c del @path"
forfiles /p "D:\oraclebackup" /s /m *.log /d -7 /c "cmd /c del @path"
rem 下面两行是用来调试用的,阻止命令行窗口自动关闭,保留bat文件的执行结果及错误信息,正式时可以去掉
echo 请按任意键开始或结束
pause>nul
echo 任务完成!
exit