DB2数据库崩溃之后,用事务日志恢复的原因是什么?

文章介绍的是DB2数据库崩溃之后,用事务日志恢复的主要原因与正确的操作技巧,如果你对DB2数据库崩溃后用事务日志恢复的原与正确的操作技巧心存好奇的话,以下的文章将会揭开它的神秘面纱。

日志, 事务, 技巧, 原理日志, 事务, 技巧, 原理

 

在系统崩溃之后,使用DB2的事务日志恢复数据库。 您曾多少次碰到过错误消息“SQL0946C The transaction log for the database is full?”

 

在尽力解决该问题时,您是否停下来思考如下两个问题:1. 为何存在事务日志;2. 事务日志记录服务的目的是什么呢?

 

若没有事务,多个用户和应用程序同时与一个数据库进行交互时就必然会破坏数据。而如果没有事务日志记录,DB2 UDB中的一些据库恢复方法就不会存在。

 

如果您还没有完全理解这些概念,也不必担忧。我将解释事务是什么以及事务日志记录背后的机制。然后,我将展示在系统DB2数据库崩溃或程序故障之后,如何使用数据库事务日志文件中所存储的信息来使数据库回归到一致、可用的状态。您还可以通过这些重要的日志做更多事情。

 

事务

 

事务(也称作工作单元)是指一个或多个SQL操作的序列,这些操作组合成一个单元且通常位于一个应用程序进程内。该单元通常称作是“原子的”,因为它是不可分的——它的所有工作要么全都执行,要么全都不执行。一个给定的事务可以执行任何数目的SQL操作(从一个到几千个,取决于业务逻辑里对于“一步”的定义)。

 

一个事务的开始和终止定义了数据库里数据一致性的点;要么将事务里所执行的所有操作的结果应用到数据库上,并使之成为***的(已提交),要么将之都撤销(回滚),使数据库返回到启动该事务之前的状态。

 

事务是在建立到数据库的连接之后***次执行SQL语句时或在现有事务终止时立即启动。一旦启动,就可以使用名为原子提交的功能隐式地终止该事务。通过原子提交,会将每条可执行的SQL语句当作一个事务。如果该语句执行成功,那它所做的任何修改都将应用到数据库上,但如果语句失败,那修改将被丢弃。

 

还可以通过执行COMMIT或ROLLBACK SQL语句显式地终止事务。

 

这些语句的基本语法是:

 

  1. COMMIT <WORK> 
  2. ROLLBACK <WORK>  

在COMMIT终止事务时,会将该事务从开始时对数据库所做的所有修改变成***性的。使用ROLLBACK,所有修改都将撤销。

事务所做的未提交的修改对其他用户和应用程序来说是无法访问的,除非那些用户和应用程序使用的是未提交读(UR)隔离。然而,一旦提交了事务所做的修改,它们对于所有其他用户和应用程序来说就都是可以访问的了,并且只能通过执行新事务中的新SQL语句来删除。

 

事务日志记录

 

在向一个基表进行INSERT时,首先在缓冲池中创建一条记录,该缓冲池与指定该表的数据存储于何处的表空间相关联。每次更新或删除一条记录时,就从存储器中检索包含该记录的页面,并复制到适当的缓冲池中,然后由UPDATE/DELETE进行修改。

一旦进行了这一修改,就会向日志缓冲器写入一条反映该动作的记录,日志缓冲器是内存中的另一指定存储区(为日志缓冲器预留的真正存储大小是由logbufsiz数据库配置参数控制的)。如果执行INSERT,就会写入一条包含了新行数据值的记录。当出现删除时,就写入一条包含了该行原始值的记录。

如果执行UPDATE,就写入一条包含了该行原始值和新值的记录(在大多数情况下,通过用该行的更新值在原始值上执行EXCLUSIVE OR,为更新操作生成日志记录)。最终,当执行INSERT、UPDATE或DELETE的事务终止时,就将相应的COMMIT或ROLLBACK记录写入日志缓冲器。

 

每当激活缓冲池I/O页面清理器,日志缓冲器本身已满,或者提交或回滚事务时,就立即将日志缓冲器中存储的所有记录写入磁盘上所存储的一个或多个事务日志文件中。如果发生系统故障,日志缓冲器的不断刷新将最小化可能丢失的日志记录数目。

