首页 > 范文大全 > 正文

试论Oracle数据备份与恢复

开篇:润墨网以专业的文秘视角,为您筛选了一篇试论Oracle数据备份与恢复范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:因oracle数据库在数据安全性和完整性控制方面性能优越,且支持跨系统,跨平台操作,故越来越多的用户将其作为应用数据处理系统。文章就如何正确使用Oracle数据库的备份与恢复功能来保证其数据安全性和完整性,做了一个简单的探讨。

关键词:数据;Oracle;备份;恢复

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)09-1973-03

Discuss about Oracle Data Backup and Recovery

PAN Cheng-bin

(Tourism College of Zhejiang, Hangzhou 311231, China)

Abstract: For Oracle's advantage in data security and integrity control, and support across the system, cross-platform operation, so more and more users will use it as their data processing system. Articles will discuss about how to correctly use Oracle database backup and restore function to ensure the data security and integrity.

Key words: data; Oracle; backup; recovery

1 概述

随着各单位局域网和互联网络的深入应用,系统内的服务器担负着企业的关键应用,存储着重要的信息和数据,为领导及决策部门提供综合信息查询的服务,为网络环境下的大量客户机提供快速高效的信息查询、数据处理和Internet等的各项服务。因此,建立可靠的网络数据容灾系统,保护关键应用的数据安全是网络建设的重要任务,在发生人为或自然灾难的情况下,保证数据不丢失。

2 数据容灾备份

2.1 数据丢失的原因

数据丢失通常很难防范,一旦数据丢失,就会产生接二连三的问题。造成数据丢失的原因包括以下几个方面:

1)数据处理和访问软件平台故障;2)系统的硬件故障;3)人为的操作失误;4)黑客的恶意攻击;5)供电系统故障;6)自然灾害等。

2.2 数据容灾

所谓数据容灾,就是指建立一个异地的数据系统,该系统是本地关键应用数据的一个可用复制。在本地数据及整个应用系统出现灾难时,系统在异地至少有一份可用的关键业务数据。该数据可以是与本地生产数据的完全复制,也可以比本地数据略微落后,但是一定可用。数据的容灾技术,又称为异地数据复制技术,按照其实现的具体技术方式来说,主要可以分为同步传输方式和异步传输方式。根据容灾的距离可分为远程数据容灾和近程数据容灾。

2.3 数据备份的重要性

计算机里面重要的数据、档案或历史纪录,不论是对企业用户还是对个人用户,都是至关重要的,一旦不慎丢失,都会造成不可估量的损失,轻则辛苦积累起来的心血付之东流,严重的会影响企业的正常运作,给科研、生产造成巨大的损失。

为了保障生产、销售、开发的正常运行,企业用户应当采取先进、有效的措施,对数据进行备份、防范于未然。

3 Oracle数据备份

3.1 Oracle数据库的备份种类

Oracle数据库备份分为三种:冷备份(Cold Backup);热备份(Hot Backup);逻辑备份(Export),前两种备份又被称为物理备份。

3.2 Oracle数据库备份的工作原理

冷备份(Cold Backup)主要指在关闭数据库的情况下进行数据库的完全备份,备份内容包括所有数据文件、控制文件、联机日志文件、Init.ora文件。

热备份(Hot Backup)是指在数据库运行的情况下,采用归档模式(Archivelog Mode)备份数据库的方法。

Exp的原理是把数据库中用户的对象全部进行处理,对象的定义转变成DDL语句写入dmp文件,表中的数据转化成insert的语句写入dmp文件中,在Imp导入时候重新建立用户下的对象,并且通过dmp文件中的语句建立对象,通过insert语句写入数据。用Imp导入数据时还会产生大量的日志写机日志文件中,恢复的速度比较慢。而且Exp/Imp工具在不同的Oracle数据库版本之间还有一定的限制,只能遵循由相同版本或者低版本的Exp来导出高版本数据库的数据,然后再由相同版本或者低版本的Imp向目标数据库中导入。

4 Oracle数据库逻辑备份方法―导入/导出(Exp/Imp)

导入/导出(Exp/Imp)是Oracle最古老的两个命令行工具,也是许多用户经常使用的两个工具。它们常用来做数据库逻辑备份,数据库重组和数据库转移等工作。从Oracle 10g开始,增加了数据泵导入/导出工具(Expdp/Impdp)。

4.1 数据导出工具Exp

Exp是客户端工具,该工具不仅可以在Oracle客户端使用,还可以在Oracle服务器端使用。当在Oracle客户端使用时,必须带有连接字符串,在Oracle服务器端使用则不需要。导出包括导出表、导出方案、导出数据库三种模式。关于Exp的主要参数,请参见表1。

