SQL Server灾难恢复:重创历史性数据

这是我希望你永远不要面对的一个任务:永远都不需要重新创建不同时间点上的数据,以此来澄清一 个可疑的动作或则和揭示损失或者被偷的数据。大多数的数据库都在核心数据层上存储数据,上面只为终 端用户和数据库管理员显示数据的最近状态。这就意味着你只能看到最新版本的数据,你无法识别在数据 生命周期中不同时间点上特定数据的下落。

作为一个数据库管理员和顾问,我见到许多的数据库只存储当前的数据快照,而不是数据在其生命周 期中发生变化的每个历史时期的数据行。在大多数情况下,这对于数据库来说都是不错的,因为每个事务 的一次迭代都会让你的数据库的规模比现在的尺寸大上100到1000倍。这是因为它需要保证数据库处在可 管理的层面上,历史性的数据行通常不会存储,因此不容易重新创建。

金融行业则采用了相反的方式。不仅仅是存储数据的最近状态,它还存储了发生的每个事务,并且将 条目还原到变化之前。这个方式意味着数据被写入,但是它永远不会发生变化。任何的历史时间点都可以 轻松地显示出来,需要重新创建数据等其他操作。从纯粹的感觉出发,检索金融数据的变更并不像你存储 在数据库中的其他数据那么频繁。就是说,你应该调查一下你需要检索哪些历史数据,以及那些类型的数 据只需要你存储最新版本即可。

市场上也有此类工具,例如Lumigent Technologies公司的AuditDB和 Idera公司的 SQL compliance manager,它们都可以让你捕捉数据库中发生的每个变化的每个阶段。它用了非常大的空间来存储数据, 只有用上面提到的工具,你才可以检索数据随着时间变化的不同状态——除非是你修改了你的 应用程序来存储每个历史数据行。当然,还有其他的选择,例如使用触发器来捕捉每个数据变更,但是, 还是这个问题,你的存储空间需要很大,因为使用触发器的时候对你的服务器的要求很大。

不使用工具或者修改你的应用程序来捕捉每个历史性数据行的话,你就剩下无尽的痛苦和无限的麻烦 来尝试重新创建你的数据了。几年之前,我曾经接受了这样的任务,重新创建几年前的保健记录,以此来 发现一些可疑的行为。那时候,上面提到的工具还不存在,我就尝试使用触发器,还有额外的存储需求, 都无法选择。

重新创建每个历史性特定数据集合的视图的过程,是从归档备份磁带的检索开始的。让我们感到惊恐 的是,我们被通知,每个月只有一盘磁带用于长期的存储,因此我们只能创建每个月一次的快照。当我们 开始重新存储磁带的时候,我们再次郁闷地发现,有些磁带已经没法读了。那时候的数据库的规模只有 10GB,但是需要一遍又一遍地重新储存,还有要捕捉到的数据的话,需要我们在适当的位置重新存储,因 为这些是9GB磁盘驱动的时代,没有足够的存储空间。今天,10GB是个极小的数字。现在的数据库规模在 100GB到500GB的范围。所以,即使是存在较大的驱动,整体的问题仍然存在。

我知道重新创建历史性数据的任务不是经常发生的情况,但是我也知道,我曾经面对过这样的挑战好 几次。作为一名数据库管理员,保护数据并帮助你的公司尽可能地再次制造是你的责任。为了理解真正的 需求和数据的重要性,你必须询问一些问题来帮助你判断需求。基于你学到的内容,在合适的地方采取措 施将会保证你可以重新创建你需要的东西。

再一次提到,这里有3个选项考虑让你了解什么是可能的,什么是不可能的:

第三方工具,例如Lumigent的AuditDB 或者Idera的 SQL compliance manager

使用触发器或者修改其它应用程序

备份和重新存储的方法

根据你的选择,你需要理解什么是可能的,什么是不可能的。通过使用第三方工具,你可以重新创建 每个发生的变化。这些工具构建在业务处理中,可以最小化对服务器和数据库的性能影响,它们可以让你 有选择的捕捉重要的数据。使用触发器或者其它经过修改的应用程序是另一个很好的选择,但是如果你的 系统非常繁忙,如果你用这样的方式的话,你的性能会受到很大的影响。

最后一种方式,使用备份和重新存储,需要进行调查以便你能够理解长期的备份存储。查明存储多长 时间的备份,存储哪些类型的备份,以及你重新存储所有步骤的可能性。即使是一天只进行一次完全备份 ,你仍然有潜在的风险会丢失某一天的变更,于是你需要在那一天进行变更的恢复。在我所涉及的案例中 ,每个月都可能会发生很多很多的动作无法重新创建。

根据纸质的记录来重新创建计算机记录的日子一去不复返了。越来越多的信息只在线抓取。如果没有 采取适当的措施的话,数据就会永远丢失,人们永远也不知道发生了什么。作为一个数据库管理员,你需 要理解你的角色,保持系统在线,是你的数据的,实际上也是全公司的保护神。

时间: 2024-08-21 07:34:08

