定时备份

2024-05-17

定时备份(精选三篇)

定时备份 篇1

Quartz.net是一款开源的作业调度框架, 采用C#编写, 可适用于Winform以及ASP.NET中, 功能强大, 使用简单。在Windows系统中的计划任务功能较为简单, 且不能与程序设计结合, 故此利用Quartz.net在计划任务方面诸多优势, 诸如数据库支持、集群、插件、支持Cron表达式等, 结合工作需求, 编写适合本单位实际情况的SQL Server定时备份软件, 极大提高了工作效率, 推动了部门信息化建设。

2 软件功能特点

软件的主要功能即定时备份SQL Server, 有3个特点 (1) 直接读取xml配置文件, 执行批量作业任务, (2) 支持隐藏到状态栏通知信息, (3) 单例模式, 即不允许软件多个进程存在。软件主界面设计简洁大方, 运行界面如图1所示。

软件运行后, 即开始执行作业, 处于启动状态, 用户可以点击暂停或者退出。

3 功能实现

3.1 单例模式功能

C#实现单例模式有几种方案, 包括利用Process查找进程的方式, 利用API findwindow查找窗体的方式以及使用互斥体Mutex原子操作方式, Mutex方式特点为进程间共享, 进程间互相排斥, 抢锁, 用名称做标识, 具体实现方式如下:

3.2 Quartz.net架构

3.2.1 采用Quartz.net实现计划作业

只需要定义一个类, 这个类实现Quartz.IJob接口即可。这里的备份SQL Server类名称为Task Job.cs, 其大体结构如下:

3.2.2 启动XML配置文件中的作业

首先创建一个调度器, 作用就是如果触发器设定的条件满足, 那么执行任务。然后载入xml作业配置文件, 最后将XML配置文件中的任务Job Detail与触发器Trigger添加到调度器中, 执行Start方法即可。代码如下:

3.2.3 停止作业

停止作业功能很简单, 代码如下:

3.3 备份SQL Server功能

软件的核心功能为备份SQL Server, 原理即首先根据数据库连接字符串连接到数据库服务器, 然后执行备份语句备份数据库。需要主要的是, 备份软件执行的时候, 数据库不能处于打开状态, 否则会报错。核心SQL代码如下:

备份功能的实际源码如下:

4 结语

本软件采用C#语言编写, 采用开源的作业调度软件Quartz.net来实现计划任务, 采用基本的SQL语句来完成核心功能, 实现了定时备份SQL Server功能, 极大提高了工作人员工作效率, 彻底摆脱了每次手工备份操作烦恼。

摘要:采用Quartz.net作业调度框架, 实现定时备份SQL Server数据库功能, 提高了工作效率。

关键词:Quartz.net框架,Cron表达式,SQLServer数据库,备份

参考文献

[1]王红建.SQL数据库的备份与恢复技巧.科技视界, 2012, 28.

[2]姜丽华.SQL Server服务数据库管理和维护[J].信息与电脑 (理论版) , 2011, (09) .

定时备份 篇2

关键词: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.

定时备份 篇3

一、我公司以往ORACLE数据库备份情况

2007年前, 公司ORACLE数据库备份情况是:由数据库管理员或者备份专人, 在每天17:00点 (休息日除外) , 手工登录3台数据库服务器, 分别执行备份逻辑文件的命令, 修改备份文件的名字, 以每日的日期命名。由于手工操作, 容易手误造成输入错误;每天修改、执行文件, 重复工作占去管理人员很多宝贵时间;缺少休息日的备份文件, 数据可能丢失。为了解决以上众多问题, 保证备份文件正确、数据完整, 并使数据库管理员DBA能抽身出来有更多时间研究ORACLE的核心管理, 我研究并设计了ORACLE的自动定时备份。

二、设计目标

目前我们的数据库有3台, HP-UNIX K380的ORACLE8i, IBM440 LINUX的ORACLE9i, SUN SOLARIS的ORACLE10g。数据库服务器类型多, 平台各异, 数据库版本也多样。要达到的目标备份方式是:UNIX, LINUX自动执行ORACLE的export备份命令;备份时间是:每天晚上17:00点, 休息日也包含在内。备份文件是:每天随日期的不同而变动的, 动态形成带日期的文件, 例如440_linux_080110.dmp。

三、设计难点

1、目前对UNIX, LINUX操作系统不是特别熟悉, 对于该平台的环境, 操作有些障碍, 需要学习操练。

2、对UNIX, LINUX平台上的crontab命令定点执行工作的参数不熟悉, 需要深入研究具体的参数。

3、备份文件名字是动态的, 随日期不同而不同。难点在于ORACLE数据库执行export命令备份时, 对日期变量的设置和格式处理。

四、设计过程

1、为了避免使用SYSTEM超级用户泄漏密码, 我特别专门为3个数据库分别建立了oraclebf用户, 只授予其connect、exp_full_database权限, 执行全数据库备份。

2、研究固定文件名的export备份, 设计成以下参数文件expfull.par:

3、再研究动态变文件名的export备份, 变动的日期如何引入以上文件。查找了UNIX和LINUX上关于日期方面的知识, 知道可以使用系统的日期命令date了, 然而date显示的是国际标准时间:星期+月+日+时分秒+时区+年, 全值而且英文, 无法直接用于我们仅仅需要的年月日, 经过研究和查找, 格式化date实现。定义变量rq, 并输出变量:

4、研究定点执行工作的命令crontab及其参数。crontab的每一行由六个域 (minutes、hours、day of month、month、day of week、command) 组成, 预制定每晚17:00点执行备份命令, 编辑其为

crontab–e:0 17***exp parfile=/home/oracle/zj/expfull.par

crontab定点执行了, 但是却没有备份成功数据库文件。

5、在其他2个数据库服务器上分别建立Oracle Backup.sh和expfull.par文件, 修改不同参数和路径, 赋予ORACLE用户crontab权限, 设置每天晚上17:00定点自动备份。

五、设计结果

3台数据库每天晚上17:00准时备份, 加日期的动态备份文件正确无误。UNIX, LINUX平台上测试全部通过。完全达到预计设计目标。

公司数据库在备份方面有了进一步提高, 势必数据库的可用性、准确性、可恢复性就会得到有力保障, 从而为公司业务应用系统的顺利运行提供坚实基础和数据环境, 进而促进公司整体发展。

摘要:本文从我公司ORACLE数据库目前手工备份情况开始分析, 提出改变备份方式的目标和设计方案, 并对该方案进行了详细的设计说明和结果描述。

上一篇:多媒体在教学中应用下一篇:中文学校