每个数据库实例都有其自己的联机重作日志组,在操作数据库时,Oracle首先将数据库的全部改变保存在重作日志缓冲区中,随后日志记录器进程(LGWR)将数据从系统共用区SGA(System Global Area)的重作日志缓冲区写入联机重作日志文件,在磁盘崩溃或实例失败时,可以通过与之相关的联机重作日志来保护数据库,将损失降至最低,但Oracle在默认的方式下只创建一组重作日志文件(每一组只有一个项目文件),为了减少丢失这些重要的重作日志文件的危险,因此需要对其进行镜像拷贝。
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; 打开数据库 结束语