DB2崩溃后用事务日志恢复的原理和技巧

Windows下快速搭建Kettle开发环境:基于9.4.0.0版本的保姆级教程 本文提供Windows系统下Kettle 9.4.0.0开发环境的详细搭建指南,涵盖源码获取、Maven配置优化、高效编译及部署运行全流程。通过实战验证的步骤常见问题解决方案,帮助数据工程师快速完成环境配置,提升ETL开发效率。 阅读详情
 在系统崩溃之后,使用 DB2的事务日志恢复数据库。 您曾多少次碰到过错误消息“SQL0946C The transaction log for the database is full?”
在尽力解决该问题时,您是否停下来思考如下两个问题:1. 为何存在事务日志;2. 事务日志记录服务的目的是什么呢?
若没有事务,多个用户和应用程序同时与一个数据库进行交互时就必然会破坏数据。而如果没有事务日志记录, DB2 UDB中的一些据库恢复方法就不会存在。
如果您还没有完全理解这些概念,也不必担忧。我将解释事务是什么以及事务日志记录背后的机制。然后,我将展示在系统崩溃或程序故障之后,如何使用数据库事务日志文件中所存储的信息来使数据库回归到一致、可用的状态。您还可以通过这些重要的日志做更多事情。
事务
事 务(也称作工作单元)是指一个或多个SQL操作的序列,这些操作组合成一个单元且通常位于一个应用程序进程内。该单元通常称作是“原子的”,因为它是不可 分的——它的所有工作要么全都执行,要么全都不执行。一个给定的事务可以执行任何数目的SQL操作(从一个到几千个,取决于业务逻辑里对于“一步”的定 义)。
一个事务的开始和终止定义了数据库里数据一致性的点;要么将事务里所执行的所有操作的结果应用到数据库上,并使之成为永久的(已提交),要么将之都撤销(回滚),使数据库返回到启动该事务之前的状态。
事 务是在建立到数据库的连接之后第一次执行SQL语句时或在现有事务终止时立即启动。一旦启动,就可以使用名为原子提交的功能隐式地终止该事务。通过原子提 交,会将每条可执行的SQL语句当作一个事务。如果该语句执行成功,那它所做的任何修改都将应用到数据库上,但如果语句失败,那修改将被丢弃。
还可以通过执行COMMIT或ROLLBACK SQL语句显式地终止事务。
这些语句的基本语法是:
      
       COMMIT <WORK>
       
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 Command Line Processor,CLP)执行RESTART命令。该命令的基本语法是:
      
       RESTART [DATABASE | DB] 
       
[DatabaseName]
USER [UserName] < USING
[Password] > >
< DROP PENDING TABLESPACES
( [TS_Name] , ... ) >
< 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的数据库上执行崩溃恢复操作,就执行RESTART DATABASE SAMPLE命令。
您还可以配置数据库,以便每当用户或应用程序尝试连接处于不一致状态时,它就会自动启动崩溃恢复。仅仅需要将值ON分配给数据库的AUTORESTART配置参数(每当激活数据库或尝试建立连接时, DB2 Database Manager就检查数据库的状态。当autorestart配置参数设置为ON时,如果数据库处于不一致的状态,Database Manager就自动执行RESTART命令)。
在 进行崩溃恢复时,将分析数据库事务日志文件中存储的记录,并将每条具有相应COMMIT记录的事务记录重新应用到数据库。重现然后撤销没有相应 COMMIT记录的所有记录(这就是为何要为所有更新操作记录前后信息的原因)。因为日志记录频繁进行具体化,且由特定事务所做的修改只有当事务本身成功 终止时才进行具体化,所以在故障之后将数据库恢复到一致性状态的能力总是能得到保证。崩溃恢复只是事务日志所提供的功能中的一种。
ERA5获取的风场数据转换为.dfs2文件 ERA5获取风场数据的具体步骤可以参考下面的文章下载好后应该是.nc格式的文件,想要读取或者转换成其他格式的文件可以安装下面步骤,本文介绍如何转换为.dfs2文件。 阅读详情

相关推荐

华硕天选3 win11+ubuntu20.04双硬盘双系统配置(包括ubuntu重启后无法成功进入、没有wifi图标的设置)

1、制作系统盘 2、分区 3、重启电脑按F2

baidu_38431960的博客 1万+

DB2崩溃恢复

1.问题现象实例异常宕机或者非正常停止DB2实例,第一次数据库连接慢,此类问题与实例类异常中实例崩溃Crash相关。https://www.cndba.cn/hbhe0316/article/4875 2.问题诊断https://www.cndba.cn/hbhe0316/article/4875 https://www.cndba.cn/hbhe0316/article...

