一、备份和还原概述。

    1、为什么要备份?
      对于生产数据来讲,数据的安全性是至关重要的,任何数据的丢失都可能产生重要后果。
      造成数据的丢失主要有以下几类:
      a,程序错误。例如:程序运行异常终止,或程序逻辑错误包括没有使用正确的SQL语句。
      b,人为错误。例如管理员误操作,删除了重要数据和表。
      c,计算机失败。如系统崩溃,软硬件引起的错误。
      d,磁盘失败。
      e,灾难和偷窃。
      ....
      做好数据备份和还原有很大的重要性。
    2、备份类型
     SQL Server中提供了三种常用的备份类型
     a,完整备份。包括对整个数据库、部分事务日志、数据库结构和文件结构的备份。完整备份代表的是完成         时刻的数据库。完整备份是备份的基础,为任何其它备份提供了基准。
     c,差异备份。指对上一次完整备份之后所有更改的数据做备份,备份过程能够识别出数据库中那一部分被         修改了,并只对这一部分做备份。
        差异备份的优势是速度,备份数据库所需要的时间很少,但差异备份要求是先已执行过一次完整备份。
     d,事务日志备份。它记录了数据库的所有改变。注意:
        *在执行了至少一次完整备份之后,才能备份事物日志。
        *在简单恢复模式下不能备份事务日志。
        *如果没有与其相一致的数据库备份,则不能恢复事物日志。
        *事务日志主要备份T—SQL语句,而不是整个数据库结构、文件结构或是数据。
    3、恢复模式
     SQL Server提供了以下三种恢复模式:
      a,简单恢复模式。主要用于小型数据库和不经常更改的数据库。在简单恢复模式下,不活动的日志将被删除,所以不需要事务日志备份。简单恢复模式并不适合生产系统。因为对于生产系统而言,丢失最新的更改是无法接受的。注意:在简单恢复模式下,不支持还原单个数据页。
      b,完整恢复模式。完整恢复模式可以在最大范围内防止出现故障时丢失数据,它包括数据库备份和事务日志备份,并提供全面保护,使数据库免受故障的影响。这个模式使用数据库和所有日志的备份去恢复数据库,如果日志没有损坏,SQL Server可以恢复所有数据,除了在失败那一刻的事务。
      c,大容量日志恢复模式。可以对大容量日志操作进行最小记录,提供了良好的记录,且占用较少的日志空间。但是,大容量日志恢复模式增加了这些大容量复制操作丢失数据的风险,因为最小日志记录大容量操作不会记录事务。只要日志备份包含大容量操作,数据库就只能恢复到日志备份的结尾,而不能恢复到某个时间点或日志备份中某个标记的事务。注意:对于生产数据库都必须在完整恢复模式下,当需要执行大容量日志记录操作时,才会切换到大容量日志记录恢复模式。一旦操作完成,应立即切换回完整恢复模式。
    4、备份设备
      a,SQL Server支持的媒体 。磁带和磁盘
        *磁带设备必须连接到运行SQL Server实例的计算机上。不支持到远程磁带设备上。
        *如果磁带备份设备操作过程中已满,但还需要写入一些数据,SQL Server将提示要更换新磁带并继续备份操作。
        *磁带的可用性与耐久性多高于磁盘。
      b,备份设备
        建立的一个文件来存储备份的数据,这个备份文件也叫做备份设备。
        SQL Server使用物理设备名称或逻辑设备名称标识备份设备。
   二,备份和还原策略。
         备份策略                                  注意事项
         完整备份                        小型数据库或者数据库很少改变或只读。
                                         在数据改变的时候,定期做完整备份。

 
         完整备份+差异备份               数据库有一定的规模,数据库定期更改但不频繁,如果每次做完                                      完整备份用比较长的时间,不可实施。
                                         可以定期做完整备份,数据更改后再定期做差异备份。

 
         完整备份+事务日志备份           可以定期做事务日志备份,更长时间间隔做定期差异备份,更长           或完整备份+差异备份+           时间间隔做完整备份         
          事务日志备份
       1,完整备份和还原
          通常在以下情况时需要做还原整个数据库。
          a,数据库物理磁盘损坏。
          b,数据库被破坏或删除。
          c,将数据库还原到另外一个SQL Server实例。
       2,完整备份+差异备份和还原
          完整备份被称为“基准备份”。差异备份仅记录自基准备份后更改过的数据。差异备份比完整备份更小,更快,可以简化频繁的备份操作,减少数据丢失的风险。
       3,完整备份+事务日志备份与还原
         日志备份一定要保证次序是连续的。如果中间的备份出了问题,则还原操作会遇到很×××烦。
         对于比较大的数据库可以在完整备份和事务日志备份之间执行差异备份。例如:在每周日执行一次完整备份,每周一至周六执行一次差异备份,每天每隔4个小时执行一次日志备份。其中,差异备份的作用是可以减少所需还原事务日志备份的数量,从而缩短恢复数据库的时间。还原的顺序是先还原最近的完整备份,接着还原最近的差异备份(如果存在),然后再按顺序还原自最近的差异备份以来的每一个事务日志备份。
         只有在完整恢复模式和大容量日志恢复模式下,才能进行事务日志备份。使用事务日志备份,可以恢复数据库到失败的时间点或指定的时间点。事务日志备份的开销要小于完整备份,因此应该更多的建立事务日志备份以减少数据丢失的风险。
         如果数据库文件损坏或不可用,而日志文件没有损害坏,管理员可以执行尾部日志备份,获取自上一次以来的数据库活动并以此来恢复数据库到失败的时间点。
         还原事务日志之前,首先要还原数据库的完整备份,之后还原最近的差异备份,最后顺序地还原所有的事务日志的备份。
     三,备份系统数据库。
       1,系统数据库概述:     
        SQL Server主要包括四大系统数据库:
       a,master数据库
          从整体上控制SQL Server的所有方面。这个数据库中包括所有的配置信息、用户登录信息、当前正在服务器中运行的信息等等。它是整个系统中最重要的数据库。
       b,model数据库
          为新数据库提供模版和原型。当用户建立一个i新的数据库时,SQL Server会把model数据库中的所有对象建立一份拷贝并转移到新数据库中,然后把新数据库的所有多余空间用空页填满。
       c,tempdb数据库
          它供所有访问SQL Server的用户使用,这个数据库用来保存所有的临时表、存储过程和其他SQL Server建立的临时对象。每次SQL Server重新启动,都会清空tempdb数据库并重建。因此永远不要在tenmpdb数据库中建立需要永久保存的表。
       d,msdb数据库
         是SQL Server中的一个用户数据库的特例。所有的任务调度、报警操作都存储在msdb数据库中。该数据库的另一个功能是存储所有的备份历史。
       
        因此系统数据库除了tempdb不需要备份外,其他数据库都应该及时备份。
      2,备份和恢复master数据库
         必须备份master数据库,如果master数据库以某种方式被破坏,可能无法启动SQL Server。
         如果master数据库更改后没有进行备份,任何自上一次备份后的更改都将在还原备份中丢失。建议最好不要在master数据库中创建用户对象,否则需要每次创建用户后备份master数据库。
          导致master数据库更新并需要执行备份的操作类型包括:
        a,创建或删除用户数据库。
        b,添加登录或执行其他与登录安全有关的操作。
        c,更改任何服务器范围的配置选项或数据库配置选项。
        d,创建或删除逻辑备份设备。
        e,将服务器配置为分布式查询和远程过程调用,如添加链接服务器或远程登录。
       还原master数据库
       a,重新生成master数据库,
          运行指令,start /wait setup.exe /qn INSTANCENAME="MSSQSERVER" REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=<NewStrongPassword>`
       2,还原master备份。
         进入单用户模式,进入SSMS,先断开连接,在下、新建查询,执行以下还原命令:
        RESTORE DATABASE master
        from disk='C:\program Files\Microsoft SQL Server\MSSQL.1\MSSQL\backup\master.bak'
        WITH REPLACE   
       3,重新启动数据库服务  
       注:如果属于master数据库丢失设置出现错误,由于可以访问master数据库(至少部分可用)而能够启动SQL Server实例,则可以从完整数据库备份中还原master数据库,就不需要重新建立master数据库。
       
       其他系统数据库可以直接从完全备份中恢复,不需要像master数据库一样从单用户模式恢复。