对于数据库而言,数据的完整与安全是十分重要的。定期备份数据库以备在数据库发生故障的时候能够及时恢复减少损失。当然数据库备份的执行时间以其使用的低峰期为宜,这个时间通常很难有管理员值守。为了节省人力物力,同时确保数据库安全,要实现数据库的定时自动备份。注意,此处指的是远程(异地)备份,存储数据库备份文件的客户端计算机为Windows系统,利用.dmp文件导出,数据库服务器与客户端在同一局域网段内。
工具/原料
软件:Oracle database 11g express edition
软件:PL/SQL Developer
确保数据库配置正确
1、首先确保计算机中已经安装正确的数据库软件版本(一些精简版Oracle客户端中没有exp导出和imp导入的可执行文件,无法执行导入导出数据库的操作,可以安装Oracle database 11g express edition)。Oracle官方的下载地址是:http://www.oracle.com/technetwork/cn/products/express-edition/downloads/index.html
2、依次按向导安装Oracle database 11g express edition,此处不再赘述安装步骤。
3、我们使用的是其“数据库即时客户端”Instant Client作为客户端,在X:\(数据库安装目录)\network\admin目录下建立(如果有则修改)tnsnames.ora文件,在tnsnames.ora中输入以下内容:【Oracle11g 以下版本数据库】orcl = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.1)(PORT = 1521))#←注意此处填写数据库的主机地址 ) (CONNECT_DATA = (SID = ORCL) (SERVER = DEDICATED) ) ) #←注意此处填写数据库的SID【Oracle11g 版本数据库】ORCL9.1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.14.9.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )
4、检查一下PLSQL Developer菜单中的“工具”-“首选项…”-“Oracle”-“连接”,如果“Oracle主目录名(自动检测为空)”已经填入“X:\(数据库安装目录)\”,“OCI库(自动检测为空)”已经填入“X:\(数据库安装目录)\oci.dll”。你就可以使用PLSQL Developer访问这个数据库了。尝试用PL/SQL Developer登录这个数据库,如果可以正常登录则可以进行下一步操作,否则请检查配置是否有误。
为定时备份数据库的功能编写脚本
1、定时备份数据库所导出的.dmp文件名以按照时间自动命名的规则为宜。自动备份的数据库.dmp文件会随着时间推移而越来越多,在脚本中添加删除过期文件的语句可避免这一问题。
2、在为.dmp文件命名时要特别注意,在windows7以上的操作系统版本中(以中文系统为例),时间显示的格式为:2014/11/10 周一,由于有斜线的存在,导致文件无法命名致使备份失败。Windows xp系统中,时间格式为”2014-11-10”。
3、为避免文件名格式错误所导致的备份失败,文件名中的日期应截取其中的数字部分,忽略斜线,按照图中格式输出。依此格式输出的时间为:20141110 。
4、创建一个.bat格式的命令行批处理文件。注意文件路径是否正确。批处理脚本如下:@echo off ::备份数据库文件到本地 (文件路径要事先创建好。)exp ocsdbuser/ocsdbuser@orcl file=D:\dbbak\oracle%date:~0,4%%date:~5,2%%date:~8,2%.dmp log=D:\dbbak\oracle%date:~0,4%%date:~5,2%%date:~8,2%.log::在此目录下删除最后修改日期在10天前的文件(此处天数d -10可自行修改)forfiles /p "d:\dbbak" /d -10 /c "cmd /c echo deleting @file ... && del /f @path"可先将以上指令执行一次,测试是否能够成功执行,如果执行成功则可以将其通过定时计划任务自动定时执行。
5、以下材料作为参考:.dmp文件导出使用示例1 将数据库SampleDB完全导出,用户名system 密码manager 导出到E:/SampleDB.dmp中 exp system/manager@TestDB file=E:/sampleDB.dmp full=y此时数据库中所有的表、视图、存储过程等全部导出并保存。2 将数据库中system用户与sys用户的表导出 exp system/manager@TestDB file=E:/sampleDB.dmp owner=(system,sys)3 将数据库中的表 TableA,TableB 导出 exp system/manager@TestDB file=E:/sampleDB.dmp tables=(TableA,TableB)4 将数据库中的表tableA中的字段filed1 值为 "王五" 的数据导出 exp system/manager@TestDB file=E:/sampleDB.dmp tables=(tableA) query=' where filed1='王五'
为脚本设置定时任务
1、本机中打开控制面板→管理工具→计划任务程序,菜单中选择操作→创建任务;为了保证计算机在操作者长时间离开状态亦能备份数据库,可选择“不管用户是否登录都要运行”选项。
2、选择“触发器”选项卡,新建触发器,以从11月10日起每周一20点整备份数据库为例,一次设置开始任务的条件(按预定计划)、设置每周一次、设置开始时间和开始日期。高级设置中可根据实际情况按需设置,点击确定以保存触发器。如果计划每天备份数据库一次,则可以选“每天”。
3、选择“操作”选项卡,新建所需操作。选择 启动程序,打开之前创建的.bat批处理文件,点击确定以保存操作。
4、其他选项卡中的配置选项可以按需配置。点击确定以保存。
5、输入账户信息以确认。此时可以等待计划任务即定时间到后,查看是否正确按时备份了数据库。