-- 在正式备份之前,一定按如下要求去做。
-- 版权声明如下:
-- 读者可以任意拷贝、修改该备份脚本的内容,但不可以篡改作者。
-- 作者: 徐玉金
各文件的作用:
backup目录下:
1.rman_db_all.bat :
备份整个oracle数据库,该文件会先后调用rman_db.sh,scp_rman_db_files.sh文件
2.rman_db.bat:
由rman_db_all.sh文件调用,实现用rman备份数据库.
该脚本会首先根据环境变量的设置:
a.生成一个rman脚本文件(rman_arch_cr_g.rman), 去检查归档日志的情况
b.生成一个rman脚本文件(rman_db_backup_g.rman), 备份整个数据库
3.scp_rman_db_files.bat:
由rman_db_all.bat文件调用,将用rman备份出的数据文件拷贝到另外一个机器上,用scp拷贝
4.OS_bak_arch_all.bat:
用操作系统拷贝方法只备份归档日志文件,该文件会先后调用OS_bak_arch.bat,scp_rman_arch_files.bat文件
5.OS_bak_arch.bat:
由OS_bak_arch_all.bat文件调用,实现将新产生的归档日志拷贝到指定的目录.
6.scp_rman_arch_files.bat:
由OS_bak_arch.sh文件调用,将第5步的指定目录的归档日志用scp拷贝到另外一台机器上。
conf目录下:
备份时用到的各个sql文件
1. add_temp_files.sql: 生成将所有的临时文件加到临时表空间sql语句
2. archive_arch.sql 手工归档
3. db_profile.sql: 生成当前数据库的基本描述,如有几个数据文件, 临时文件等
4. startup_nomount.sql: 启动数据库到nomount状态
5. startup_resetlogs.sql: 用resetlogs 选项打开数据库
6. test_conn.sql: 测试数据库是否正在运行
环境描述:
只要有两台windows机器, 一台装有oracle 92数据库, 另一台设置一个共享目录, 由数据库服务器可以访问得到就可。
也可以多台数据库服务器,而只有一台备份服务器
我的测试环境:
2台window xp。
具体设置方法:
1.设置数据库服务器,使之建立一个映射驱动器,映射到远程备份服务器的一个共享目录
2.将数据库设置为归档模式, 设置好归档目录与归档日志文件名的命名规则
3.以sysdba身份登陆数据库,运行readme目录下的pro_gen_add_files_to_temp_ts.sql文件该文件中的存储过程是备份所需要的。
4.在映射驱动器上创建相应的备份目录, 为 BS_BAKUP_BASE 环境变量指定的值
5.在数据库服务器上创建相应的目录, 为 DBS_BACKUP_BASE, DBS_SCRIPT_DIC 环境变量指定的值
6.修改set_env.bat.bat文件中的相应环境变量的值,使之反应实际情况,需要注意的变量为:
ORACLE_BASE, ORACLE_HOME, ORACLE_SID, NLS_LANG, ARCH_DEST1, ARCH_DEST2, DBS_BACKUP_BASE, DBS_SCRIPT_DIC
DBS_IP, BS_IP,BS_BAKUP_BASE 具体参数说明参见set_env.bat.bat文件
7.修改各个文件中set_env.bat的路径为其正确的路径(切记,否则备份不能进行)
8.如果归档目录个数超过一个,适当的修改脚本(需要增加内容)
9.将所有脚本拷贝到数据库服务器的DBS_SCRIPT_DIC目录下(需要先解压附件)
10.将rman_db_all.bat文件加到windows任务中,每天运行一次。rman_arch_all.bat也加到windows任务中,每30分钟运行一次
11.在oracle9i以上版本如果设置了archive_lag_target参数, 使数据库每半小时归档一次m
则可以修改OS_bak_arch.bat文件,将手工归档部分注释掉,但是rman_arch_all.bat文件还要加到windows任务中,每30分钟运行一次,
这样可以保证在整个系统硬盘都崩溃的情况的,只损失半小时的修改记录
备注:
1.在oracle9i + windos xp professional下测试通过
2.该脚本只是假设当前用了一个归档目录ARCH_DEST1,如果由第二个归档目录修改脚本使之使用ARCH_DEST2、DBS_BAK_ARCH_DIC2变量,
如果有第三个归档目录,则增加变量ARCH_DEST3,并修改相应的脚本。
3. 本来想映射一个驱动器到远程机器,当rman备份时,直接备份到这个映射驱动器上, 但rman不支持这种方式
4.如果rman_db.log中有报错信息,最后部分信息如下:
sql statement: ALTER SYSTEM ARCHIVE LOG CURRENT
Starting backup at 27-DEC-04
released channel: node1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 12/27/2004 11:09:09
RMAN-20242: specification does not match any archive log in the recovery catalog
Recovery Manager complete.
则这说明数据库中记录的归档日志的目录、文件名与你设置的归档日志的目录、文件名不一致。
1) 找到正确的归档日志的目录、文件名。
sqlplus > select name from v$archived_log;
根据上面查询出的值,修改ARCH_DEST1目录与ARCH_DEST2目录
2) 设置正确的log_archive_format参数,保证其值为arc%t_%s.dbf
否则设置log_archive_format初始化参数或修改rman_db.bat中archivelog like的%SPEC_CHAR%.dbf部分,使两者一致
例:我得机器中:运行select name from v$archived_log;得到:
D:\ORACLE\ADMIN\XYJ\ARCH\ARC1_32.DBF
则我设置ARCH_DEST1D:\ORACLE\ADMIN\XYJ\ARCH 。archivelog like部分为%SPEC_CHAR%.DBF
5.可以将执行的过程保存到一个文件中: temp.bat >>c:\temp.log 2>&1