论文部分内容阅读
摘 要: 本文介绍了Oracle数据库的备份方式及UINIX系统下CRON进程及其工作过程。详细阐述了CRON进程与Oracle自带的EXP命令相结合实现Oracle数据库的定时备份原理和方法。在文中,以备份Oracle数据库中一个用户为例说明如何使用CRON实现Oracle数据库的定时备份。
关键词:Oracle CRON 备份 数据库
中图分类号:TP309.3 文献标识码:A 文章编号:1673-8454(2008)19-0045-03
在计算机网络广泛应用的今天,医院信息化获得了飞速的发展,电子处方、电子医嘱、电子申请单等一系列计算机手段的应用极大地提高了医护人员的工作效率,方便患者就医诊治。但是目前这些医院信息化的应用大部分用于医护人员的日常使用,患者还无法从存储在医院数据库中的数据查询到自己的检验/检查信息。在患者就诊的时候,提供近期的检验/检查报告结果,能够为医生的诊治提供有利的帮助,但是如果近期的检验/检查报告丢失或者就诊时忘记携带,那么不得不重新做一遍相应的检验/检查项目,这样既浪费患者的时间,又浪费患者的金钱。“一单通”实行后,部分大医院之间互相认可彼此的检验/检查结果,患者或者医生能够通过计算机网络远程查询相应的检验/检查结果,利用信息化和计算机网络为患者就诊提供更好的服务。在黑客、病毒肆虐的互联网上,为了保证服务的持续性和稳定性,对提供基础数据的数据库做备份是必须的。
一、Oracle数据库备份方式[1]
UNIX平台和Oracle数据库组合是大中型应用系统的首选。Oracle数据库是目前应用最为广泛的大型数据库之一,其备份的方式主要有冷备份、热备份和逻辑备份。
冷备份是一种物理备份,它使用操作系统的拷贝命令将与数据库相关的物理文件进行备份。在进行冷备份的时候,为了保证数据库中数据的完整性,数据库要预先正常关闭。冷备份是一种非常快速的备份方法,只需将备份文件拷贝回去,就可以非常容易地将数据恢复到备份时的时间点上。冷备份的不足之处是在实施备份的全过程中,数据库必须是处于关闭状态。备份所需时间与数据库的数据文件大小、个数以及备份介质I/O速度有关。
热备份又叫联机备份,它是在数据库运行的状态下进行的物理备份,适用于要求每周7天、每天24小时运行的数据库。与冷备份整个数据库不同,热备份的备份单位是表空间。要进行热备份,首先必须将表空间设置为备份模式,此时数据库在该表空间发生检查点(checkpoint),并将SCN(System Change Number,系统变更号)写入组成表空间的数据文件的头文件中,在表空间处于备份模式期间,Oracle将停止对该表空间数据文件的直接写入,转而使用复杂的机制将回滚段、缓冲、重做日志和归档日志结合起来存储数据,拷贝完毕后结束表空间的备份模式, 数据库将完成对数据文件的同步更新,以数据库当前的SCN替换备份开始时写入头文件中的SCN,由此保证表空间数据的一致性。热备份要求数据库工作在归档(archive log)模式下,在归档模式下重做日志记录了所有数据库的事务,提供了多次表空间备份之间的数据库变化,因此,可利用不同时间的多个表空间备份恢复整个数据库,可作数据库“最新状态”的恢复。热备份的不足在于不易操作,维护成本高。
逻辑备份即为拷贝数据库的数据,而不记录数据位置的备份过程。Oracle中所提供的export(导出)工具可进行逻辑备份。export将数据按Oracle的特定格式从Oracle数据库写到操作系统文件中,恢复时利用Oracle的import(导入)工具读取export导出的文件,将数据导入到数据库中。逻辑备份常用于Oracle数据库之间移动数据,备份整个数据库到一个文件中。使用export工具备份数据库的时候,数据库必须打开。为了保证备份期间整个数据库的完整性和一致性,要以restrict模式打开数据库。
针对要为患者和医生提供不间断的、持续服务的特点,逻辑备份是最适合的一种备份方式。
二、cron实现Oracle数据库的定时备份
1.cron介绍[2]
cron是Unix系统的调度进程,它可以在无需人工干预的情况下运行用户的作业,执行作业的命令是crontab,该命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个自己的crontab文件来保存调度信息。用户可以使用它运行任意一个shell脚本或某个命令。虽然每一个用户都可以有自己的crontab文件,但在一个重要的系统中,系统管理员可以通过 /ect/cron.d目录下的cron.allow和cron.deny两个文件控制用户对contab文件的访问。这两个文件全部由用户名组成,每个用户名一行。这两个文件的使用遵循如下规则:
第一,如果cron.allow存在,那么只有该文件中指定的用户才可以执行crontab任务,例如建立、编辑、显示或者删除他们自己的crontab文件;
第二,如果cron.allow不存在,那么除了cron.deny文件中指定的用户名以外,其它所有用户均可以执行contab任务;
第三,如果cron.allow和cron.deny两个文件都不存在,那么只有root用户可以执行crontab任务,其它用户不能执行crontab任务。
2.cron实现Oracle数据库的定时备份
本文以Sun Solaris 9 平台下的Oracle 9.2.0.6为例,说明如何使用cron实现Oracle数据库的定时逻辑备份。
在使用cron定时备份Oracle数据库的时候,用户首先要根据自己的需求定制crontab文件的脚本。本文以备份Oracle数据库中的test用户为例说明如何定制脚本:
步骤1:确定要定时自动执行作业的用户
以Oracle用户登录服务器;
步骤2:编辑备份Oracle数据库的脚本
(1)使用vi编辑器创建文件backup_oracle.sh;
(2)编辑文件backup_oracle.sh的内容如下:
#Start
#Part 1
ORACLE_BASE=/export/home1/oracle; export ORACLE_BASE
ORACLE_HOME=/export/home1/oracle/product/9.2.0; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:usr/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
NLS_LANG=american_america.ZHS16GBK;export NLS_LANG
PATH=$ORACLE_HOME/bin:/usr/bin:/usr/ucb:/etc:/usr/
#Part 2
RQ=` date "%y%m%d%H%M%S"`
#Part 3
/export/home1/oracle/product/9.2.0/bin/exp system/pw_system owner=testfile=/export/home0/oracle/backup/test$RQ.dmplog=/export/home0/oracle/backup/test$RQ.log
#End
文件内容说明:
文件的内容包括两部分:
Part 1:Oracle用户的环境变量设置
Part 2:RQ是一个变量,其值表示当前系统的时间,如:060501203000,表示2006年5月1日20点30分0秒
Part 3:/export/home1/oracle/product/9.2.0/bin/exp system/pw_system owner=testfile=/export/home0/oracle/backup/test$RQ.dmplog=/export/home0/oracle/backup/test$RQ.log
该语句使用Oracle的exp命令对数据库进行逻辑备份,备份产生的文件名字为所导出的用户名与RQ变量的组合,如:test060501203000.dmp,备份的日志文件名字也是用户名与RQ变量的组合,如:test060501203000.log。
步骤3:创建crontab文件
(1)使用vi编辑器编辑创建名字为cron的文件,其中的为用户的名字,在本脚本中应该是:vi oraclecron。
(2)文件oraclecron的内容如下:
30 20 * * * sh /global/oracle/oradata/backup_oracle.sh
该文件的格式说明如下:[3][4]
该文件的每一个条目必须含有6列、5个时间域,每个域之间要用空格分隔,其中:
第1列表示分钟:1~59;第2列表示小时:0~23(0表示子夜);第3列表示日:1~31;第4列表示月:1~12;第5列表示星期:0~6(0表示星期天);第6列表示要运行的命令。
在前5个时间域中可以用星号“*”来表示连续的时间段。如果对某个时间域没有特别的限定,应该在该域内填入“*”。
步骤4:提交任务
使用如下命令提交该任务给系统进程cron:crontab oraclecron,同时创建文件的一个副本放在/var/spool/cron/crontabs目录中,文件名就是用户名Oracle
步骤5:查看crontab文件是否已经提交
使用如下命令查看任务是否已经提交:crontab –l
通过上面的设置,在每天20:30分将自动执行Oracle数据库的备份,文件名字test<脚本启动时间>,如:test060501203000.dmp,orcl_user060502203000.dmp,由于每次脚本启动的时间不同,所以可以在服务器上保留近期多个数据库备份。
三、结束语
为患者和自己医院之外的医生提供检验/检查结果是医院提供的一种“增值服务”,但是这种服务没有经济收入,所以投入成本是提供这种“增值服务”要考虑的一个重要因素。本文实现的Oracle数据库备份,可以在无需额外投入的基础上完成Oracle数据库的日常备份,并且在备份的时候无需人工干预。根据磁盘空间的大小在服务器上可以保存最近日期的数据库备份文件,一旦数据库出现问题,可以利用最近一次的备份进行数据库恢复。
参考文献:
[1]Kevin loney.oracle9i数据库管理员手册[M].北京:机械工业出版社,2002.
[2]饶云华,张曜.Unix/Selaris系统管理与网络管理[M].北京:清华大学出版社,2002.
[3]SebeH M G.Selaris技术指南[M].北京:机械工业出版社,2001.
[4][美]Robin Bulk等.UNIX技术大全一系统管理员卷[M].北京:机械工业出版社,1998.7.
关键词:Oracle CRON 备份 数据库
中图分类号:TP309.3 文献标识码:A 文章编号:1673-8454(2008)19-0045-03
在计算机网络广泛应用的今天,医院信息化获得了飞速的发展,电子处方、电子医嘱、电子申请单等一系列计算机手段的应用极大地提高了医护人员的工作效率,方便患者就医诊治。但是目前这些医院信息化的应用大部分用于医护人员的日常使用,患者还无法从存储在医院数据库中的数据查询到自己的检验/检查信息。在患者就诊的时候,提供近期的检验/检查报告结果,能够为医生的诊治提供有利的帮助,但是如果近期的检验/检查报告丢失或者就诊时忘记携带,那么不得不重新做一遍相应的检验/检查项目,这样既浪费患者的时间,又浪费患者的金钱。“一单通”实行后,部分大医院之间互相认可彼此的检验/检查结果,患者或者医生能够通过计算机网络远程查询相应的检验/检查结果,利用信息化和计算机网络为患者就诊提供更好的服务。在黑客、病毒肆虐的互联网上,为了保证服务的持续性和稳定性,对提供基础数据的数据库做备份是必须的。
一、Oracle数据库备份方式[1]
UNIX平台和Oracle数据库组合是大中型应用系统的首选。Oracle数据库是目前应用最为广泛的大型数据库之一,其备份的方式主要有冷备份、热备份和逻辑备份。
冷备份是一种物理备份,它使用操作系统的拷贝命令将与数据库相关的物理文件进行备份。在进行冷备份的时候,为了保证数据库中数据的完整性,数据库要预先正常关闭。冷备份是一种非常快速的备份方法,只需将备份文件拷贝回去,就可以非常容易地将数据恢复到备份时的时间点上。冷备份的不足之处是在实施备份的全过程中,数据库必须是处于关闭状态。备份所需时间与数据库的数据文件大小、个数以及备份介质I/O速度有关。
热备份又叫联机备份,它是在数据库运行的状态下进行的物理备份,适用于要求每周7天、每天24小时运行的数据库。与冷备份整个数据库不同,热备份的备份单位是表空间。要进行热备份,首先必须将表空间设置为备份模式,此时数据库在该表空间发生检查点(checkpoint),并将SCN(System Change Number,系统变更号)写入组成表空间的数据文件的头文件中,在表空间处于备份模式期间,Oracle将停止对该表空间数据文件的直接写入,转而使用复杂的机制将回滚段、缓冲、重做日志和归档日志结合起来存储数据,拷贝完毕后结束表空间的备份模式, 数据库将完成对数据文件的同步更新,以数据库当前的SCN替换备份开始时写入头文件中的SCN,由此保证表空间数据的一致性。热备份要求数据库工作在归档(archive log)模式下,在归档模式下重做日志记录了所有数据库的事务,提供了多次表空间备份之间的数据库变化,因此,可利用不同时间的多个表空间备份恢复整个数据库,可作数据库“最新状态”的恢复。热备份的不足在于不易操作,维护成本高。
逻辑备份即为拷贝数据库的数据,而不记录数据位置的备份过程。Oracle中所提供的export(导出)工具可进行逻辑备份。export将数据按Oracle的特定格式从Oracle数据库写到操作系统文件中,恢复时利用Oracle的import(导入)工具读取export导出的文件,将数据导入到数据库中。逻辑备份常用于Oracle数据库之间移动数据,备份整个数据库到一个文件中。使用export工具备份数据库的时候,数据库必须打开。为了保证备份期间整个数据库的完整性和一致性,要以restrict模式打开数据库。
针对要为患者和医生提供不间断的、持续服务的特点,逻辑备份是最适合的一种备份方式。
二、cron实现Oracle数据库的定时备份
1.cron介绍[2]
cron是Unix系统的调度进程,它可以在无需人工干预的情况下运行用户的作业,执行作业的命令是crontab,该命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个自己的crontab文件来保存调度信息。用户可以使用它运行任意一个shell脚本或某个命令。虽然每一个用户都可以有自己的crontab文件,但在一个重要的系统中,系统管理员可以通过 /ect/cron.d目录下的cron.allow和cron.deny两个文件控制用户对contab文件的访问。这两个文件全部由用户名组成,每个用户名一行。这两个文件的使用遵循如下规则:
第一,如果cron.allow存在,那么只有该文件中指定的用户才可以执行crontab任务,例如建立、编辑、显示或者删除他们自己的crontab文件;
第二,如果cron.allow不存在,那么除了cron.deny文件中指定的用户名以外,其它所有用户均可以执行contab任务;
第三,如果cron.allow和cron.deny两个文件都不存在,那么只有root用户可以执行crontab任务,其它用户不能执行crontab任务。
2.cron实现Oracle数据库的定时备份
本文以Sun Solaris 9 平台下的Oracle 9.2.0.6为例,说明如何使用cron实现Oracle数据库的定时逻辑备份。
在使用cron定时备份Oracle数据库的时候,用户首先要根据自己的需求定制crontab文件的脚本。本文以备份Oracle数据库中的test用户为例说明如何定制脚本:
步骤1:确定要定时自动执行作业的用户
以Oracle用户登录服务器;
步骤2:编辑备份Oracle数据库的脚本
(1)使用vi编辑器创建文件backup_oracle.sh;
(2)编辑文件backup_oracle.sh的内容如下:
#Start
#Part 1
ORACLE_BASE=/export/home1/oracle; export ORACLE_BASE
ORACLE_HOME=/export/home1/oracle/product/9.2.0; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:usr/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
NLS_LANG=american_america.ZHS16GBK;export NLS_LANG
PATH=$ORACLE_HOME/bin:/usr/bin:/usr/ucb:/etc:/usr/
#Part 2
RQ=` date "%y%m%d%H%M%S"`
#Part 3
/export/home1/oracle/product/9.2.0/bin/exp system/pw_system owner=testfile=/export/home0/oracle/backup/test$RQ.dmplog=/export/home0/oracle/backup/test$RQ.log
#End
文件内容说明:
文件的内容包括两部分:
Part 1:Oracle用户的环境变量设置
Part 2:RQ是一个变量,其值表示当前系统的时间,如:060501203000,表示2006年5月1日20点30分0秒
Part 3:/export/home1/oracle/product/9.2.0/bin/exp system/pw_system owner=testfile=/export/home0/oracle/backup/test$RQ.dmplog=/export/home0/oracle/backup/test$RQ.log
该语句使用Oracle的exp命令对数据库进行逻辑备份,备份产生的文件名字为所导出的用户名与RQ变量的组合,如:test060501203000.dmp,备份的日志文件名字也是用户名与RQ变量的组合,如:test060501203000.log。
步骤3:创建crontab文件
(1)使用vi编辑器编辑创建名字为
(2)文件oraclecron的内容如下:
30 20 * * * sh /global/oracle/oradata/backup_oracle.sh
该文件的格式说明如下:[3][4]
该文件的每一个条目必须含有6列、5个时间域,每个域之间要用空格分隔,其中:
第1列表示分钟:1~59;第2列表示小时:0~23(0表示子夜);第3列表示日:1~31;第4列表示月:1~12;第5列表示星期:0~6(0表示星期天);第6列表示要运行的命令。
在前5个时间域中可以用星号“*”来表示连续的时间段。如果对某个时间域没有特别的限定,应该在该域内填入“*”。
步骤4:提交任务
使用如下命令提交该任务给系统进程cron:crontab oraclecron,同时创建文件的一个副本放在/var/spool/cron/crontabs目录中,文件名就是用户名Oracle
步骤5:查看crontab文件是否已经提交
使用如下命令查看任务是否已经提交:crontab –l
通过上面的设置,在每天20:30分将自动执行Oracle数据库的备份,文件名字test<脚本启动时间>,如:test060501203000.dmp,orcl_user060502203000.dmp,由于每次脚本启动的时间不同,所以可以在服务器上保留近期多个数据库备份。
三、结束语
为患者和自己医院之外的医生提供检验/检查结果是医院提供的一种“增值服务”,但是这种服务没有经济收入,所以投入成本是提供这种“增值服务”要考虑的一个重要因素。本文实现的Oracle数据库备份,可以在无需额外投入的基础上完成Oracle数据库的日常备份,并且在备份的时候无需人工干预。根据磁盘空间的大小在服务器上可以保存最近日期的数据库备份文件,一旦数据库出现问题,可以利用最近一次的备份进行数据库恢复。
参考文献:
[1]Kevin loney.oracle9i数据库管理员手册[M].北京:机械工业出版社,2002.
[2]饶云华,张曜.Unix/Selaris系统管理与网络管理[M].北京:清华大学出版社,2002.
[3]SebeH M G.Selaris技术指南[M].北京:机械工业出版社,2001.
[4][美]Robin Bulk等.UNIX技术大全一系统管理员卷[M].北京:机械工业出版社,1998.7.