毁掉日志备份链之后,备份链中断导致差距备份报错案例

 

误区 #20:在破坏日志备份链之后,要求一个完好无损备份来再度开端日志链
错误

   
本种类小说是作者在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL
Tuesday #11: Misconceptions about….
EVERYTHING!!,经过大家团队的翻译和整理公布在AgileSharp毁掉日志备份链之后,备份链中断导致差距备份报错案例。上。希望对大家具有扶助。

目前赶上一起有关”I/O is frozen on database xxx. No user action is
required. However, if I/O is not resumed promptly, you could cancel the
backup.”的案例。

方今一台SQL
Server服务器布署SQL Server
Backup后,发现每晚的反差备份老是失败,报如下错误:

事务日志备份会备份自上次事情日志备份以来全部的工作日志(倘若平素不曾过日志备份的话,那就从上三回完整备份开首)。有某个种档次的操作会中断事务日志的两次三番性,约等于说除非重新开端新的日志链,SQL
Server无法再开展日志备份。下边那两种操作都有或许引起日志链断裂:

 

出现难题的时候,我去履行2个非凡不难的SQL语句,执行时间十分短,检查并未阻塞。不奇怪景况下,应该是几秒就OK。后边检查错误日志,发现有恢宏那类音讯.而这几个点,我们平昔不备份数据库的功课。前边搜索,精通了一晃这一个音信出现的因由:

 

由总体恢复生机方式或大容积事务日志苏醒情势转为简单苏醒格局
从数量库镜像开展还原
备份日志时钦命了NO_LOG 或 WITH TRUNCATE_ONLY(还幸好SQL Server
二零零六中以此选项被废除了)

误区 #20:在毁掉日志备份链之后,需要2个全体备份来再一次开头日志链

 

Msg
3035, Level 16, State 1, Line 1

更加多请看:post BACKUP LOG WITH NO_LOG – use, abuse, and undocumented
trace flags to stop
it

错误

997755.com澳门葡京 1

没辙推行数据库”xxxx”
的反差备份,因为不存在当前数据库备份。请去掉WITH DIFFERENTIAL
选项后再行发出BACKUP DATABASE 以执行数据库的共同体备份。

由此上边的例子对此开展阐释:

 

 

Msg
3013, Level 16, State 1, Line 1

复制代码 代码如下:

   
事务日志备份会备份自上次工作日志备份以来全数的政工日志(借使一向不曾过日志备份的话,那就从上一回完整备份初叶)。有好两种档次的操作会中断事务日志的三番五次性,约等于说除非重新伊始新的日志链,SQL
Server不能再举办日志备份。上面那两种操作都有大概引起日志链断裂:

参照网上资料,关于“I/O is frozen on database xxx. No user action is
required”的介绍如下:

BACKUP
DATABASE 正在非凡终止。

CREATE DATABASE LogChainTest;
GO
ALTER DATABASE LogChainTest SET RECOVERY FULL;
GO
BACKUP DATABASE LogChainTest TO DISK = ‘C:\SQLskills\LogChainTest.bck’
WITH INIT;
GO
BACKUP LOG LogChainTest TO DISK =
‘C:\SQLskills\LogChainTest_log1.bck’ WITH INIT;
GO
ALTER DATABASE LogChainTest SET RECOVERY SIMPLE;
GO
ALTER DATABASE LogChainTest SET RECOVERY FULL;
GO

  •     由总体苏醒情势或大容积事务日志復苏形式转为简单恢复生机形式
  •     从数据库镜像开展苏醒
  •     备份日志时内定了NO_LOG 或 WITH TRUNCATE_ONLY(还万幸SQL Server
    二〇一〇中这些选项被裁撤了)

 

 

结果是:

 

This message is logged in the Error Log whenever any backup service
making use of SQL Server Virtual Device Interface (VDI) tries to backup
the database (with snapshot)/drive on which the database files reside.
Microsoft Backup (ntbackup.exe), Volume Shadow Copy (VSS), Data
Protection Manager (DPM) and third party tools like Symantec Business
Continuance Volume (BCV) are some of the application which cause this
message to logged in the SQL Server Error Log.

出现那一个破绽百出,一般是因为从没做过完整备份或备份链中断(chain
of backups to
break),仔细检查后发现完全备份存在,那么就或然是备份链中断所致,检查备份日志记录:

复制代码 代码如下:

   更加多请看:post BACKUP LOG WITH NO_LOG – use, abuse, and undocumented