SQL Server灾难恢复:重创历史性数据的相关文章

SQL Server和Oracle防止数据锁定的比较

oracle|server|比较|数据 廖铮 2002-5-30 14:23:50 -------------------------------------------------------------------------------- 数据库并行访问,也就是两个或两以上用户同时访问同一数据,这也是数据库引擎如何设计和实现适度反应所面临的最大问题.设计优良.性能卓越的数据库引擎可以轻松地同时为成千上万的用户服务.而"底气不足"的数据库系统随着更多的用户同时访问系统将大大降低其性

SQL Server 7.0 的数据迁移到MySQL上的一种方法

mysql|server|数据 Microsoft SQL Server 7.0 的数据迁移到MySQL上的方法 Zhbforce   想必大家都很喜欢用Word打字,用Excel进行计算和规划,用PowerPoint作幻灯片进行展示-,但是这只用到了Office系列产品的很少的一部分功能.据调查,绝大部分用户只用到了Office产品的20%的功能,很少有人注意到Visual Basic for Application.实际上,熟悉掌握VBA的功能可以使你的工作事半功倍,尤其对会计.金融等专业来

如何在SQL Server 2005中实现数据同步

现在假如有一个这样的应用,有一个游戏服务商在推广一个大型游戏的时候,现在架设了多台数据库服务器,为了数据的便于统计,最终这些数据可以自动的转入到指定存储的另一台服务器中,这时候就会面临着一个这样的问题,如何保证这些多台数据库之间的数据的同步呢? 我们就可以使用复制的办法,复制是将一组数据或数据库对象从一个数据库复制和分发到另外一个数据库,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据.使用复制,可以在局域网和广域网上将数据分发到不同位置,可以确保分布在不同地点的数据自动同步更新,从

用VB存取SQL Server中的图像数据

本文介绍MIS SQL Server对图像数据的存储机制和存取方法.针对VB开发工具,介绍了一种通过ADO Field 对象的GetChunk 方法和AppendChunk 方法来存取MIS SQL Server中的图像数据的方法. 在一个完善的医院信息MIS中,图像数据的存取是必不可少的,比如X光片.CT像片的保存.一方面,这些图像数据在远程诊疗为准确诊断病情提供了重要的依据,另一方面,也为快速查阅病人资料提供了基本条件.图像数据的存取在其它应用系统如GIS中也有广泛的应用. 1.SQL Se

恢复SQL Server被误删除的数据(再扩展)

原文:恢复SQL Server被误删除的数据(再扩展) 恢复SQL Server被误删除的数据(再扩展)   大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的恢复 这个是一个缺陷,本人决定对这个存储过程扩展一下,支持对log backup文件里的delete语句进行恢复   实验步骤   1.首先先准备好测试表和测试语句 USE [sss] GO --建表 CREATE TABLE testdelete

sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同

原文:sql点滴38-SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同 说明:       以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server 2008中增加了一个新特性,除了导出表的定义外,还支持将表中的数据导出为脚本. 步骤:     右击需要导出数据的数据库,在弹出式菜单中选择"任务"下的"生成脚本"选项      在第二步选择"高级选项"如果不是2008(R2)的选择 &

[Python]Python/PHP如何查询sql server中NTEXT类型数据

[Python]Python/PHP如何查询sql server中NTEXT类型数据 Version Date Creator Description 1.0.0.1 2006-11-23 郑昀 草稿   继续阅读之前,我们假设您熟悉以下知识: n         Python / PHP n         SQL Server 2000 SP4以上版本的Microsoft sql server n         pymssql n         NTEXT类型 本文讨论了在Python中

SQL Server 2008 数据库误删除数据的恢复

原文:SQL Server 2008 数据库误删除数据的恢复 原文:http://www.cnblogs.com/dudu/archive/2011/10/15/sql_server_recover_deleted_records.html SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可.但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的数据库完全备份. 2. 数据库的恢复模式(Recovery mode)是"完整(Full)". 针对这两个前提

c#-如图,为什么DataSet从sql server获取的字符串数据带省略号?

问题描述 如图,为什么DataSet从sql server获取的字符串数据带省略号? 我要对数据内容进行判断,结果老是不符.后来断点调试,放大镜查看DataSet对象,如图,发现它有2列的值是带省略号的,这2列在sql server里的数据类型是 char(50).vchar(50).nvchar(50), 3种我都换过,但是程序运行后DataSet对象那里还是带省略号.怎么会出现这种情况呢 解决方案 是因为你数据库的字段长度比较大,虽然你只有两个字 实际上所占字符为你的字段长度,建议格式化,l

sql-关于Sql server如何在修改数据后响应到客户端(Winform+Sql server)

问题描述 关于Sql server如何在修改数据后响应到客户端(Winform+Sql server) 不需要客户段主动循环查询数据库数据是否更改,要求做到数据库发生更改时响应客户端,随即客户端做出相应的指令 解决方案 我也有和你同样的问题,如果有人回答了,请麻烦你通知我一声好么,谢谢了先.