4.1.1 命令行方式下导出数据实例

1)导出表

导出表是指使用Exp工具将一个或者多个表的结构和数据存储到OS文件中,导出表使用Tables关键字来完成。普通用户可以导出自己方案下的所有表,但是如果要导出其他方案下的表,则必须有EXP_FULL_DATABASE或者DBA权限。当表导出时,其上的触发器,约束,索引都会一并导出。下面用sys用户导出public的sczcb和jsxx表为例,具体如下:

Exp sys/manage@pan table=public.xszcb,public.jsxx file=testtable.dmplog=testtable.log

2)导出方案

导出方案是指使用Exp工具将一个或者多个方案中的所有对象数据存储到OS文件中,导出方案是使用owner选项来完成的。普通用户可以导出其自身方案,如果要导出其他方案,则必须具有EXP_FULL_DATABASE或者DBA权限,导出自身方案时,不必指定owner。下面用sys用户导出public方案的所有对象为例,具体如下:

Exp sys/manage@pan owner=public file=testscheme.dmp log=testscheme.log

3)导出数据库(完全模式)

导出数据库即备份完整的数据库,一般业务数据库不用此方法。备份命令如下:

Exp sys/manage@pan rows=y indexs=n compress=n buffer=65533 feedback=100000 full=y file=testfulldb.dmp log=testfulldb.dmp

对数据库的备份,建议使用增量备份,即只备份上一次备份以来改变的数据。但增量备份须得满足以下条件:⑴、只对完整数据库备份有效,且第一次需要使参数full=y,以后需要是参数inctype=incremental;⑵、用户需具有EXP_FULL_DATABASE权限;⑶、话务量较小时方可采用数据库备份

4.1.2 交互式导出数据

1)导出表

如图1所示。

2)导出方案

如图2所示。

上面我们已经对Exp的命令行和交互式两种导出方法分别举例加以说明,想必大家都有一个粗浅的了解。至于详细的使用方法,请参照Oracle联机帮助文档。

4.1.3 Oracle数据的自动备份机制

一般业务数据库随着使用时间的增加,数据量也是与日俱增。有时候一次备份需要花费很长时间,这对于DBA来说无疑是增加了工作量。如何快速简捷的实现数据备份,并不对业务系统造成影响呢。我们一般选择在半夜来备份数据,但是DBA不可能那么晚还来工作,因此我们就要考虑使用脚本程序来完成数据的自动备份。

Linux系统给我们提供了一个Crontab程序,Cron是一个永久进程,它由/etc/rc.local启动执行。Cron检查/var/spool/cron/crontabs目录中的文件,找到所要执行的任务和执行时间,并自动完成。

crontab文件每行中有6个字段,前5个为时间设定段,第6个为所要执行的命令。时间段分别为:minutes、hours、day of month、month、day of week,字段之间用空格或Tab分开。字段如果为“*”,表示该字段在所有可能的取值范围内取值; 如果一个字段是由连字符隔开的两个数字,表明命令可以在两个数字之间的范围内执行。

以root用户登录数据库服务器,在“#”提示符下执行:

#crontab Cl

将会得到下列返回信息(根据实际情况会有所不同)

30 01 * * * su - oracle -c '/bak/test_atuobak'

这说明自动备份脚本就是/bak/下的test_atuobak,并于每天凌晨1:30自动执行数据备份。

如要更改执行时间,则在提示符下输入:

#crontab Ce

但是cron中无法读取环境变量,必须在shell中声明Oracle的环境变量。下面我们用vi打开自动备份脚本test_atuobak,会得到下列返回信息:

ORACLE_SID=pan; export ORACLE_SID

ORACLE_BASE=/export/home/oracle; export ORACLE_BASE

ORACLE_HOME=/export/home/oracle/product/10.0; export ORACLE_HOME

NLS_LANG=simplified chinese_china.zhs16gbk; export NLS_LANG

PATH=/usr/java/j2sdk1.4.2_04/bin:/export/home/oracle/product/10.0/bin:/export/home/oracle/product/10.0/Apache/Apache/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/export/home/oracle/bin; export PATH

DATE=`date +%Y%m%d`

cd /bak

exp tongyi/asdfgh file=testi${DATE}.dmp log=test${DATE}.log

自此我们就可以利用上述脚本自动进行数据库的备份,只要负责定期去整理磁盘空间就行,工作量得到大大的减少,也会降低因误操作而造成数据丢失的概率。

