本帖最后由 easthomeRT 于 2015-5-6 12:49 编辑
数据库快照是SQL Server2005企业版新增加的功能,一直到现在最新的SQL Server版本仍然支持该技术,今天的主题就是和大家分享数据库快照技术在企业中的应用。 什么是数据库快照? 数据库快照是源数据库的只读静态视图,一个源数据库可以有多个数据库快照,并且可以作为数据库驻留在一个SQL Server实例中。 数据库快照有什么作用? 通过上面的介绍,我们已经对数据库快照有了基本的认识,也就是数据库快照是一个只读的状态,这也就决定了快照的使用场景,那就是用于报表。除此之外,我们还可以把快照中的状态还原到源数据库,这也就有了另外一个使用场景,逻辑错误恢复。 数据库快照如何工作? 比如在12点时为源数据库创建了一个快照,如下图: 
SQL Server会在实例中创建一个空文件的快照数据库,这个快照数据库也就是源数据库的数据库快照了,它是只读状态,如果要查询这个快照数据库,则是这个源数据库12点时的数据状态,既然是空文件也就是页里没有数据,那是如何查询到数据的呢?这也就是快照数据库有意思的地方,再看下图: 
通过图例可以清楚的看到,如果要查询这个SQL Serve数据库快照,就会被重定向到源数据库,所以返回的数据是源数据库的数据,这也就是查询到数据的原理,然而这也就有了另一个问题,如果在创建数据库快照后,源数据的原始数据发生了变更,那再查询会是什么数据呢?还是用图例说明问题,看下图: 
相信有人已经猜到了,既然是快照肯定查询到的是创建快照时间点的数据状态了,原理在图中已经很明白的说明,就是源数据库中的原始数据如果变更,则会把变更前的数据COPY一份写入到对应的数据库快照空白文件页中,这时数据库快照就有了数据,不再全是空白的页了,此时再查询SQL Server数据库快照,查询到的是数据库快照中的数据(也就是原始数据的副本),看似复杂其实很简单,也就是一句话,查询数据库快照查询到的是源数据库创建快照时间点的数据状态。 说了这么多,接下来给大家演示下,如何创建数据库快照、查询数据库快照,以及将数据库快照中的数据还原回源数据库: 第一步:创建数据库快照 在easthome数据库中有一个表t1,表中数据如下: 
创建数据库快照: 
创建完成后在左侧的导航窗口可以看到已经创建好的数据库快照。 第二步:查询SQL Server数据库快照 
可以看到,查询到t1表中的数据是1,这时源数据库中的数据还没有发生变更,是被重定向到了源数据库,如果源数据库原始数据变更,则会被COPY到数据库快照中,查询到的数据还是1,与我们刚才介绍的理论是一样的。 第三步:还原数据库快照 现在我将源数据库easthome中的表t1变更,如下: 
查询SQL Server数据库快照仍然是1,如下: 
假设我们的修改是错误的,还可以通过数据库快照还原回原始的数据状态,如下: 
还原后再查询源数据库Easthome数据库回到了变更前的状态。 好了各位,这就是SQL Server数据库快照技术,大家赶快看看在你的企业中是否可以用上呢! 此文出自东方瑞通王晓哲老师,转载需注明出处。
|