技术开发 频道

SQL Server数据库差异备份还原概述

  对只读数据库进行差异备份

  对于只读数据库,单独使用完整备份比同时使用完整备份和差异备份更容易管理。 当数据库为只读时,备份和其他操作无法更改文件中包含的元数据。 因此,差异备份所要求的元数据(如差异备份开始的日志序列号,即差异基准 LSN)存储在 master 数据库中。 如果在数据库只读时采用的是差异基准,则差异位图指示的更改多于在基准备份之后实际发生的更改。 额外的数据由备份读取,但不会写入到备份中,因为存储在 backupset 系统表中的 differential_base_lsn 用于确定在基准之后是否实际更改了数据。

  重新构建、还原只读数据库或者分离再重新附加只读数据库后,会丢失差异基准信息。 这是因为 master 数据库与用户数据库不同步。 SQL Server 数据库引擎无法检测或防止此问题的出现。 所有后续差异备份都不是基于最新的完整备份,从而可能会出现出人意料的结果。 若要建立新的差异基准,建议先创建完整数据库备份。

  对只读数据库进行差异备份的非常好的方法

  创建只读数据库的完整数据库备份之后,如果要创建后续差异备份,则请备份 master 数据库。

  如果 master 数据库丢失,请在还原用户数据库的任何差异备份之前,将其还原。

  如果分离和附加计划稍后对其使用差异备份的只读数据库,则应尽快执行此只读数据库和 master 数据库的完整数据库备份。

  SQL Server的差异备份还原

  在SQL Server中还原差异备份,需要先还原在差异备份时间点之前的一个完整备份,在还原完整备份时要加上NORECOVERY参数,示例SQL语句如下:

  RESTORE DATABASE [数据库名称] 
  FROM DISK = N'完整备份文件路径' 
  WITH FILE = 1,
  NOUNLOAD,
  STATS = 10,
  NORECOVERYGO

  在Management Studio中对应的选项是:

  Leave the database non-operational, 
  and do not roll back uncommitted transactions. 
  Additional transaction logs can be restored. 
  (RESTORE WITH NORECOVERY)

  如果没有加上NORECOVERY参数,默认是RECOVERY,则:

  在SQL Server 2012 Management Studio中通过窗口操作会出现错误提示:Unable to create restore plan due to break in the LSN chain.

  在SQL Server 2008/2012 Management Studio中执行SQL语句会出现错误提示:The log or differential backup cannot be restored because no files are ready to rollforward.

  还原差异备份时,如果只有一个差异备份文件需要还原,无需使用NORECOVERY参数,示例SQL语句如下:

  RESTORE DATABASE [数据库名称] 
  FROM DISK = N'差异备份文件路径' 
  WITH FILE = 1,
  NOUNLOAD,
  STATS = 10GO

  如果有多个差异备份文件需要还原,除了最后一个差异备份文件,其他都需要加上NORECOVERY参数。

  更多精彩尽在2014年4月10日-12日在北京五洲皇冠国际酒店举办的第五届中国数据库技术大会,3月25日之前订票可享受8.8折最低票价。

Facebook专家:Hadoop不足以处理大数据
进入官网了解更多详情


0
相关文章