4.2 数据导入工具Imp

Imp的功能正好跟Exp相反,用于数据的导入。导入也包括表方式、方案方式、全库方式三种。

4.2.1 命令行方式下Imp恢复数据

1)导入表

导入表是指利用Imp工具将Exp文件中的表结构及其数据转载到数据库中,导入表使用Tables选项来完成。普通用户可以直接导入其拥有的表,但如果要将表导入到其他用户中,则要求该用户必须拥有IMP_FULL_DATABASE或者DBA权限。还有如果要将表导入其他用户,必须使用Fromuser 和Touser两个参数。例子如下:

Imp public_data/zjly@pan file=testtable.dmp tables=xszcb fromuser=test touser=test11

上述例子表明要将testtable.dmp中test用户下的的xszcb导入到test11用户中。

2)导入方案

导入方案是指使用工具Imp讲Exp文件中的特定方案的所有对象及数据转载到数据库中。普通用户可以直接导入其自身方案,且在导入时只许提供Userid和File参数即可。但如果要将一个方案的所有对象导入到其他方案中,则该用户必须拥有DBA或者IMP_FULL_DATABASE权限,并且还要用到Fromuser和Touser两个参数。例子如下:

Imp public_data/zjly@urp file=testscheme.dmp fromuser=test touser=test11

上述例子表明要将testscheme.dmp中test用户的所有对象及数据导入到test11中。

3)全库方式

Imp sys/manage@pan rows=y indexs=n commit=y buffer=65533 ignore=y feedback=100000 full=y file=testfulldb.dmp log=testfulldb.dmp

4.2.2 交互式导入数据

IMP交互式数据导入跟EXP交互式数据导出的格式基本类似,本文就不再加以赘诉。读者有兴趣可以自己去实践一下,以便加深印象。

5 优化EXP和IMP的性能

Exp和Imp可以通过配置一些参数,来提高Export和Import的性能。至于性能到底能提升多少,还涉及导入/导出的数据,以及数据量的大小。

为了优化Exp的性能,我们可以通过设置Direct和Recordlength两个参数来完成。当Direct=Y时,将数据直接转移到Export客户端。这样的转移可以绕过SQL命令处理层(估值缓冲区),从而避免了无谓的数据转移。改变Recordlength的值,可以改进Exp的性能。该参数的推荐值是DB_BLOCK_SIZE的一个整数倍,或者是文件系统I/O块大小的一个整数倍。更改这个参数值会影响写入磁盘前积累的数据量,该参数的最大值为64KB。

为了优化Imp的性能,我们也可以通过设置Buffer、indexes、indexfile三个参数来达到效果。Buffer参数指定了输入缓冲区的大小,数据行将通过这个缓冲区进行转移,因此决定了Import导入的每个阵列插入中的行数。如果配合Commit=y参数指定Buffer参数,则Import会在每个阵列插入之后进行提交,而不是在载入完整的表后进行提交。但是Buffer的值也不能过大,反之会造成OS分页和换行,从而影响性能。Indexes参数指定是否导入用户生成的索引。如Indexes=N,则将提高Import的性能,原因是忽略了索引的存在。

此外还可以通过修改其他参数来提高Exp和Imp的性能。方法如下:

① 修改Sqlnet.ora,在里面增加trace_level_client=off

② 执行dbmspool.sql,然后SQL>begin;SQL>dbms_shared_pool.sizes(300);SQL>end

③ SQL>Alter system flush shared_pool

④ SQL>alter system set fast_start_mttr_target =24000

⑤ SQL>alter system set pga_aggregate_target=100M

6 结束语

本文对Oracle数据容灾备份技术做了一个简略阐述,希望能给读者带来一定的帮助。数据容灾技术的研究远没有这么简单,需要在实际中不断加以完善、发展。总之只有充分了解数据容灾备份技术,才能保证数据库系统的高可用性、数据的安全性、业务的连续性。

参考文献:

[1] 袁姗,刘长生,施伟.Oracle数据库热备份过程中被中断的数据恢复方法[J].电脑知识与技术,2009(9).

[2] 曹美琴.基于RMAN技术的ORACLE数据库备份恢复研究[J].安徽大学学报:自然科学版,2007(2).

[3] 刘军,崔宝江,刘Z.远程异步数据复制系统的设计与实现[J].计算机工程,2005(19).

[4] 伊岚.浅谈数据的备份和容灾[J].电信快报,2004(8).

[5] 余以胜.Oracle 数据库备份解决方案的研究[J].计算机与数字工程,2006,34(1):118-121.