精华内容
下载资源
问答
  • 数据库快照

    2017-12-14 18:59:00
    数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。...

    简介
        数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。快照还可以和镜像结合来达到读写分离的目的。下面我们来看什么是快照。
     
    什么是快照
        数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。换句话说,快照可以理解为一个只读的数据库。利用快照,可以提供如下好处:
        提供了一个静态的视图来为报表提供服务
        可以利用数据库快照来恢复数据库,相比备份恢复来说,这个速度会大大提高(在下面我会解释为什么)
        和数据库镜像结合使用,提供读写分离
        作为测试环境或数据变更前的备份,比如我要大批导入或删除数据前,或是将数据提供给测试人员进行测试前,做一个快照,如果出现问题,则可以利用快照恢复到快照建立时的状态
     
    快照的原理
        与备份数据库复制整个数据库不同,快照并不复制整个数据库的页,而是仅仅复制在快照建立时间点之后改变的页。因此,当利用快照进行数据库恢复时,也仅仅将那些做出改变的页恢复到源数据库,这个速度无疑会大大高于备份和恢复方式。这个原理如图1所示(图摘自SQL Server 2008揭秘)。
        
        图1.镜像的原理

       1103298-20171214185431654-175004528.png

        由图1可以看出,快照并不是复制整个整个数据库,而仅仅利用快照存储原始页。因此可以看出,源数据库上建立快照会给IO增加额外负担.当对快照数据库进行查询时,快照时间点之后更改的数据会查询数据文件,。这个概念如图2所示(图摘自SQL Server 2008揭秘)。
        1103298-20171214185510373-378318387.png

        图2.查询快照数据库时查询的分布
    写入时复制(Copy On Writing)和稀疏文件(Sparse Flie)
        由上图中可以看出,快照数据库的文件是基于稀疏文件(Sparse File),稀疏文件是NTFS文件系统的一项特性。所谓的稀疏文件,是指文件中出现大量0的数据,这些数据对我们用处并不大,却一样占用着磁盘空间。因此NTFS对此进行了优化,利用算法将这个文件进行压缩。因此当稀疏文件被创建时,稀疏文件刚开始大小会很小(甚至是空文件),比如图3所示的文件就是一个稀疏文件。虽然逻辑上占了21M,但文件实际上占了128KB磁盘空间。
        
        图3.一个稀疏文件
       1103298-20171214185538498-1470901012.png

        对于快照来说,除了通过快照数据库文件的属性来看快照的大小之外,也可以通过DMV来查看,如图4所示.
        1103298-20171214185548451-99791981.png

        图4.通过DMV查看快照数据库大小
        
        而当快照创建后,随着对源数据库的改变逐渐增多,稀疏文件也会慢慢增长,概念如图4所示。
        1103298-20171214185559920-2109850755.png

        图5.随着源数据库的更改越来越多,稀疏文件不断增长
     
        所以,通常来说,当稀疏文件增长到源数据库文件大小的30%时,就应该考虑重建快照了。
        而稀疏文件的写入是利用了微软的写入时复制技术(Copy-On-Writing),意思是在复制一个对象时并不是真正把对象复制到另一个位置,而是在新的对象中映射一个指针,指向原对象的位置。这样当对新对象执行读操作时,直接指向原对象。而在对新的对象执行写操作时,将改变部分对象的指针指向到新的地址中。并修改映射表到新的位置中。
     
    使用快照的限制
        使用快照存在诸多限制,由于列表太长(详细请参考MSDN:http://msdn.microsoft.com/zh-cn/library/ms175158.aspx#LimitationsRequirements),我只概括的说一下主要限制。
        当使用快照恢复数据库时,首先要删除其他快照
        快照在创建时的时间点上没有commit的数据不会被记入快照
        快照是快照整个数据库,而不是数据库的某一部分
        快照是只读的,意思是不能在快照上加任何更改,即使是你想加一个让报表跑得更快的索引
        在利用快照恢复数据库时,快照和源数据库都不可用
        快照和源数据必须在同一个实例上
        快照数据库的文件必须在NTFS格式的盘上
        当磁盘不能满足快照的增长时,快照数据库会被置为suspect状态
        快照上不能存在全文索引
        其实,虽然限制看上去很多,但只要明白快照的原理,自然能推测出快照应该有的限制。
     
    快照的创建和使用
        无论是使用SSMS或是命令行,快照只能通过T-SQL语句创建。在创建数据库之前,首先要知道数据库分布在几个文件上,因为快照需要对每一个文件进行copy-on-writing。如图6所示。
        1103298-20171214185617201-1833993480.png

        图6.首先查出数据库的文件分布
      
        根据图6的数据库分布,我们通过T-SQL创建快照,如图7所示。
        1103298-20171214185629748-1402002809.png

        图7,根据图6的数据库信息创建一个数据库快照
     
         当快照数据库创建成功后,就可以像使用普通数据库一样使用快照数据库了,如图8所示。
        1103298-20171214185640482-1998808664.png

        图8.快照数据库和普通数据库一样使用
     
        通过如下语句可以看到,快照数据库文件和源数据库的文件貌似并无区别,仅仅是快照数据库文件是稀疏文件,如图9所示。
        1103298-20171214185652295-1844369267.png

        图9.源数据库和快照数据库
     
        而删除快照数据库和删除普通数据库并无二至,也仅仅是使用DROP语句,如图10所示。
        1103298-20171214185701513-795380037.png

        图10.删除快照数据库
     
        我们也可以利用快照恢复数据库,这个恢复速度要比普通的备份-恢复来的快得多,这也可以将数据库呈现给测试人员,当测试结束后,恢复数据库到测试之前的状态。如图11所示。
        1103298-20171214185723357-1440014085.png

        图11.利用快照恢复数据库
     
    使用快照其他一些需要考虑的因素
        1.快照数据库的安全设置继承源数据库的安全设置。也就是说能访问源数据库的用户或角色也能访问快照数据库,当然,因为快照数据库是只读的,所以无论任何角色或人都无法修改快照数据库。
        2.我们由文章前面图5看出,随着快照存在的时间越来越长,快照会不断增长。所以推荐在快照达到源数据库大小30%之前,重新创建快照。
        3.由于快照会拖累数据库性能,所以数据库不宜存在过多快照。
    总结
        本文简单讲述了数据库快照的概念,原理以及使用。数据库快照可以在很多场景下使用,无论是用于报表,还是和镜像配合提供负载,以及利用快照恢复数据库,使用得当的话,快照将会是一把利器。
    转载于http://www.cnblogs.com/CareySon/archive/2012/03/30/2424880.html

    转载于:https://www.cnblogs.com/hjworld/p/8039311.html

    展开全文
  • SQL数据库快照

    2017-02-15 14:02:06
    数据库快照的使用 只有SQL server Enterprise Edition才有数据库快照。(附查询SQL server 版本的语法:)select @@version; 一、创建数据库快照 创建实例 create database TableName_Snap_20170215 --快照名称 on( ...

    只有SQL server Enterprise Edition才有数据库快照。(附查询SQL server 版本的语法:)

    select @@version;
    

    一、创建数据库快照
    创建实例

        create database TableName_Snap_20170215  --快照名称
        on(
            --源数据库的逻辑名称
            name = TableName,
            --快照存放的位置和文件名,路径必须存在,文件后缀可以任意
            filename = 'D:\database\snapshot\TableName_Snap.snap'
        )
            --指明为哪个数据库做快照
        as snapshot of  TableName
        go

    二、使用快照恢复数据库

        restore database TableName from snapshot = 'TableName_snap_20170215'
    

    说明:

    如果恢复时提示,“正在使用,无法更改数据库状态”,则最彻底的方法是重启SQL服务。
    如果判断只是占用的了几个进程,则可用下列方式结束进程

    结束SQL进程的语句

        select * from sysprocesses where db_name(dbid) = 'TableName'; --数据库名称

    这里写图片描述

        exec('kill 59');  --结束进程
    展开全文
  • SQL如何创建数据库快照

    千次阅读 2017-03-05 19:02:01
    最近开始学的数据库,使用的是SQL server 2008,以下是我学习数据库快照的笔记,如有错误还请指正。 什么是数据库快照数据库快照,顾名思义就是给数据库某个时刻拍的照片,是数据库(源数据库)的只读、静态视图。...
        最近开始学的数据库,使用的是SQL server 2008,以下是我学习数据库快照的笔记,如有错误还请指正。
    

    什么是数据库快照:
    数据库快照,顾名思义就是给数据库某个时刻拍的照片,是数据库(源数据库)的只读、静态视图。多个快照可以位于一个源数据库中,并且可以作为数据库始终驻留在同一服务器实例上。创建快照时,每个数据库快照在事务上与源数据库一致。在被数据库所有者显式删除之前,快照始终存在。

    如何创建数据库快照:

        下面是进行如下操作的一些最佳方法:命名数据库快照、创建它们时进行计时、限制它们的数量以及将客户端连接重新定向到快照。
    
        数据库快照的命名: 为了便于管理,数据库快照的名称可以包含标识数据库的信息,且每个数据库快照的名称具有唯一性。
        例如:
             .源数据库的名称
             .该新名称用于数据库快照的信息
             .快照的创建日期和时间、序列号或一些其他的信息(例如一天中的某个时间)以区分给定的数据库上的连续快照
    
    基于每天24小时制,这里的数据名称为TEST,那么就可以这样命名:
            TEST_snapshot_0600              --上午六时的数据库快照
            TEST_snapshot_1203              --中午12时3分的数据库快照
            TEST_snapshot_1820              --18时20分的数据库快照
    数据库快照的创建可以根据具体需要在不同的时刻进行创建。
    
    创建数据库快照的语句基本与数据库的创建相同,只不过在末尾加了AS SNAPSHOT OF DB_NAME(作为xx数据库的快照)
    

    下面是创建数据库快照的T-SQL语句:
    CREATE DATABASE db_name ON
    (
    NAME = db_name_data,
    FILENAME = ‘path\db_name_data.ss’
    )
    AS SNAPSHOT OF db_name;

    例:

    GO                              --执行批处理
        CREATE DATABASE TEST          
        ON 
        (
            NAME = TEST_data_1800,           --设置快照文件名称
            FILENAME = 'D:\SQL\TEST_data_1800.ss'  --指定快照文件位置
        )
        AS SNAPSHOT OF TEST;              --指定为数据库快照
        GO
    注意:创建数据库快照时,CREATE DATABASE 语句中不允许有日志文件、脱机文件、还原文件和不起作用的文件
    
    建好数据库快照后,点击对象资源管理器-数据库-数据库快照,就可以查看已建好的数据快照。
    
    如果要删除数据快照,可以使用以下语句:
    
    USE TEST                            --指定当前操作的数据库
        DROP DATABASE SalesSnapshot0600     --删除名为 SalesSnapshot0600 的数据库快照,而不影响源数据库
    
     删除后SalesSnapshot0600 的所有用户连接都被终止,并删除快照使用的所有 NTFS 文件系统稀疏文件
    

    将数据库恢复到数据库快照步骤

    1、标识要将数据库恢复到的数据库快照
    2、删除其他任何数据库快照。
    3、执行恢复操作
    如果数据库使用完整恢复模式,则在执行恢复之前,应先备份日志,恢复数据库快照要求源数据库具有RESTORE DATABASE 权限。
    
    TSQL语句如下:
    RESTORE DATABASE <数据库名称> FROM DATABASE_SNAPSHOT = <数据库快照名称>
    例:
    
    --Test to see if sales_snapshot0600 exists and if it 
    -- does, delete it.
    IF EXISTS (SELECT dbid FROM sys.databases
        WHERE NAME='sales_snapshot0600')
        DROP DATABASE SalesSnapshot0600;
    GO
    -- Reverting Sales to sales_snapshot1200
    USE master;
    RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';
    GO
    已恢复的数据库将保留数据库快照的权限和配置(例如,数据库所有者和恢复模式)。
    
    展开全文
  • 在SQL Server 2005中,它的另外一个强大的新特点是数据库快照数据库快照在初始化时读的数据文件是来自于源数据库的。当源数据库的数据发生变化 时,数据引擎就会将原始数据从源数据库拷贝到快照数据库中。这个技术...
  • SQL基础之数据库快照

    2017-11-23 17:47:39
    SQL基础之数据库快照 1.认识快照  如名字一样,数据库快照就可以理解为数据库某一时刻的照片,它记录了此时数据库的数据信息。如果要认识快照的本质,那就要了解快照的工作原理。当我们执行t-sql创建快照后,...

    SQL基础之数据库快照

    1.认识快照

      如名字一样,数据库快照就可以理解为数据库某一时刻的照片,它记录了此时数据库的数据信息。如果要认识快照的本质,那就要了解快照的工作原理。当我们执行t-sql创建快照后,此时就会创建一个或多个稀疏文件。稀疏文件的个数与数据库数据文件的个数相等且一定要相等,否则会报错。此时,稀疏文件只是一个空文件并没有在磁盘上分配空间存储用户数据,如果数据库没有任何更新那快照也将一直是空文件。快照唯一的一次写数据,仅发生在第一次更新数据库的数据页,这时快照会将数据页中的数据复制到快照中并在磁盘上真真的分配了空间。以后这个数据页无论怎么变化都与快照没关系,就这样其它页都在第一次更新数据前将这一页的数据复制到快照中,直到数据库的所有页都都被复制到快照中。当然这并不是很好的结果,因为这样的快照占用了大量的空间。另外快照没有冗余存储,所以为了保证数据库不出错还应该多方位考虑比如使用备份。

      创建快照后,当访问快照中的数据时如果数据页未更新那么将直接访问源数据库,如果数据页已更新那么将访问快照。知道了快照的工作原理后下一个疑问就是快照的作用以及何时使用它。快照的作用主要有2点:由于快照可以保存数据库某一时刻的数据信息,因此可利用快照做报表;由于快照保存了数据库的数据,可使数据库还原为创建快照时的状态,因此可利用快照作为一种安全和可靠性策略。使用快照恢复数据库一般比备份快得多,但恢复后的数据库将无法再进行前滚操作。不过有一种方式可以解决这个缺点,我们可以将源数据库对比数据库快照中的表,源数据库里误删或数据错误的表可根据快照中的表来建立新的数据表,并将快照中的数据全部复制到源数据库里创建的新表中。当表不多数据量不是很大时这种方法还是挺不错的。

    2.稀疏文件

      稀疏文件是一种文件存储的方式,当它被创建时稀疏文件占用的磁盘空间非常少,而用户数据并不会占用磁盘空间。这种文件虽然创建了但并未分配完整的存储空间,随着用户数据的写入稀疏文件才开始慢慢占用磁盘空间,当在windows中属性查看这个文件时会发现它的大小就是创建快照是源数据库的大小。稀疏文件以64KB的增量增加,也就是说稀疏文件的大小一定是64KB的整数倍。当增加一个64KB时,它可以存放8个数据页,而这64KB空间最开始为空字符串或只占用一点点用户数据,所以很稀少。随着用户数据的增加稀疏文件最终将等于源数据库的大小。我们可以使用t-sql来查看稀疏文件名: select physical_name from  sys.master_files,而在sys.database_files中则只会显示源数据库名,就算是在数据库快照中进行select。另外还可以使用sys.dm_io_virtual_file_stats函数返回表中的size_on_disk_bytes列来查看稀疏文件的真实大小。

    3.限制条件

      对于源数据库,在数据库快照存在期间,不得对源数据库进行删除、分离或还原,不得对源数据库和快照进行文件删除操作。但此时可以备份数据库,从这里可以看出数据库备份不会受到快照的影响。由于源数据库中的数据页第一次更新时会将数据页写到快照中,因此这必将影响对源数据库更新时的性能。源数据库必须处于联机状态且不能将源数据库配置为可缩放共享数据库。如果在镜像数据库中创建数据库快照,数据库必须处于同步镜像状态。

      对于数据库快照,快照必须与源数据库在相同的服务器实例上创建和保留,在快照拷贝源数据页时如果快照用尽磁盘空间或者遇到其他错误,那么就认为该快照为可疑快照并且必须删除快照。禁止对model数据库、master数据库和tempdb数据库创建快照,快照为只读文件不得更改数据库快照的任何规范,当然也就不能删除数据库快照中的文件了。不能备份或还原数据库快照,不能对数据库快照进行附加和分离操作。由于数据库快照使用的稀疏文件是NTFS文件系统提供的,因此只能在NTFS文件系统上建立快照。数据库快照会继承快照创建时源数据库的安全约束,不过由于快照的只读性因此继承的约束性不得修改。在日志传送配置中只能针对主数据库文件,而不能针对辅助数据库创建数据库快照。当从主服务器实例切换为辅助服务器实例时,必须先将数据库快照删除。不能将数据库快照配置为可缩放共享数据库,数据库快照不支持FILESTREAM文件组,如果源数据库中存在FILESTREAM文件组,则在数据库快照中将视这个文件组为脱机状态,并且数据库快照不能用于恢复数据库。

      快照始终反映创建该快照时的文件组状态,联机文件组将保持联机状态,脱机文件组将保持脱机状态,这是快照与文件组状态关系的本质。首先快照创建时,如果源数据库存在脱机文件组,因为稀疏文件不能存储脱机文件组,故源数据库中的脱机文件组在快照中将是脱机状态。创建快照后,源数据库不能对脱机文件组进行联机,这样的话脱机文件组将一直保持脱机状态。联机失败的原因在于使文件联机会对该文件进行还原,而在数据库快照存在期间不得对源数据库进行删除、分离或还原。如果创建快照时源文件组是联机的,那么此时若对数据文件进行脱机操作,在数据库快照中将仍然保持联机状态,也就是联机文件组将保持联机状态。接着如果访问快照中的数据,显然如果源数据库数据页没有更新那将访问源数据库,然而数据页所在的文件组已脱机,最终会产生访问错误而导致失败。

    4.操作快照

       在创建数据库快照时,msdn建议我们应该对源数据库创建多个数据库快照,这些快照代表着不同时间数据库的状态。并且我们还应该定时的更新数据库快照,以提高源数据库的正确性。在恢复数据库操作中,恢复前必须将其它数据库快照删除,另外若源数据库中含有只读或压缩文件、源数据库创建快照后对联机文件进行脱机都将无法进行数据库还原操作。任何对数据库具有restore database权限的用户都可以恢复数据库快照,但要注意恢复过程中除了数据页的恢复外还将覆盖旧的日志文件并重建日志。这样就无法对恢复后的源数据库进行前滚操作,建立快照后的所有数据都将丢失。

    --创建数据库快照的唯一方式就是使用t-sql
    
    --对应普通数据库,可以创建数据库的用户就可以创建对应的数据库快照
    --对应镜像数据库,只有sysadmin固定服务器角色成员才能创建
    create database testDB_SS on
    (
        name=testDB_data,                     --快照使用的数据文件名
        filename='E:\07_代码存放\testDB_SS.ss' --快照存放的路径
    )
    as snapshot of testDB
    go
    
    --通过数据库快照恢复源数据库,恢复完成的数据库将保留数据库快照的权限和配置
    --在恢复过程中,快照和源数据库都将不可用。如果恢复期间发生错误那数据库在重新启动后会再尝试恢复操作。
    restore database testDB from database_snapshot ='testDB_SS.ss'
    
    --删除数据库快照,操作完成后将关闭对快照的所有用户连接,显然稀疏文件将不存在
    drop database testDB_SS

    转自:https://www.cnblogs.com/fangyz/p/5782190.html


    ********************只要思想不滑坡,办法总比困难多*******************


    展开全文
  • 数据库快照了解

    千次阅读 2017-02-09 11:14:35
    ... 数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。是SQL Server在2005之后的版本引入的特性。快照的应用场景比较多,但快照设计最开始的目的是为了报表服务。比如我需要出201
  • 数据库快照 database snapshot

    千次阅读 2017-11-06 17:26:48
    可以这样理解,就是在某个时间点对指定数据库拍了一张快照,所以它是静态的,只读的,但本质上还是一个数据库,只要是数据库我们就是可以从里面取数据的,但是数据库快照这个数据库取数据库的原理是这样的:快照生成...
  • 今天听同事谈论数据库快照,想到前几天建发布订阅中的快照发布(Snapshot Publication)和事物发布(Transactional Publication),以为是同一个东西,其实不尽然。于是查了下数据库快照的内容。 一、数据库快照 ...
  • SQL Server 2005 数据库快照(database Snapshot) ...数据库快照将保持和源数据库快照被创建时刻一致,所以可被用来一些报表。并且由于数据库快照的存在,我们可以很容易的把数据库回复到快照创建时刻。 数据库快...
  • sqlserver2005镜像数据库与数据库快照

    千次阅读 2012-11-28 13:55:30
    sqlserver2005镜像数据库可以创建数据库快照数据库快照可以读取,查询,数据库报表作用,分担主数据库的压力。   CREATE DATABASE AdventureWorks_dbss1800 ON ( NAME = AdventureWorks_Data, FILENAME = ...
  • 创建数据库快照的唯一方法

    千次阅读 2013-11-27 21:11:42
    创建数据库快照的唯一方法
  • 【SQL Server学习笔记】数据库快照

    千次阅读 2012-08-04 11:26:33
    可以像连接到其他数据库一样连接到数据库快照,使用它们可以生成报表、测试、恢复数据。在处理大量的或者有潜在风险的数据库更新时,一旦失败,可以使用数据库快照进行数据恢复。 可以为一个数据库创建多个快照,...
  • sql server如何创建数据库快照 原创T_Tzz 最后发布于2018-04-17 20:05:57 阅读数 1925 收藏 展开 create database database_snapshot_test--(想要把快照备份成什么名字) on ( name = test,-- 文件的逻辑名 ...
  • 数据库快照是数据库(源数据库)的只读、静态视图,是 自SQLServer 2005中新增的功能。数据库快照提供了快速、简洁的一种数据库另类备份操作。多个快照可以位于一个源数据库中,并且可以作为数据库始终驻留在同一...
  • SQLServer之创建数据库快照

    千次阅读 2018-12-13 11:29:03
    创建数据库快照注意事项 语法:set transaction isolation level snapshot; 指定事务中任何语句读取的数据都将是在事务开始时便存在的数据的事务上一致的版本。 事务只能识别在其开始之前提交的数据修改。 在...
  • 数据库快照将保持和源数据库快照被创建时刻一致,所以可被用来一些报表。并且由于数据库快照的存在,我们可以很容易的把数据库回复到快照创建时刻。 数据库快照提供了一个把数据库回复到一个特定时间点的有效途径...
  • 数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。 自创建快照那刻起,数据库快照在事务上与源数据库一致。 数据库快照始终与其源数据库位于同一服务器实例上。 当源数据库更新时,数据库快照也将更新。...
  • SQL Server数据库快照的工作方式 翻译自:How Database Snapshots Work 最近有一个帖子《errorlog中的异常信息rolled forward 和rolled back》 里面说到: 每周六凌晨1点会出现以下信息,服务器及数据库未出现...
  • SQLServer2005数据库快照的简单使用

    千次阅读 2013-05-07 11:37:56
    SQLServer2005数据库快照的简单使用  快照理论:  数据库快照就是保存某个数据库在快照那一瞬间的状态.快照和备份原理上有所不同,但是功能有一点相同那就是可以将数据还原为备份的那个时刻.快照的原理是新建一个...
  • 数据库快照,自定义函数与计算列

    千次阅读 2006-10-23 18:42:00
    数据库快照,自定义函数与计算列1.数据库快照数据库快照就是保存某个数据库在快照那一瞬间的状态.快照和备份原理上有所不同,但是功能有一点相同那就是可以将数据还原为备份的那个时刻.快照的原理是新建一个数据库指针...
  • 这里一个总结 使用场景: 只读的报表查询(可以有多个版本) 分担源数据库压力 将数据静止在某个时间 对于人为失误问题的灾难恢复 主要限制: 要求企业版 数据库快照与源数据库必须在一个服务器实例 如果存在多个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,367
精华内容 33,746
关键字:

数据库快照怎么做