trace flags to stop
it

What does these messages mean? Let me explain this with an example.
Suppose ntbackup.exe is configured to take the backup of D drive. This
drive has some data files related to few databases on SQL Server. Since
the data files are in use by SQL Server, if these files are copied as it
is the files in the backup will be inconsistent. To ensure that the
database files are consistent in the drive backup, this application
internally issues a BACKUP DATABASE [databasename] WITH SNAPSHOT
command against the database. When this command is issued, the I/O for
that database is frozen and the backup application is informed to
proceed with its operation. Until the BACKUP WITH SNAPSHOT command is
complete, the I/O for the database is frozen and the I/O is resumed once
it completes. The corresponding messages are logged in the SQL Server
Error Log.

 

已为数据库 ‘LogChainTest’,文件 ‘LogChainTest’ (位于文件 1 上)处理了 168
页。
已为数据库 ‘LogChainTest’,文件 ‘LogChainTest_log’ (位于文件 1
上)处理了 2 页。
BACKUP DATABASE 成功拍卖了 170 页,成本 0.224 秒(5.916 MB/秒)。
已为数据库 ‘LogChainTest’,文件 ‘LogChainTest_log’ (位于文件 1
上)处理了 3 页。
BACKUP LOG 成功拍卖了 3 页,开销 0.121 秒(0.137 MB/秒)。

 

 

SELECT  CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS server_name ,

        bs.database_name ,

        bs.backup_start_date ,

        bs.backup_finish_date ,

        bs.expiration_date ,

        CASE bs.type

          WHEN 'D' THEN 'Full Backup'

          WHEN 'I' THEN 'Diff Backup'

          WHEN 'L' THEN 'Log  Bacup'

          WHEN 'F' THEN 'File Backup'

          WHEN 'G' THEN 'File Diff'

          WHEN 'P' THEN 'Partial Backup'

          WHEN 'Q' THEN 'Partial Diff Backup'

        END AS backup_type ,

        CASE bf.device_type 

          WHEN 2 THEN 'Disk'

          WHEN 5 THEN 'Tape'

          WHEN 7 THEN 'Virtual Device'

          WHEN 105 THEN 'permanent backup device'

        END AS backup_media,

        bs.backup_size/1024/1024/1024  AS [backup_size(GB)] ,

        bs.compressed_backup_size/1024/1024/1024 AS [compressed_backup_size(GB)],

        bf.logical_device_name ,

        bf.physical_device_name ,

        bs.name AS backupset_name ,

        bs.first_lsn,

        bs.last_lsn,

        bs.checkpoint_lsn,

        bs.description

FROM    msdb.dbo.backupmediafamily bf

        INNER JOIN msdb.dbo.backupset bs ON  bf.media_set_id = bs.media_set_id

WHERE bs.database_name='databasename'

ORDER BY  bs.backup_start_date DESC;

本人先是成立了一个数据库,将其设置为总体恢复生机格局,这一个是日志链的源点,然后转为简单恢复生机方式,再转为完整苏醒格局。
上面小编再品尝举办日志备份

    通过下边的例证对此展开阐释:

翻译如下:

 

复制代码 代码如下:

CREATE DATABASE LogChainTest;
GO
ALTER DATABASE LogChainTest SET RECOVERY FULL;
GO
BACKUP DATABASE LogChainTest TO DISK = ‘C:\SQLskills\LogChainTest.bck’
WITH INIT;
GO
BACKUP LOG LogChainTest TO DISK =
‘C:\SQLskills\LogChainTest_log1.bck’ WITH INIT;
GO
ALTER DATABASE LogChainTest SET RECOVERY SIMPLE;
GO
ALTER DATABASE LogChainTest SET RECOVERY FULL;
GO

当其余备份服务使用SQL Server虚拟设备接口(VDI)尝试备份数据库(使用with
snapshot时)或数据库文件所在的磁盘时,这几个音讯就会记录在错误日志(Error
Log)里。 Micorsoft Backup(ntbackup.exe),卷影复制(Volume Shadow Copy
VSS), 数据保养管理器(Data Protection Manager
DPM)和第贰方工具,例如赛门铁克Symantec 业务三番五次性卷(Business
Continuance Volume)(BCV),那个都以会造成那类新闻记录到SQL
Server错误日志的应用程序。

 

BACKUP LOG LogChainTest TO DISK =
‘C:\SQLskills\LogChainTest_log2.bck’ WITH INIT;
GO

 

