甘肃联合大学毕业论文
数据库恢复技术浅析
摘要:数据库系统在运行的过程中可能会产生各种故障,使数据库处于不稳定的状态。所以DBMS必须提供一种功能用以恢复数据库中的正确数据,使数据准确无误。这种功能就是数据库的恢复。数据库系统常见的故障有三种即事故故障、系统故障和介质故障。基于日志文件的数据库恢复技术用以恢复事务故障和系统故障。本文主要介绍了数据库恢复的,相关概念,与SQL数据库恢复ORACLE数据库恢复技术。
Abstract: The database system in the process of operation may produce all kinds of fault, the database is in not stable state. So DBMS must provide a function to restore database data, make the correct data is accurate and correct. This function is a database recovery. Database system common fault has three namely accident failure, and system fault and medium fault. Based on the long file database recovery technology to restore affairs fault and system failure. This paper mainly introduced the database recovery, the related concept, and SQL database recovery ORACLE database recovery technology.
关键字: 数据库恢复、文件系统缓存和数据库恢复、备份恢复数据库、SQL Server数据库恢复技术、 ORACLE数据库恢复技术
引言
因为随着数据库技术在各个行业和各个领域大量广泛的应用,在对数据库应用的过程中,人为误操作、人为恶意破坏、系统的不稳定、存储介质的损坏等等原因,都有可能造成重要数据的丢失。一旦数据出现丢失或者损坏,都将给企业和个人带来巨大的损失。这就需要进行数据库恢复。
何为数据库恢复
数据库恢复是指通过技术手段,将保存在数据库中上丢失的电子数据进行抢救和恢复的技术。数据库恢复是目前非常尖端的计算机技术,因为各个数据库厂商对自己的数据库产品内部的东西都是属于商业机密,所以没有相关的技术资料,掌握和精通恢复技术的人员极少。
(1)当数据库出现损伤或由于人员误操作、操作系统本身故障所造成的数据看不见、无法读取、丢失。工程师通过技术手段读取将数据都恢复为可以读的数据,数据恢复不是靠一两种软件就可以完成,往往需要数个工程师靠经验不同的方式才能恢复数据,当然数据库恢复还包括各种操作系统:除普通的WINDOWS外,还有Unix、Linux、APPLE机,而以UNIX为多。
(2)数据库数据已经存在,但是无法正常使用,提示错误,都应归属为数据修复,举例说明:SQL SERVER文件打开提示LDF文件损坏,或错误823等等。
数据库恢复实际上就是利用技术手段把不可见或不可正常运行的数据文件恢复成正常运行的过程。。
一个运行着数据库系统的计算机随时都可能宕机。然而“已借未贷”或“已贷未借”的情况都可能出现。当系统崩溃后重启时,数据库管理系统必须允许这种可能性的发生,也就是说,在磁盘数据文件中可能包含一些部分完成的事务,在应用能够访问数据库数据之前,这些必须全部被检出。 防止上述情况发生的基本技术就是保存一份连续日志,记录将做的和完成的操作。当需要修复损坏的数据库时,数据库系统重新应用这些日志,寻找那些将要执行但未完成的任务。如果任何类似的事务的已经在数据库中反映,这一定是颠倒的,并且数据库必须回滚。 使用这种日志重新应用的技术,数据库系统可以避免宕机所带来的已接受事务(应用已确认执行完毕的事务)的丢失。数据修复时,那些在宕机时处理结果还存在缓存中的已接受事务,结果会存放到磁盘文件中。未接受事务(还没有被应用确认的事务)会被回滚,消除它所带来的对其他数据的影响。
如果使用文件作为数据库的数据存储方式会给我们的讨论增加一些额外的复杂性,因为文件管理系统有它自己的缓存。如果一个数据库系统在宕机后立刻重新启动,那么它所包含的文件可能并没有实时刷新到存储中,这是由于在系统宕机时,文件系统的缓存没有写入到存储的原因 。在这种情况下,数据库恢复进程必须重新应用数据日志刷新。也就是说,在系统宕机的情况下已接受事务也不会丢失。
从备份恢复数据库通过正规备份,并且快速的将备份介质运送到安全的地方,数据库就能够在大多数的灾难中得到恢复。恢复是文件的使用是从一个基点的数据库映像开始,到一些综合的备份和日志。由于不可预知的物理灾难,一个完全的数据库恢复(重应用日志)可以使数据库映像恢复到尽可能接近灾难发生的时间点的状态。对于逻辑灾难,如:人为破坏或者应用故障等,数据库映像应该恢复到错误发生前的那一点。 在一个数据库的完全恢复过程中,基点后所有日志中的事务被重新应用,所以结果就是一个数据库映像反映所有在灾难前已接受的事务,而没有被接受的事务则不被反映。为了恢复数据库误操作等错误,完全的恢复时不合适的,因为如果重新应用所有事务,错误就会重复。数据库恢复应用程序允许管理员停止日志前滚在错误发生前一点。数据库恢复可以恢复到错误发生前的最后一个时刻。
三、数据库恢复技术
下面列出的数据库恢复技术是按照他们所能够提供的保护能力的顺序列出的,也同时是使用他们所需要的资金,方便程度,和技术复杂性的排列顺序。每一种技术都必须与他前面的技术共同使用。例如,磁盘镜像必须伴随着数据库备份和日志归档。
1、正规数据库备份和日志归档
磁盘镜像 本地群集 数据库复制
2 全局群集
对于希望恢复时间(RTO)时间在几个小的内的企业,正规的数据库备份和日志归档也许就能满足。数据库备份和归档日志应该被保存在离数据中心有一定距离的地方。高级的备份软件的特性,如自动的定期的块增量备份可以减少管理成本,缩短备份窗口,以及最小化恢复时间。 通过简单的镜像硬件和网络,镜像数据库存储dada减少了因为硬件故障所引起的数据库停机。也可以通过剥离镜像的备份提高数据库的可用性。 可以通过群集技术提高数据库级信息服务的可用性。一个本地群集可以使由于系统的单点而出现故障的可能降到最小。当错误引起临时的损耗,服务恢复时自动的。在共享数据的群集中,损耗窗口可以为零。在群集中,备份可以运行在导入了数据库服务器镜像数据的辅助服务器上。 为防止站点实效而进行的灾难恢复中,数据库必须复制到远程站点。数据库复制的最简单方法就是将归档日志传送到远端,然后在备用服务器上重新应用。这种技术丢失的数据数量是固定的。不能容忍在灾难中丢失数据的企业应该使用数据库或存储复制。 最高的数据库可用性应该使用全局群集来完成,它在多个互相连接的站点中调整数据库和应用的可用程度。 弹性数据库通过不同方法使用冗余拷贝。数据库可以通过额外的拷贝提高访问性能。存储数据库数据的磁盘可以被镜像来提高弹性。实时备份可以用来避免灾难和故障。事务日志可以使导致数据错误的时间前滚。最后,完全的数据镜像可以在远端保存一份数据来避免灾难。高级的数据库管理器可以自行分发它们所管理的数据以提高数据库弹性和性能。
1、SQL数据库恢复技术
SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文ldf的方式。下面将主要讨论一下后者的备份与恢复。
假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器) (1)、正常的备份、SQL数据库恢复方式 正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。 卸下数据库的命令:Sp_detach_db 数据库名 连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,...16] sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′使用此方法可以正确恢复SQL 和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。 例子: 假设数据库为test,其数据文件为,日志文件为。下面我们讨论一下如何备份、恢复该数据库。 卸下数据库:sp_detach_db 'test' 连接数据库:sp_attach_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\','C:\Program Files\Microsoft\SQLServer\MSSQL\Data\'sp_attach_single_file_db'test','C:\ProgramFiles\Microsoft\SQLServer\MSSQL\Data\'
(2)、只有mdf文件的恢复技术由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息设备激活错误。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\'可能有误。已创建名为'C:\Program Files\Microsoft SQL Server\MSSQL\Data\' 的新日志文件。但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。
设备激活错误。物理文件名 'd:\' 可能有误。 怎么办呢?别着急,下面我们举例说明恢复办法。 A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。 B.停掉数据库服务器。 C.将刚才生成的数据库的日志文件删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件。 D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。 E. 设置数据库允许直接操作系统表。 此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。 use master go sp_configure 'allow updates',1 go reconfigure with override go F.设置test为紧急修复模式 update sysdatabases set status=-32768 where dbid=DB_ID('test') 此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表 。 G、下面执行真正的恢复操作,重建数据库文件和日志 rebuild_log('test','C:\Program\Files\Microsoft\SQLServer\MSSQL\Data\') 执行过程中,如果遇到下列提示信息: 服务器: 消息 5030,级别 16,状态 1,行 1 未能排它地锁定数据库以执行该操作。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。 正确执行完成的提示应该类似于:( 警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。 H. 验证数据库一致性(可省略) dbcc checkdb('test') 一般执行结果如下: CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
I.设置数据库为正常状态 sp_dboption 'test','dbo use only','false' 如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。
J、最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成 sp_configure 'allow updates',0 go reconfigure with override go
2、ORACLE数据库恢复技术
(1)、恢复的意义
当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重新建立一个完整的数据库,该处理称为数据库恢复。恢复子系统是数据库管理系统的一个重要组成部分。恢复处理随所发生的故障类型所影响的结构而变化。
(2)、恢复的方法
① IMPORT方法:
利用IMPORT,将最后一次EXPORT出来的数据文件IMPORT到新的数据库中,这种方式可以将任何数据库对象恢复到它被导出时的状态,此后的变化将无法挽回。IMPORT的命令可以交互式进行,各参数的具体含义见ORACLE EXP/IMP参数详解。这种方式适用于没有采用archive 模式的环境。
② 安全的恢复方法:
如果数据库运行在archive 模式下,那么一旦数据库损坏则可以通过冷备份(热备份)和归档备份将数据库恢复到断点状态。
数据库控制文件恢复(假设所有控制文件均被破坏):
数据库基于文件系统: 利用操作系统的tar、cp等命令即可。
数据库基于裸设备:dd if=$ORACLE_BASE/ of=/dev/rdrd/drd1 seek=12
数据库数据文件恢复
数据及索引表空间、系统表空间的恢复:
回拷相关的数据库文件和该数据文件备份以来所有生成的所有逻辑日志文件并执行如下命令:
svrmgrl > startup mount
svrmgrl > alter database recover automatic
如果控制文件被破坏,则:svrmgrl > alter database recover using backup controfile; 按照提示输入log文件名和redolog文件名
svrmgrl > alter database open resetlogs;
数据库临时文件和回滚表空间的恢复:简单地offline drop 并重建即可
注意:如果数据库不运行在archive 模式下,则恢复只能恢复到上次备份时的状态。 关于archive 模式的设定,以及备份的相关技术,参见ORACLE数据库备份技术
③ ORACLE表空间恢复方案
(一)、户表空间
错误现象:在启动数据库时出现ORA-01157,ORA-01110或操作系统级错误例如ORA-07360,在关闭数据库(使用shutdown normal或shutdown immediate) 时将导致错误ORA-01116,ORA-01110以及操作系统级错误ORA-07368
解决以下有两种解决方案:
方案一、用户的表空间可以被轻易地重建
即最近导出的对象是可用的或表空间中的对象可以被轻易地重建等。在这种情况下,最简单的方法是offline并删除该数据文件,删除表空间并重建表空间以及所有的对象。
Svrmgrl> startup mount
svrmgrl> alter database datafile filename offline drop;
svrmgrl> alter database open;
svrmgrl> drop tablespace tablespace_name including contents;
重建表空间及所有对象。
方案二、用户的表空间不能够被轻易地重建
在大多数情况下,重建表空间是不可能及太辛苦的工作.方法是倒备份及做介质恢复.如果您的系统运行在NOARCHIVELOG模式下,则只有丢失的数据,在online redo log中方可被恢复。
四、数据库恢复技术的区别
1、Oracle跨平台,SQL Server只能运行在Windows上,而Windows能够安装的硬件是有限的,如Sun的Sparc服务器不能安装Windows,一些大型机、小型机也只能装UNIX,在这些高端机器上就只能跑Oracle了,这注定了Oracle就是高端数据库,而SQL Server呢,中低端。
2、Oracle真正实现了行级锁,SQL Server也宣称实现了行级锁,但你实际去试,如果不加索引,其实是不行的。
3、Oracle因为有多版本数据的技术,读写操作不会相互等待,虽然SQL Server 2005学习Oracle增加了snapshot机制,从而也引进了多版本数据(MY SQL也有多版本数据机制,不能说一定是学习Oracle,但是实际效果感觉就是2个版本的数据,隔离级别为read committed时候,读写不再相互等待,但是把隔离设置为Serializable还是会产生读写相互等待。
4、Oracle的事务日志归档相当方便,而SQL Server要用事务日志备份来实现,而且还要配置自动作业,启动agent服务。
5、Oracle的数据字典丰富,使得DBA容易判断数据库的各种情况,虽然SQL Server 2005学习了Oracle的数据字典的特点,但从数量及方便程度上还是相差太多。个人感觉这是Oracle最人性化的地方。
6、Oracle的PL/SQL比SQL Server的T-SQL功能强大很多。
7、Oracle的触发器比SQL Server的种类多几种。
8、Oracle的备份恢复原理相当简单明了,备份就在操作系统上拷贝数据文件好了,恢复呢,再拷贝回来,数据是旧的,不怕,应用重做日志好了。SQL Server呢,虽然原理在本质上还是这些,但操作起来麻烦多了,麻烦到让你体会不到其本质。
9、Oracle数据库启动可以有多个阶段,使得DBA可以在不同的情况下,通过启动到特定的阶段解决一些特殊问题,而SQL Server只要服务一启动,所有数据库就都打开了。
10、SQL Server给人的感觉是简单易用,但是我要说,如果你继续向前走,就会发现SQL Serverr的体系结构相当复杂(注意我这里是说的复杂),大体还是沿袭的Sybase的体系结构,这种复杂结构,估计很难有根本性的改变,而Oracle呢,时间越长你越会觉得其体系结构严谨,虽然开始会感觉很难。我的一个比喻,SQL Server是傻瓜相机(就是那些一两千的小数码),Oracle是单反相机(40D,5D,D300),如果你是入门者,那用傻瓜相机好了,在各种环境下拍摄,基本都过得去,用单反,光圈、快门都要自己设定,反倒不如傻瓜相机的效果,如果你是高手了,那傻瓜相机就很难得心应手了。
11、Oracle的书籍一般都比较深,随便一说就是一大批,Epert Oracle、Practical Oracle、Cost-based Oracle,SQL Server呢,恐怕只有那套Inside SQL Server了,虽然SQL Server的书籍数量比Oracle的多的多(特别是在国内),但多数都是step by step的入门书。
12、对比SQL*PLUS与sqlcmd(或2000的osql,的isql),sqlcmd的功能是太简陋,差得太多了。
13、SQL Server的最大优点就是和Windows结合紧密,易用,但是要注意事情都是两面的,这些优点可能导致其致命的缺点,例如易用,使得搞SQL Server的人可以不求甚解,有时候不求甚解是没问题的,但是有时候不求甚解可能会造成灾难,特别是对搞数据库的人来说。不好意思,本来要说SQL Server的优点呢,最后也成了缺点了。
五、结束语:
恢复技术是保证内存数据库运行可靠的关键技术。传统日志恢复技术由于存在产生过多不必要的日志的缺点,本文研究了一种新的日志恢复技术来尽可能的减少日志数量,并在此基础上提出了快速日志恢复算法。本文提出的恢复技术算法简单可以大大的节约系统的资源。然而,内存数据库恢复是一个十分复杂而庞大的技术,所以该方法还有待完善。
参考文献:
1.陈世洪;王晓海;廖建华 SQL Server 2000管理、开发及应用实例详解 2006
QUALITY LEARNING;施平安 SQL Server 2005实现与维护 2007
3.刘威,杨永吉;Web数据库的实现技术[J];长春大学学报;2001年04期
4.谢美意.朱虹.冯玉才.胡贯荣 自修复数据库系统设计实现关键问题研究 [期刊论文] -小型微型计算机系统2010(10)
5.陈驰.冯登国.徐震 数据库事务恢复日志和入侵响应模型研究 [期刊论文] -计算机研究与发展2010(10)
PAGE
第 PAGE 2 页 共 NUMPAGES 8 页