• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

[转帖]关于Informix数据库灵活备份的探讨

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 21次 | 进入软件测试论坛讨论

领测软件测试网
关于Informix数据库灵活备份的探讨
中国人民保险公司河北省分公司 邓博学 张 颖 王俊丽

--------------------------------------------------------------------------------
 
 
 
随着保险业务的不断规范化,中国人民保险公司系统的业务正在向全面计算机处理发展,业务、财务等数据有向地市级分公司和省公司集中的趋势,这虽然大大减少了程序和数据的维护量,增强了数据的可利用性,但同时也对数据的安全备份工作提出了更高的要求。每个计算机系统管理员都十分清楚数据备份工作具有时间性强、安全性要求高、责任重大和备份过程繁琐等特点,一旦疏忽,遇有计算机系统出现故障,数据遭到破坏或丢失,将会出现灾难性的后果,给工作造成不应有的重大损失。为此,结合实际工作,笔者对Informix数据库安全及灵活备份工作进行了深入探讨,总结了如下几种备份方式,经过多年实践证明,这样做可使数据万无一失,对确保各项业务的正常进行具有良好的实用性,同时,因其具有灵活性强、安全性高的特点,也大大减轻了计算机系统管理员的工作量。
    一、定期做数据库的零级备份
       数据库零级备份是重要的备份手段,日常一般用磁带备份,经常用于做重大操作之前的备份,其操作命令很简单,就是用Informix数据库系统所给的命令 ontape -s 根据提示一步一步去做。零级备份的恢复用 ontape -r 交互操作来完成,这里不再赘述。由于磁带机设备速度比较慢,对于大数据量来说不论是备份还是恢复花费的时间较长,因此,可采用在硬盘上做零级备份的办法。具体操作如下:
    (1)在硬盘上划一个足够大的空间,用于备份文件的存放。
      (2)用onmonitor或用vi 将参数TAPEDEV指向零级备份文件。
      如把参数改为TAPEDEV=/data/databk,意思就是/data目录下的databk文件作为数据的存放空间,同样,逻辑日志参数也可修改如下,LTAPEDEV=/data/logbk,这样可做硬盘零级备份和逻辑日志备份,备份和恢复时间比磁带机缩短很多。
       零级备份的缺点是对同一个数据空间的数据库不能单独备份,而且备份完毕的介质无法直观显示,给人一种不踏实的感觉。另外,一个数据库发生故障时,其他的也要被一起恢复,造成不必要的麻烦,为此笔者建议结合使用下面的备份方法。
  二、数据库的自动备份
      我们计划让数据库在凌晨3时做dbexport导出备份,将备份文件传送到另一台UNIX机器上,同时也可以将备份文件拷贝到磁带上,为此可以在机器自启动文件中加入idleout 120 命令,由于dbexport命令在有用户打开数据库时无法操作,这样就可保证在凌晨3点以前自动杀死所有忘记关闭的用户进程。
      1.导出数据库
  (1)先建立一个数据备份用的用户,如databk。再建立如下三个文件:1motorbk用于备份频繁变动的数据库;2fbbk用于备份每季度才变动一次的再保险数据库;3tapebk将备份文件写向磁带的文件。
  (2)设定.profile工作环境。一定要注意DBDATE的格式,保证其与数据库中的日期格式完全一致。
  (3)将所有需要备份的数据库赋予用户databk DBA权限,方法为所在用户登录执行命令 grant dba to databk。
    (4)在用dbexport命令将数据库中的数据备份成一个文本文件之前,应先建立一个备份目录,以容纳备份文件,比如可建一个以年月日命名的备份目录。
  YYMMDD=“date‘+20%y%m%d’”
  mkdir $YYMMDD
  (5)用dbexport命令将每天所有需要备份的数据库中的数据卸出,由于机动车和统计台帐的数据库日期格式与会计记帐的不同,所以他们应更改日期格式变量后再卸出。全部卸出后用tar命令打包成一个文件并传送到机器名为hp的机器中。motorbk文件内容如下:
  INFORMIXDIR=/u/informix
  PATH=.:$PATH:$INFORMIXDIR/bin
  DBDATE=y4md.
  LANG=englishus.8859
  TERM=vt100
  INFORMIXSERVER=onlinea
  export LANG INFORMIXDIR PATH DBDATE INFORMIXSERVER TERM
  rm *.tar
  YYMMDD=“date‘+20%y%m%d’”
  mkdir $YYMMDD
  dbexport acntdbs -o $YYMMDD
  dbexport cashdbs -o $YYMMDD
  dbexport jsacdbs -o $YYMMDD
   .
   .
  DBDATE=MDY4
  export DBDATE
  dbexport motor -o $YYMMDD
  dbexport tj2000 -o $YYMMDD
  dbexport jstj -o $YYMMDD
   .
   .
  FILENAME=$YYMMDD.tar
  tar cvf $FILENAME $YYMMDD
  ftp hp
  由于再保险业务每季度才使用一次,故为其单独建立一个备份文件,让它只有在每季度应用的几天内执行,以节省空间。fbbk文件内容如下:
  INFORMIXDIR=/u/informix
  PATH=.:$PATH:$INFORMIXDIR/bin
  DBDATE=y4md.
  LANG=englishus.8859
  TERM=vt100
  INFORMIXSERVER=onlinea
  export LANG INFORMIXDIR PATH DBDATE INFORMIXSERVER TERM
  YYMMDD=“date‘+20%y%m%d’”fb
  mkdir $YYMMDD
  dbexport fb2000 -o $YYMMDD
  dbexport fb96js -o $YYMMDD
  dbexport fb962 -o $YYMMDD
  FILENAME=$YYMMDD.tar
  tar cvf $FILENAME $YYMMDD
  ftp hp
  2.磁带备份
  tapebk文件内容如下:
  tar rvf /dev/nrct0 /u/databk/$ FILENAME,把dbexport命令导出的数据文件拷贝到磁带上。
  本命令可将 $HOME/$YYMMDD目录下当天产生的文件备份到磁带上。本文件中,tar命令使用了三个参数,其中r选项表示向磁带上拷入文件而不破坏磁带原来内容,v选项表示在拷贝过程中显示文件信息,f选项后面加上磁带设备名,指定文件向何处拷贝,n选项表示磁带机不倒带。
  3.异地备份
  通常我们用FTP命令通过交互方式在两台主机间传输数据,即需要手工输入目标主机的IP地址、用户名、口令等,这显然不符合自动备份的要求。这时,可以通过编写一个.netrc文件来达到目标,这一文件必须命名为.netrc,且必须存放在启动FTP命令的机器上的用户注册目录中,该文件的权限应禁止组内或其他用户进行读访问。这样,当用户使用FTP命令的时候,系统将会在该用户的注册目录中寻找.netrc文件,如果能够寻找到,将会首先执行该文件,否则,会交互式地提示用户输入用户名、口令等。
  在使用FTP命令之前,应先在另一台作备份用的UNIX机器上建一目录,以容纳备份文件,本文建的目录是/u/data 。需要指出的是,为了加快备份速度,最好位于局域网上。但为了增加安全系数也可以每季度或半年向省公司传送一次。
  .netrc文件内容如下:
  machine hp login data password 33aa
  macdef init
  prom
  mput *.tar
  bye
  machine hp  
  # hp为作备份用的主机名
  login data  
  #data为备份主机上的一个用户
  password 33aa  
  #data用户的口令为33aa
  macdef init    
  #定义一个名为init的宏,它将在自动注册进程的最后被执行
  prompt
  # 关闭交互提示
  .netrc文件编写完成后,使用下述命令:
  chmod 600 .netrc
  这样.netrc文件就只能被该用户所访问。
  4.启动备份进程
  cron是一个永久进程,cron检查/usr/spool/cron/crontabs/目录中的文件,找到所要执行的任务和执行任务的时间。
  crontab文件的每一行由六个域(minutes、hours、day of month、month、day of week、 command)组成,域之间用空格或Tab分开,其中:
  minutes:分钟域,值的范围是0到59
  hours:小时域,值的范围是0到23
  day of month:日期,值的范围是1到31
  month:月份,值的范围是1到12
  day of week:星期,值的范围是0到6,星期日值为0
  command:所要运行的命令
  如果一个域是*,表明命令可以在该域所有可能的取值范围内执行。
  如果一个域是由连字符隔开的两个数字,表明命令可以在两个数字之间的范围内执行(包括两个数字本身)。
  如果一个域是由逗号隔开的一系列值组成的,表明命令可以在这些值组成的范围内执行。
  如果日期域和星期域都有值,则这两个域都有效。
  现在,我们编写一个文件,用以启动自动备份进程。值得注意的是,该文件只能在databk用户名下用crontab -e 命令来编辑,否则将不会被定时执行,文件名为databk,文件将放在/usr/spool/cron/crontabs 目录下。编辑完成后,可以在databk的$提示符下,用crontab -l命令来查看。
  
  0 03 * * 2-6 /u/databk/motorbk
  0 04 1-8 3,6,9,12 2-6 /u/databk/fbbk
  0 05 * * 6 /u/databk/tapebk
  databk文件内容:
  0 03 * * 2-6 /u/databk/motorbk(星期二凌晨3时的备份实际上是备份的星期一的数据,余下类推)
  # 每星期二至六3时对所有数据库执行备份并传送到hp机器中。
  0 04 1-8 3,6,9,12 2-6 /u/databk/fbbk
  # 逢3、6、9月的1日至此月8日每星期二至六4时对再保险数据库备份并传送到hp机器中。
  0 05 * * 6 /u/databk/tapebk
  # 每星期六5时将文件备份到磁带上。
  经过以上的操作后,系统将按照所定的时间自动产生一个备份,并且自动将备份文件分别拷贝到磁带上和另一台主机上。这样,系统管理员就可以从备份数据的繁琐中解脱出来,而数据库既实现了磁带备份,又实现了异地备份,数据安全性得到了大大提高。

 


 jysww 回复于:2002-11-14 22:53:48