那就是说那一个音讯是什么样看头呢? 让本身用3个事例来分解下。
尽管你安插ntbackup.exe去备份D盘。这一个磁盘上有一些SQL
Server的数据库相关的数据文件。由于SQL
Server要运用那多少个数据文件,因而一旦这一个文件在备份时复制将现出差别等。为了保证数据库文件在磁盘备份时是平等的,那几个应用程序内部会接纳BACKUP
DATABASE [databasename] WITH
SNAPSHOT命令来备份数据库。当命令执行时,数据库上的I/O会冻结并且备份应用程序被布告继续拓展起操作。直到BACKUP
WITH
SNAPSHOT命令执行到位,数据库的冻结的I/O当备份命令一旦落成就会回复。相应的音信也就会记录到SQL
Server错误日志中。

997755.com澳门葡京 2

则会拿走如下报错音信:

    结果是:

 

 

复制代码 代码如下:

已为数据库 ‘LogChainTest’,文件 ‘LogChainTest’ (位于文件 1 上)处理了 168
页。
已为数据库 ‘LogChainTest’,文件 ‘LogChainTest_log’ (位于文件 1
上)处理了 2 页。
BACKUP DATABASE 成功拍卖了 170 页,开支 0.224 秒(5.916 MB/秒)。
已为数据库 ‘LogChainTest’,文件 ‘LogChainTest_log’ (位于文件 1
上)处理了 3 页。
BACKUP LOG 成功拍卖了 3 页,花费 0.121 秒(0.137 MB/秒)。

后边检查发现,刚刚大家在这几个日子段有PlateSpin的备份作业在运行(数据库服务器是VMware,系统管理员用PlateSpin做D途观)。所以也是谬误日志出现那几个音讯的因由
其它,关于那些知识点,也有下边一些材质供参考、学习。

997755.com澳门葡京 3

消息 4214,级别 16,状态 1,第 1 行
不能推行 BACKUP LOG,因为方今从不数据库备份。
消息 3013,级别 16,状态 1,第 1 行
BACKUP LOG 正在非凡终止。

 

 

 

SQL Server已经记录了自个儿破坏日志链的操作以及与开展日志
备份不恐怕备份自上次日记备份以来全体的日记,所以SQL
Server差异意自个儿进行日志备份。
这些误区是说此时就需求总体备份才能苏醒日志链,但骨子里,作者只须要做三个差别备份(这几个距离备份的跨度领先日志链断裂的间隙),代码如下:

   
小编先是创制了一个数据库,将其设置为完整復苏情势,这么些是日志链的起源,然后转为不难復苏形式,再转为完整復苏形式。

案例Frozen messages while taking NT Backup for SQL
databases

