Oracle数据库异地⾃动备份⽅法
在⼤型商业应⽤中,数据的异地容灾备份⼗分重要,也必不可少。笔者根据⾃⼰的实践经验,设计了⼀套简洁地实现异地数据⾃动备份的⽅法,可供数据库管理⼈员参考。⽂中所有的程序都经过测试,运⾏良好。这⾥模拟的异地运⾏环境为⼀主⼀备两套Sun Solaris系统,所采⽤的备份⽅法为Oracle数据库提供的标准备份:export。
相关命令
⽂中主要⽤到三个命令,这⾥先单独介绍⼀下:
export: 将数据库中数据备份成⼀个⼆进制系统⽂件,它有三种模式: ⽤户模式、表模式、整个数据库模式。还可分为三种备份类型:完全型、积累型、增量型。本⽂以整个数据库模式下的完全型为例说明。export使⽤格式为:exp userid file
其中:userid的⽤法为username/userpassword,即Oracle中的⽤户名/⼝令。userid必须为exp的第⼀个参数,file指备份⽂件所放位置及名称。
ftp: ⼀般情况下可通过交互⽅式实现两台主机间的数据传输,即需要⼿⼯输⼊⽬标主机的IP地址、⽤户名、⼝令等。但是当⽤户使⽤ftp命令时,系统将会先在该⽤户的注册⽬录中寻rc⽂件,并⾸先执⾏
该⽂件。这样,我们可以通过编写⼀个rc的⽂件来达到⾃动备份的⽬的。要注意该⽂件必须命名为rc,且必须存放在启动ftp命令主机上的⽤户注册⽬录⾥。ftp常⽤选项:
-i:进⾏多⽂件传送时关闭交互提⽰;
-n:在连接之后不进⾏⾃动登录。
本⽂使⽤“-i”选项,以关闭交互提⽰。
crontab: cron是⼀个永久进程,它由/etc/rc.local启动执⾏。cron检查/var/spool/cron/crontabs/⽬录中的⽂件,到所要执⾏的任务和执⾏任务的时间,并⾃动完成。该⽬录中⽂件由crontab命令建⽴。⽤户所建⽴的crontab⽂件存于/var/spool/cron/crontabs 中,其⽂件名与⽤户名⼀致,本⽂使⽤crontab的⽤户为Oracle,所建⽴的⽂件名也为Oracle。
cron使⽤者的权限记载在下列两个⽂件中: /usr/var/adm/cron/cron.deny和/usr/var/adm/cron/cron.allow。前⾯的⽂件中所列的⽤户不允许使⽤crontab命令;后⼀⽂件中所列的⽤户允许使⽤crontab命令。crontab命令的常⽤格式为:
crontab -l:显⽰⽤户的crontab⽂件的内容;
crontab -r:从crontabs⽬录中删除⽤户的crontab⽂件;
crontab -e:编辑⽤户的crontab⽂件。
crontab⽂件每⾏中有6个字段,前5个为时间设定段,第6个为所要执⾏的命令。时间段分别为: minutes、hours、day of month、month、day of week,字段之间⽤空格或Tab分开。字段如果为“*”,表⽰该字段在所有可能的取值范围内取值; 如果⼀个字段是由连字符隔开的两个数字,表明命令可以在两个数字之间的范围内执⾏。
备份数据库
oracle数据库自动备份方法设定数据库的拥有者为Oracle,⽤户名为mistest,其⼝令为test,新建备份⽬录为/export/home/oracle/backup。建⽴⼀个命名为testbackup的备份⽂件,⽂件内容如下:
  ORACLE-HOME=/export/home/oracle/815;export
ORACLE-HOME
  ORACLE-SID=ora815;export ORACLE-SID
  rm /export/home/oracle/backup/*
  rm /export/home/oracle/backup/*
  rq=⼂date +“%m%d”⼂
  /export/home/oracle/815/bin/exp mistest/test
file=/export/home/oracle
  /backup/exp$rq.dmp
log=/exoport/home/oracle/backup/exp$rq.log
说明:前两句对Oracle数据库初始化,第3条语句清空备份⽬录,第4条语句建⽴⼀个取当前⽇期的变量,以便在最后⼀条语句的备份⽂件名⾥含有当前⽇期信息。 testbackup编写完成后,⽤“chmod +x testbackup”命令授予它可执⾏权限。
异地传输
在备份主机⾥建⽴⼀个备份⽬录:/data/oradata/newbackup, 在本地主机Oracle⽤户的注册⽬录/export/home/oracle⾥建⽴⼀个rc⽂件。设定好备份主机的IP地址,备份主机上的⽤户为oraclebk, ⼝令为testbk2。rc⽂件内容为:
 
  login oraclebk
  password testbk2
  macdef init
  bin
  lcd /export/home/oracle/backup
  cd /data/oradata/backup
  mput *
  bye
说明: 前3条语句完成在备份主机上的登录,第4条语句定义⼀个名为init的宏,第5条语句表⽰以⼆进制传输,第6条语句表⽰进⼊本地⼯作⽬录,第7条语句表⽰进⼊备份主机⽬录,第8条语句完成将本地主机/export/home/oracle/backup⽬录下的所有⽂件传输⾄备份主机/data/oradata/backup⽬录下,最后⼀条语句退出ftp会话进程。rc⽂件编写完成后,⽤命令“chmod 600 rc”使该⽂件只能被该⽤户所访问。
⾃动执⾏
我们以oracle⽤户登录本地主机,⽤“crontab -e”编写crontab⽂件⽤以启动⾃动备份进程。oracle⽂件内容如下:
  10 23 * * * /export/home/oracle/testbackup
  30 23 * * * ftp - 
说明:第1条语句指定每天⾃动在23点10分执⾏对数据库的备份,第2条语句指定每天⾃动在23点半启动ftp,将备份⽂件传输到备份主机(备份主机为符合语句中指定IP地址的主机)。
Oracle⽂件只能在Oracle⽤户名下⽤“crontab -e”命令来编辑。编辑完成后,可以在⽤“crontab-l”命令来查看crontab⽂件内容,同时在/var/spool/cron/crontabs⽬录下查看是否增加了⼀个Oracle⽂件。
⾄此,本地主机可以每天定时备份数据库,并定时把备份数据传到备份主机。这样,较好地实现了Oracle数据异地⾃动备份,本地主机如果有什么故障,数据有了可靠备份,同时,在⼀定程度上也减轻了系统管理⼈员烦琐、重复的备份⼯作。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。