我收藏^_^

 wkl 回复于:2002-11-14 22:54:07
相当不错!

 jysww 回复于:2002-11-14 22:57:40
没错!!!

 mzd73 回复于:2002-11-15 22:37:11
顶!

 foxwu789 回复于:2002-11-23 23:23:55
go on to try

 chenjiakai 回复于:2002-11-24 18:41:18
这种办法对付小数据量还行,超过50G的数据量好像就忙不过来了。

 zyr2288 回复于:2003-03-16 12:33:15
不错,我的方法与此类似。

 muzx 回复于:2003-03-16 13:51:48
[quote:e94bc22ae5="chenjiakai"]这种办法对付小数据量还行,超过50G的数据量好像就忙不过来了。[/quote:e94bc22ae5]
这么大的数据,该用数据仓库了吧?

 sd-feng 回复于:2003-03-16 16:52:17
顶好

 zyr2288 回复于:2003-03-16 17:19:50
这个方案中有一个小缺陷,对中大型系统,这种方法每天都产生大量数据(我这里每天500M),就算100G的硬盘又能放多少数据?如果恰好硬盘被塞满,则当天的数据必定备不下来。
    我的自动备份程序中的部分代码大家一定用得着:

#文件名: killdir
#功  能: 自动保留备份目录下最近指定天数的数据,超过最大保留天数的数据则删除。
if [ $# -lt 3 ]
  then echo "格式:killdir 备份目录名 数据库名 保留天数"
  else
BKDIR=$1
DBNAME=$2
MAXDAY=$3
ls $BKDIR/*$DBNAME.jz.tar|sort > tmp_dir
N=`cat tmp_dir | wc -l`
if test $N -gt $MAXDAY
   then M=`expr $N - $MAXDAY`
echo "$M,$N d\nw\nq\n" |ed -s tmp_dir
sed "s/^/rm /" tmp_dir > tmp_dir.sh
sh tmp_dir.sh
rm tmp_dir*
fi
fi

 阿联 回复于:2003-03-18 21:52:06
都是说的没有的东西,还不如用双机热备份呢?

 hchzh_tel 回复于:2003-07-15 09:59:29
informix的双机热备也常dump,当你的数据库访问量大到一定程度时,莫名其妙的当机就会经常出现。 对于要求较高的informix系统,比如搂主是人保的,河北的数据量不知如何,但有不少公司对informix的莫名当机是怕了。所以他们用informix cdr做数据复制,这样的话,只有先断开informix cdr才能够做dbexport,就我个人观点,彻底数据复制+每天的数据表导出要更稳定可行。dbexport只能是有计划的隔较长时间做一次

 oklemon 回复于:2003-08-27 22:10:41
我是中国人民财产保险股份有限公司河南分公司的,人保用的系统全国都一样!

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网