察觉备份日志里面有一条记下将数据库备份到Virtual
Device,其实以前在那篇小说“IO
is frozen on database xxx, No user action is
required”里面介绍过是因为PlateSpin的备份作业在运转(数据库服务器是VMware,系统管理员用PlateSpin做D福特Explorer,使用了卷影复制(Volume
Shadow Copy VSS)。

复制代码 代码如下:

    下边小编再尝试举办日志备份

 

 

BACKUP DATABASE LogChainTest TO DISK =
‘d:\Test_bak\LogChainTest_log1.bck’ WITH INIT, DIFFERENTIAL;
GO
BACKUP LOG LogChainTest TO DISK =
‘d:\Test_bak\LogChainTest_log1.bck’ WITH INIT;
GO

BACKUP LOG LogChainTest TO DISK =
‘C:\SQLskills\LogChainTest_log2.bck’ WITH INIT;
GO

至于VDI(VSS)的介绍,可以参见上面链接

此外,查了一晃,蒙受此新闻是还有只怕是因为在利用此外备份消除方案(NTBackup,BE,Bacula等),它们会对数据库进行类似快照的备份(VSS副本

获取的结果:

 

How It Works: SQL Server – VDI (VSS) Backup
Resources

  • 卷影复制 Volume Shadow Copy)。 通过对数据库创制备份快照(creating snapshots backups),大概会促成备份链中断,并使原先的不同备份或完整备份无效,那就是为啥在你做差距备份(DIFFERENTIAL
    BACKUP)的进度中遭逢那一个荒唐的因由,因为备份链中断了,备份链无效(
    backup chain invalid)。在出入备份前须要先做1个完好无损备份。

复制代码 代码如下:

    则会得到如下报错新闻:

 

 

已为数据库 ‘LogChainTest’,文件 ‘LogChainTest’ (位于文件 1 上)处理了 64
页。
已为数据库 ‘LogChainTest’,文件 ‘LogChainTest_log’ (位于文件 1
上)处理了 1 页。
BACKUP DATABASE WITH DIFFERENTIAL 成功拍卖了 65 页,费用 0.119 秒(4.267
MB/秒)。
已为数据库 ‘LogChainTest’,文件 ‘LogChainTest_log’ (位于文件 1
上)处理了 1 页。
BACKUP LOG 成功拍卖了 1 页,成本 0.052 秒(0.150 MB/秒)。

消息 4214,级别 16,状态 1,第 1 行
不知道该肿么办履行 BACKUP LOG,因为方今从未数据库备份。
消息 3013,级别 16,状态 1,第 1 行
BACKUP LOG 正在出色终止。

别的关于Database Snapshots (SQL
Server)它也是有部分限量和特性费用的。如下截图所示:

其余,蒙受这些荒唐,还有可能有此外二种原因:

不得不说那种艺术更Cool一些,因为您不再须求一个完整备份才能继续展开日志备份。
只要您的备份策略中涵盖了文件或然文件组的备份,你依旧只须要单个文件的歧异备份就能继承展开日志备份。但前提是其一备份的跨度当先了断裂LSN的长短,当然那是更深的话题了。
又揭露了二个误区!

    SQL Server已经记录了自小编破坏日志链的操作以及与拓展日志
备份不能备份自上次日记备份以来全体的日记,所以SQL
Server不允许本身进行日志备份。

 

 

您只怕感兴趣的篇章:

  • 定时自动备份IIS的WWW日志的vbs脚本
  • mssql自动备份及机关清除日志文件服务器设置
  • sqlserver
    数据库日志备份和还原手续
  • SQL Server二零一零数据库误删除数据的上升措施分享
  • SQL server 二〇〇八数据安全(备份和死灰复燃数据库)
  • Shell脚本定时备份清除运转系统日志的代码
  • win平台oracle
    rman备份和删除dg备库归档日志脚本
  • 数据库崩溃,利用备份和日志进行灾害复苏
  • SQL Server
    二〇一〇数据库误删数据怎么样举行数据復苏
  • SQL Server
    贰零零玖及更高版本数据库復苏措施之日志底部备份

   
这么些误区是说此时就要求总体备份才能还原日志链,但实在,作者只须要做三个差异备份(这些距离备份的跨度当先日志链断裂的茶余饭后),代码如下:

997755.com澳门葡京 4

1:修改了复苏情势(
Recovery
Model),因为将数据库的復苏方式修改为简易方式也会促成备份链中断。

BACKUP DATABASE LogChainTest TO DISK =
‘d:\Test_bak\LogChainTest_log1.bck’ WITH INIT, DIFFERENTIAL;
GO
BACKUP LOG LogChainTest TO DISK =
‘d:\Test_bak\LogChainTest_log1.bck’ WITH INIT;
GO

 

997755.com澳门葡京, 

 

参考资料:

2:特定版本的Bug,这一个只见于SQL
Server
2007一定版本,具体参考
一般很少见,只是搜索时,发现有其一地方,所以选定在此。

    得到的结果:

 

已为数据库 ‘LogChainTest’,文件 ‘LogChainTest’ (位于文件 1 上)处理了 64
页。
已为数据库 ‘LogChainTest’,文件 ‘LogChainTest_log’ (位于文件 1
上)处理了 1 页。
BACKUP DATABASE WITH DIFFERENTIAL 成功拍卖了 65 页,费用 0.119 秒(4.267
MB/秒)。
已为数据库 ‘LogChainTest’,文件 ‘LogChainTest_log’ (位于文件 1
上)处理了 1 页。
BACKUP LOG 成功拍卖了 1 页,花费 0.052 秒(0.150 MB/秒)。

 

   
不得不说那种措施更Cool一些,因为你不再要求二个全部备份才能持续展开日志备份。

化解方案:

   
即便你的备份策略中带有了文本只怕文件组的备份,你仍旧只须要单个文件的差距备份就能继承拓展日志备份。但前提是其一备份的跨度当先了断裂LSN的水平,当然那是更深的话题了。

 

    又揭破了二个误区!

    可以禁用SQL
Server VSS
Writer服务,来阻止那1个备份化解方案使用卷影复制,测试发现不会影响PlateSpin的作业。

 

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website