hbhe0316的专栏 879

AgentScope深入分析-ReActAgent

ReActAgent 是 AgentScope 框架中最核心的智能体实现,它完美诠释了"推理-行动"(Reasoning-Acting)循环的精髓。本文将深入分析 ReActAgent 的类继承关系、核心执行流程,以及状态管理、钩子机制、实时介入等关键技术点。通过阅读本文,你会理解智能体如何与模型交互、如何执行工具、如何处理中断,以及这些机制背后的设计考量。模块化:通过组合不同的组件(模型、格式化器、工具集、记忆)来构建智能体透明性:所有关键流程都对开发者可见,可以精确控制可扩展性。

811

db2 数据恢复-快速

1、Load 方法装入数据:   export to tempfile of del select * from TABLENAME where not 清理条件;   load from tempfile of del modified by delprioritychar replace into TABLENAME nonrecoverable;   说明:    在不相关的数据表e

HouYing 3391

DB2日志

当重新开机进行恢复的时候,DB2日志文件的内容重写到数据盘,保证数据库的一致性。如果将这些数据直接写入磁盘才返回给应用端,那么将严重影响写的性能,因此,DB2采用写日志优先算法,即先写日志,再写数据,而写数据的过程使异步的。: 有已经提交的交易(commit动作会触发数据库将对应的redo log写入到磁盘)数据还有没有被从buffer pool中写入到磁盘,所以recovery时从。: 有还没有提交的交易(但是redo log是已经写入到磁盘中的)的数据已经被写入到磁盘中,所以recovery时将从。

liys0811的博客 861

db2恢复有关说明

