Oracle本身的备份策略很多,这里只说说简单的exp命令备份在双机互为主备的方案中shell怎么做。
由于互为主备,平时AB机各自运行自己的实例,当然发生故障后有双机软件去实现自动切换。这样就导致了存储上挂接的同一个lum并不会同时出现两台主机上。那么传统的exp备份脚本就无法正常运行。比如常用的exp的shell脚本如下:
- ORACLE_BASE=/export/home/oracle
- export ORACLE_BASE
- ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
- export ORACLE_HOME
- ORACLE_SID=test
- export ORACLE_SID
- LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/openwin/lib
- export LD_LIBRARY_PATH
- NLS_LANG="simplified chinese"_china.zhs16gbk
- export NLS_LANG
- ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
- export ORA_NLS33
- PATH=$PATH:/opt/SUNWspro/bin:/usr/sbin:/opt/bin:$ORACLE_HOME/bin:/usr/ccs/bin
- export PATH
- DATE=`date +%Y%m%d`
- cd /databak
- exp userid=’test/test’@test compress=n file=test${DATE}.dmp log=test${DATE}.log
- gzip test${DATE}.dmp
如果套用到互为备份的双机中,就有问题,这个shell到底放在A机还是B机呢?还是两台都放?
如果放在其中一台服务器上,假设放在A机上。A机出问题(网络故障或者系统故障),数据库B机自动接管了(这时存储上的lum都会挂接到B机)。A机脚本就无法工作。
如果A、B机都放,依然是问题。存储上的lum是无法同时挂接到两台服务器的。
因此,那就应该考虑,从判断监听是否启动或者判断数据库是否启动入手,通过shell生成一个flag文件,然后去判断这个flag文件大小。修改后的shell如下:
- ORACLE_BASE=/export/home/oracle
- export ORACLE_BASE
- ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
- export ORACLE_HOME
- ORACLE_SID=test
- export ORACLE_SID
- LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/openwin/lib
- export LD_LIBRARY_PATH
- NLS_LANG="simplified chinese"_china.zhs16gbk
- export NLS_LANG
- ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
- export ORA_NLS33
- PATH=$PATH:/opt/SUNWspro/bin:/usr/sbin:/opt/bin:$ORACLE_HOME/bin:/usr/ccs/bin
- export PATH
- DATE=`date +%Y%m%d`
- #这里是AB机种本地磁盘的目录
- cd /test/test_sh/
- rm -f lsnr.test
- ps -ef | grep "/export/home/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER_test" | grep -v grep > lsnr.test
- if [ -s lsnr.test ]
- then
- #这里是存储上的目录
- cd /test/Backup
- exp userid=’test/test’@test compress=n file=test${DATE}.dmp log=test${DATE}.log
- gzip test${DATE}.dmp
- else
- echo(当然这里还可以和邮件结合起来,让每次备份什么的dba心中有数)
- fi
最后,在AB机都放上这个脚本。在crontab中写好执行时间,也不会因为其中一台服务器down掉导致备份无法正常执行。
可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本。
本文作者:罗兰小筑 本文url:
阅读(2725) | 评论(0) | 转发(0) |