Oracle自动异地远程数据备份研究

ZDNet软件频道 时间:2008-08-27 作者: |  我要评论()
本文关键词:备份研究 远程数据 Oracle Oracle
如何保障核心数据的安全就显得尤为重要,相信很多单位均已实现了本地的磁盘与磁带的双备份,很好的保障了对核心数据的安全管理。
当前随着行业改革的不断深入,数据逐步向地市公司集中,业务经营、政务管理对于信息系统和核心数据的依赖程度也越来越高,如何保障核心数据的安全就显得尤为重要,相信很多单位均已实现了本地的磁盘与磁带的双备份,很好的保障了对核心数据的安全管理。

  但本地备份一般将数据保留在机房内,当本地机房整体物理环境遭到破坏,如发生火灾地震等意外事件时,数据有可能也会损伤。美国“911”事件让许多公司的商务资料在瞬间毁于一旦足以证明远程数据备份的重要性,但是建立一个完备的支持实时数据恢复功能的远程备份系统的投入是非常昂贵的。本文结合工作实际,充分利用县公司机房中现有的存储条件,借助Oracle自动备份和ftp自动传输技术,实现了核心Oracle数据库的自动远程异地备份,当本地机房物理环境遭到破坏时,能最大限度的保护好我们的数据。

  一、设计思路

  当前支撑绍兴烟草营销、呼叫、专卖、财务、OA等核心系统运行的主要是TradeCtr、QueryCtr、JTCW、OA四个Oracle数据库,运行在两台HP8420小型机上,每个数据库的备份大约为30G左右,考虑到今后两年内的数据增长可能会达到50-60G左右。绍兴烟草下属四个县公司,每个公司均具备充分的存储空间,网络实际可利用带宽均为6Mbit/s左右,完成一个备份文件的数据传输大约需要10-20个小时,考虑到网络带宽、传输时间及工作时间对业务经营的影响,我们将数据备份及远程传输放在星期六进行,每个单位对应一个数据库进行远程备份,备份周期为每周一次,每周六下午开始。备份中主要用到数据库导出、ftp自动传输、HP UNIX 定时作业等技术,下面以财务数据库JTCW为例来说明具体实现方式。

  二、导出数据库

  export命令将数据库中的数据备份成一个二进制文件,它通常有三种模式:用户模式、表模式和整个数据库模式。本文拟采用用户模式,备份之前,应先建立一个备份目录,以在本机容纳备份文件,比如可建一个/localbak目录。我们将JTCW数据库在用户模式下备份,备份保留周期为一天,具体脚本如下,保留在exp_JTCW.sh文件中:

  export EXP_HOME=/localbak  #设置环境变量EXP_HOME

  export Oracle_SID=JTCW#设置环境变量Oracle_SID

  exp system/password owner=hsa6 file=$EXP_HOME/JTCW$(LC_ALL=C date +%y%m%d).dmp log=$EXP_HOME/JTCW$(LC_ALL=C date +%y%m%d).log statistics=none#备份数据以日期方式命名

  find /oradata/cwdata/backup -type f -mtime 3 -exec rm {} ;#保留周期为三天

  三、自动数据传输

  我们知道,通常可用FTP命令在两台主机间传输数据,但一般是通过交互方式实现的,即需要手工输入目标主机的IP地址、用户名、口令等。显然,这不符合自动备份的要求。所幸的是,在HP UNIX平台下我们可以通过编写一个.netrc的文件来达到目标。这一文件必须命名为.netrc,且必须存放在启动FTP命令的机器上的用户注册目录中,该文件的权限应禁止组内或其它用户进行读访问。这样,当用户使用FTP命令的时候,系统将会在该用户的注册目录中寻找.netrc文件,如果能够寻找到,将会首先执行该文件,否则,会交互式地提示用户输入用户名、口令等。

  在使用FTP命令之前,应先在对应县公司一台作备份用的机器上开启ftp服务并建立上传文件目录,以容纳备份文件,本文建立的目录是/remotebak。为了加快备份速度,.netrc文件内容如下:

  machine host2  # host2为作备份用的主机名

  login ftpuser  # ftpuser为远程备份主机上的一个用户

  password ftpuser  # ftpuser用户的口令为ftpuser

  macdef init  #定义一个名为init的宏,它将在自动注册进程的最后被执行

  bin  #文件的传输方式设为二进制

  lcd /localbak  #进入本地工作目录/localbak

  cd /remotebak  #进入远程备份主机目录/remotebak

  mput *# 将/localbak目录下的所有文件传输至备份主机

  bye #退出FTP会话进程

  .netrc文件编写完成后,使用下述命令:

  chmod 600 .netrc

  这样,.netrc文件就只能被该用户所访问

  四、启动备份进程

  HP UNIX平台下,Cron是一个永久进程,它由/etc/rc.local启动执行。Cron检查/var/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:所要运行的命令

  如果一个域是空,表明命令可以在该域所有可能的取值范围内执行。

  如果一个域是由连字符隔开的两个数字,表明命令可以在两个数字之间的范围内执行(包括两个数字本身)。

  如果一个域是由逗号隔开的一系列值组成的,表明命令可以在这些值组成的范围内执行。 如果日期域和星期域都有值,则这两个域都有效。

  现在,我们编写一个文件,用以启动自动备份进程。值得注意的是,该文件只能在Oracle用户名下用crontab -e 命令来编辑,否则将不会被定时执行,文件名定为Oracle,文件将放在/var/spool/cron/crontabs 目录下。编辑完成后,可以在Oracle的$提示符下,用crontab -l命令来查看。

  cron表中的内容如下:

  00 08 * * 6 /Oracle/product/9.2.0.4/DBA/script/exp_JTCW.sh

  # 每周六上午8点对数据库执行备份

  00 14 * * 6 ftp -i host2

  # 每周六下午2点启动远程传输,将文件备份到另一台主机上

  经过以上的操作后,系统每周六8:00开始产生一个本地备份,并在周六下午2:00启动远程传输,自动将备份文件分别拷贝到对应县公司的远程主机上。其余三个数据库的配置也类似,从而实现了核心数据库的自动远程异地备份,系统管理员需要做的工作是定期清理远程备份主机的备份目录。该系统在浙江绍兴烟草分公司运行近8个月,目前系统整体状况良好,极大提高了绍兴烟草的数据安全性,其实用性、稳定性、安全性得到充分的验证。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134