db2恢复有关说明 1)、恢复操作也有onlineoffline的,区别如同backup的操作。 2)、按照表空间的备份恢复类似,加子句TABLESPACE ( tablespace-name 即可。表空间级别的备份/恢复操...

covszjy982477891的博客 208

DB2 通用数据库中的事务日志记录概述

DB2 确保数据一致性恢复性所使用的主要机制之一是事务日志记录。本文概述了主要概念,帮助您了解如何能够控制事务日志记录以最优化可恢复性,并且向您介绍了 DB2 UDB V8.1 中新增的日志特性。 简介 以下文章适用于 IBM® DB2® Universal Database™ for UNIX®、Linux Windows® 任 何数据库管理

风之去向 1577

DB2事务日志

1、DB2数据库日志原理 事务日志记录数据库中所有对象数据的改变,在早前版本中最大可达256G,其大小为( logprimary + logsecond ) * logfilsiz,其中logprimary + logsecond的值小于或等于256,logfilsiz的最大为262144,在9.5版本中,日志最大已经可以达到512G,其中logfilsz的大小更改为524286。...

diejian8780的博客 821

DB2事务日志使用经验

    我们经常接到客户的电话,我的数据库日志满了,有没有什么好办法快速清除?尤其对于一些初入门的DB2使用者去维护一个大数据量的系统,这几乎是他们必然会碰到的一个问题。  我们也经常接到客户更紧急的电话,我的数据库不能使用了,因为日志占用太多空间,文件系统满了,就把日志删除了,现在数据库无法使用,这个是生产系统,需要尽快恢复,有什么办法可以让数据库立刻使用?  碰到这样的问题,我

寒塘鹤影 3599

DB2日志增量备份

增量备份的原理是通过对数据库日志进行解析,找出上次备份之后发生变化的数据,并将这些数据备份到备份文件中。恢复:通过回放日志中的操作,可以将数据库恢复到某个特定的时间点或者某个特定的事务操作之前的状态。崩溃恢复:在数据库发生崩溃时,可以利用日志文件来进行数据库恢复,保证数据的一致性。:进行全量备份:首次备份需要进行全量备份,将整个数据库的数据备份到备份文件中。位置还原数据库,替换同名数据库,禁用自动配置数据库参数,并进行日志回滚操作。前滚日志:记录正在进行中的事务的操作,用于数据库恢复并发控制。

互联网知识分享 802

db2 事务日志使用

1、DB2数据库日志原理 事务日志记录数据库中所有对象数据的改变,在早前版本中最大可达256G,其大小为( logprimary + logsecond ) * logfilsiz,其中logprimary + logsecond的值小于或等于256,logfilsiz的最大为262144,在9.5版本中,日志最大已经可以达到512G,其中logfilsz的大小更改为524286。

平凡 4373

DB2事务日志使用经验

DB2事务日志使用经验   我们经常接到客户的电话,我的数据库日志满了,有没有什么好办法快速清除?尤其对于一些初入门的DB2使用者去维护一个大数据量的系统,这几乎是他们必然会碰到的一个问题。   我们也经常接到客户更紧急的电话,我的数据库不能使用了,因为日志占用太多空间,文件系统满了,就把日志删除了,现在数据库无法使用,这个是生产系统,需要尽快恢复,有什么办法可以让数据库立刻使用?

wangdehao的专栏 830

db2日志原理

我们经常接到客户的电话,我的数据库日志满了,有没有什么好办法快速清除?尤其对于一些初入门的DB2使用者去维护一个大数据量的系统,这几乎是他们必然会碰到的一个问题。   我们也经常接到客户更紧急的电话,我的数据库不能使用了,因为日志占用太多空间,文件系统满了,就把日志删除了,现在数据库无法使用,这个是生产系统,需要尽快恢复,有什么办法可以让数据库立刻使用?   碰到这样的问题,我们可以不厌其烦的

huoshuyinhua的专栏 914

DB2mysql活动日志满了会自动回滚最早未提交的事务吗?

随着插入的数据越多,available to the database (Bytes)值会越来越小,而Log space used by the database (Bytes)越来越大,到最后一个插入就报错SQL0964C The transaction log for the database is full. SQLSTATE=57011了,,其实最早没有提交的事务1并没有被数据库回滚,是可以查到这条数据的。set i=i+1;end while;set i=i+1;set i=i+1;

liys0811的博客 839

db2事务日志

关于db2事务日志的介绍详见: http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/0301kline/0301kline.html

JoShua 的 水库 244

浅谈DB2数据库的备份与恢复(下)

二、DB2数据库恢复 DB2数据库提供了三种恢复类型:1、崩溃恢复(crash recovery):崩溃恢复是用来在失败后立即进行恢复,把数据库恢复到一个事务一致状态,此状态的所有更改只有在执行提交事务后才生效。崩溃恢复使用命令 RESTART 执行。2、备份恢复(restore recovery):备份恢复可从上一次所作的备份中恢复数据库的内容。备份恢复使用 RESTORE 命令执

smallxia的专栏 1426

DB2事务日志

1.DB2事务日志DB2日志分主日志日志,主日志是在数据库第一次被连接激活时创建的,而次日志是当写满所有的主日志后,才动态分配次日志,主日志日志受设置个数的制约,当配置的所有主、次日志写满后,数据库后续事务都会被回滚,而当活动日志目录被写满后,根据数据库的配置,分别对后续事务进行回滚挂起,在挂起的...

weixin_36860782的博客 171

DB2崩溃恢复后表空间异常模拟

1.新建一个表空间ts1存储路径是/home/test/file [test@demo SQL00001]$ db2 "create tablespace ts1 managed by database using (file '/home/test/file' 10M)" DB20000I  The SQL command completed successfully. [test@demo ~...

aryoyo的博客 1772

DB2 日志文件被删除的恢复日志并且恢复数据库---sql4970n

在使用DB2的时候,如果数据库日志设置成归档模式的话,如果对数据库的操作比较多的话,产生的日志会很多,且很大,而我们有时候会进行归档日志的清理,会将一些数据库备份包括的日志给删除掉,这个时候,如果需要回滚数据库的话,则无法回滚成功,下面教大家一个方法,在日志被删除的情况下,恢复日志,并且恢复数据库。 1.有一个包括日志的备份。 2.将该备份里面的日志恢复出来。 db2 restor

zp_xyz的专栏 8010

深入理解DB2中的日志管理与监控:SYSIBMADM.LOG_UTILIZATIONSYSIBMADM.SNAPDB视图

专注于事务日志的使用管理,提供更详细的日志使用数据,如日志使用百分比、日志使用峰值分区号。:提供数据库的整体状态信息,日志使用情况只是其中一部分,还包括其他数据库性能活动的指标。在DB2的管理运维中,日志管理性能监控是两个关键方面。通过深入理解合理利用视图,数据库管理员可以确保数据库系统的稳定运行高效性能。希望本文能够帮助您更好地掌握DB2日志管理与监控的相关知识,为您的DB2数据库管理工作提供有力支持。

szial的专栏 1625

2025湖南省道路路网矢量数据图层Shp数据最新版下载

2025湖南省道路路网矢量数据图层,shp格式,包含多级道路分类属性,路名等属性,包含全省几十万条道路,坐标系为WGS1984坐标系统

云南大学计算机专业复试.pdf

云南大学计算机专业复试.pdf

上一篇: 在UltraEdit中使用正则表达式
junli0310
博客等级 码龄22年 74粉丝 14原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值