备份策略
考虑到如今大部分信息系统每周的业务是24×7操作,因此采用联机备份,否则可每隔一定时间进行一次脱机备份。
应用上述规则,可得出下述典型的备份策略:
①镜像拷贝重作日志文件;
②镜像拷贝控制文件;
③激活归档进程,即以ARCHIVELOG模式操作数据库;
④每天进行数据库的部分联机备份(每天进行数据库的完全热备份将无畏地增加数据库的负担且没有必要,同时也增加了数据库恢复时的灵活性);
⑤每隔一周或几周进行一次数据库的逻辑备份。
实际项目应用
当数据库中的文件达到一定数量后,DBA可能记不住该备份的文件的名或位置,因此,若能使备份过程自动化可有效地减轻DBA的负担,同时不会遗漏应备份的文件,应用自动批处理文件及脚本文件可实现备份、恢复的自动化。下面简介了在实际项目开发中应用本文所提出的自动备份、恢复策略,通过实际应用,证明了该策略的正确性和可行性。
(1)下述脚本实现联机重作日志的多工:
connect 账户名/密码
alter database ktgis add logfile member 日志文件的存储位置 to group 联机日志组号;
shutdown immediate
startup pfile=初始化文件的存放位置 exclusive mount; 装载数据库且不打开
alter database archivelog; 激活归档进程
alter database open;
exit
(2)下列VB代码自动建立联机备份的批处理文件及相应的脚本文件。
Set adoTmp = objConnect.Execute("select tablespace_name from sys.dba_data_files") '得到数据库中的表空间名';
Dim lnum1 As Long
Dim lnum2 As Long
lNum = FreeFile
Open 自动备份批处理文件路径 For Binary As lNum
lnum1 = FreeFile
Open "onlinebegin.sql" For Binary As lnum2 onlinebegin.sql为设置表空间进入热备份模式的脚本文件文件名
lnum2 = FreeFile
Open "onlineend.sql" For Binary As lnum2 onlinebegin.sql为结束表空间热备份模式的脚本文件文件名
strTmp = " connect 账户名/密码" & Chr(13) & Chr(10)
Put lnum1, , strTmp
strTmp = "shutdown immediate" & Chr(13) & Chr(10)
Put lnum1, , strTmp
strTmp = "startup pfile=初始化文件的存放位置exclusive mount; " & Chr(13) & Chr(10)
Put lnum1, , strTmp
strTmp = "alter database archivelog; " & Chr(13) & Chr(10)
Put lnum1, , strTmp
strTmp = "alter database open; " & Chr(13) & Chr(10)
Put lnum1, , strTmp
strTmp = " connect 账户名/密码" & Chr(13) & Chr(10)
Put lnum2, , strTmp
strTmp = Oracle服务管理器路径 & " @" & " onlinebegin.sql " & Chr(13) & Chr(10) 在服务管理器中执行脚本文件onlinebegin.sql
Put lNum, , strTmp
Do While Not adoTmp.EOF
Set adoTmp1 = objConnect.Execute("select file_name from sys.dba_data_files where tablespace_name='" & adoTmp.Fields(0) & "'") 得到当前表空间所对应的所有数据文件名,通过循环即可得到所有表空间所对应数据文件名,若只备份指定的表空间,可指定表空间名从而得到其对应的物理数据文件
strTmp = "alter tablespace " & adoTmp.Fields(0) & " begin backup;" & Chr(13) & Chr(10) 将表空间置于热备份模式
Put lnum1, , strTmp
strTmp = Oracle的ocopy.exe工具全路径 " & adoTmp1.Fields(0) & " " & 备份文件存放路径 & Chr(13) & Chr(10)
Put lNum, , strTmp
strTmp = "alter tablespace " & adoTmp.Fields(0) & " end backup;" & Chr(13) & Chr(10) 表空间恢复正常模式
Put lnum2, , strTmp
adoTmp.MoveNext
Loop
strTmp = Oracle服务管理器路径 & " @" & " onlineend.sql" & Chr(13) & Chr(10) 在服务管理器中执行脚本文件onlineend.sql
Put lNum, , strTmp
strTmp = "exit" & Chr(13) & Chr(10) 退出服务管理器
Put lnum1, , strTmp
strTmp = "alter system switch logfile;" & Chr(13) & Chr(10) 强制日志转换,使Oracle创建一个归档日志文件
Put lnum2, , strTmp
strTmp = "exit" & Chr(13) & Chr(10)
Put lnum2, , strTmp
Close
Set adoTmp = Nothing
Set adoTmp1 = Nothing
运行得到的自动批处理文件,即可自动进行数据库的联机备份。
(3)在从备份中恢复数据文件后,执行下列脚本将数据库的恢复程序。
connect账户名/密码
shutdown abort
startup mount pfile=初始化文件的存放位置; 装载数据库
set autorecovery on; 打开自动恢复
recover database;
alter database open; 打开数据库
结束语
提高数据库灾难后恢复的可靠性正越来越多地受到人们的关注,本文根据个人在实际项目开发过程中的经验及恢复时的灵活性对Oracle数据库的备份及恢复进行了探讨,并提出了典型的备份策略,用户可以根据自己的实际情况及数据库结构在此基础上灵活应用。