一旦将与特定事务相关联的所有日志记录(包括相应的COMMIT或ROLLBACK记录)成功具体化(externalize)为一个或多个日志文件,就会将事务本身的结果复制到适当的表空间容器以***存储(已修改的数据页本身仍保留在内存中,在必要时可以快速进行访问;它们最终将被改写)。该过程称作写前日志记录(write-ahead logging),保证对数据所做的修改在记录到数据库之前,总是被具体化为日志文件。

 

因为多个事务可以在任何时候使用一个数据库,所以一个日志文件可能包含属于几个不同事务的日志记录。为了追踪一条日志记录属于哪个事务,要给每条日志记录分配一个特殊的事务ID,将之绑定到创建它的事务。

通过使用事务ID,可以随时将与特定事务相关联的日志记录写入一个或多个日志文件,而不影响数据一致性——最终,对于终止该事务的操作的COMMIT或ROLLBACK记录也将进行日志记录。

 

崩溃恢复

 

在还未提交事务的修改之前,如果发生问题——例如,发生停电或应用程序异常终止——会发生什么事情呢?事务所做的任何未提交或已回滚的工作都将丢失。此外,如果正在将其数据具体化(externalize)到数据库的已提交事务遭到破坏,该数据库将处于不一致、不可用的状态(每当尝试建立连接时,不一致的数据库将生成返回代码和错误消息)。您无法恢复内存中所存储的事务记录,但是可以通过执行名为DB2数据库崩溃恢复的操作,将不一致的数据库恢复为一致、可用的状态。

 

启动崩溃恢复的最常用方法就是从DB2命令行处理器(DB2 Command Line Processor,CLP)执行RESTART命令。该命令的基本语法是:

 

  1. RESTART [DATABASE | DB]   
  2. [DatabaseName]   
  3. USER [UserName] < USING   
  4. [Password] > >   
  5. < DROP PENDING TABLESPACES   
  6. ( [TS_Name] , ... ) >   
  7. < WRITE RESUME >  

其中: DatabaseName 指示分配给尝试进行恢复的数据库的名称。

UserName 指示分配给用户的名称,崩溃恢复将在该用户的权限下执行。

 

Password 指示与用户名称相对应的密码,崩溃恢复将在该用户的权限下执行。

 

TS_Name 指示分配给一个或多个表空间的名称,如果在尝试将表空间恢复为一致状态时碰到错误,那么这些表空间将被禁用或置为Drop Pending模式。

 

注意:尖括号(< >)中显示的参数是可选的;方括号([ ])中显示的参数是必需的;逗号后面加省略号(, …)表示前面的参数可以重复多次。关于 RESTART 命令的完整语法,请参阅IBM DB2 Universal Database, Version 8 Command Reference(ftp.software.ibm.com/ps/products/db2/info/vr8/pdf/letter/db2n0e80.pdf)。

 

如果需要在名为SAMPLE的数据库上执行DB2数据库崩溃恢复操作,就执行RESTART DATABASE SAMPLE命令。

 

您还可以配置数据库,以便每当用户或应用程序尝试连接处于不一致状态时,它就会自动启动崩溃恢复。仅仅需要将值ON分配给数据库的AUTORESTART配置参数(每当激活数据库或尝试建立连接时,DB2 Database Manager就检查数据库的状态。当autorestart配置参数设置为ON时,如果数据库处于不一致的状态,Database Manager就自动执行RESTART命令)。

 

在进行崩溃恢复时,将分析数据库事务日志文件中存储的记录,并将每条具有相应COMMIT记录的事务记录重新应用到数据库。重现然后撤销没有相应COMMIT记录的所有记录(这就是为何要为所有更新操作记录前后信息的原因)。

因为日志记录频繁进行具体化,且由特定事务所做的修改只有当事务本身成功终止时才进行具体化,所以在故障之后将数据库恢复到一致性状态的能力总是能得到保证。DB2数据库崩溃恢复只是事务日志所提供的功能中的一种。

 

本主题由 hchao 于 2010-3-12 18:12 分类

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/226354.html<

(0)
管理的头像管理
上一篇2025-04-17 08:11
下一篇 2025-04-17 08:12

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注