DB2_数据库日志管理

合集下载

解决DB2数据库“事务日志”已满问题

解决DB2数据库“事务日志”已满问题

解决DB2数据库“事务⽇志”已满问题在使⽤DB2进⾏⼤量的update,insert,import的操作时候,事务⽇志可能会⽤光,即⽇志⽂件不够,还有⼀种情况是应⽤程序占⽤了很⼤的事务并且没有提交,造成后续应⽤不能重⽤⽇志,导致⽇志满。

针对上⾯两个问题,给出的解决⽅案如下:1.⽇志⽂件不够总共⽇志⼤⼩为:( LOGPRIMARY + LOGSECOND )* LOGFILSIZ * 4KB ,其中4KB为数据页,不同数据库设置的数据页可能不⼀样。

对⼀个表进⾏全表update时候,占⽤的最⼤事务空间约为表⼤⼩的2倍。

这主要是事务⽇志记录了两种⽅式,do和redo。

例如⼀张task表⼤⼩为160M,全表update时候所⽤到的最⼤⽇志空间约为320M。

如果觉得⽇志空间不够,可以⽤ db2 update db cfg for <dbname> using <p> <v>。

例如要更改主⽇志⼤⼩:db2 update db cfg for <dbname> using logprimary 30.2.应⽤程序占⽤很⼤事务⽇志并且没有提交,造成后续操作不能重⽤⽇志。

针对这样相似的问题,我们通常先找到应⽤程序的ID,然后将应⽤程序停掉。

2.1⽤快照⽅式获取应⽤程序使⽤⽇志情况。

例如:(1).打开监控开关:db2 update monitor switches using statement on uow on(2).获取数据库快照:db2 get snapshot for database on <dbname>。

找到快照中⽇志空间使⽤部分:Log space available to the database (Bytes)= 20394939Log space used by the database (Bytes) = 5061Maximum secondary log space used (Bytes) = 0Maximum total log space used (Bytes) = 12255Secondary logs allocated currently = 0Log pages read = 0Log read time (sec.ns) = 0.000000004Log pages written = 6Log write time (sec.ns) = 0.000000004Number write log IOs = 6Number read log IOs = 0Number partial page log IOs = 5Number log buffer full = 0Log data found in buffer = 0Appl id holding the oldest transaction = 136Log to be redone for recovery (Bytes) = 4923Log accounted for by dirty pages (Bytes) = 4923File number of first active log = 0File number of last active log = 2File number of current active log = 0File number of log being archived = Not applicable从快照信息中我们可以看到最后使⽤⽇志的应⽤程序的ID,如上图红⾊部分所⽰,即最后的应⽤程序的ID为136.(3).获取应⽤程序的使⽤⽇志的详细信息。

db2 undo原理

db2 undo原理

db2 undo原理DB2是一种关系型数据库管理系统,它具有强大的事务处理能力和高度的可靠性。

在DB2中,undo是一个重要的机制,用于实现事务的回滚和恢复操作。

本文将介绍DB2 undo的原理以及它在数据库中的作用。

在数据库中,事务是一组数据库操作的逻辑单元,这些操作要么全部成功执行,要么全部失败回滚。

在事务执行过程中,DB2会将每个操作的结果存储在数据库的缓冲区中,而不会立即写入到磁盘上。

这样可以提高数据库的性能,但也存在一定的风险,因为在事务执行过程中,系统可能会发生故障导致数据库的不一致。

为了解决这个问题,DB2引入了undo机制。

在事务执行过程中,DB2会将每个操作的undo信息记录在undo日志中。

undo信息包括了操作的前置条件和恢复操作。

当一个事务需要回滚时,DB2会根据undo日志中的记录,执行相应的恢复操作,将数据库恢复到事务开始之前的状态。

具体来说,当一个事务执行一个更新操作时,DB2会先将操作的undo信息记录在undo日志中。

这些undo信息包括了更新前的数据值和恢复操作。

然后,DB2将更新的结果存储在数据库的缓冲区中,而不是直接写入到磁盘上。

这样,即使事务执行失败回滚,数据库的实际内容并没有发生改变。

当一个事务需要回滚时,DB2会根据undo日志中的记录,执行相应的恢复操作。

恢复操作会将数据库的内容恢复到事务开始之前的状态。

具体来说,DB2会将undo日志中的恢复操作逆向执行,将更新的结果撤销,并将数据库的内容恢复到更新前的状态。

由于undo日志的存在,DB2可以保证事务的原子性和一致性。

原子性指的是事务要么全部成功执行,要么全部回滚,没有中间状态。

一致性指的是事务的执行结果必须满足数据库的约束条件和完整性规则。

通过使用undo机制,DB2可以确保事务的原子性和一致性。

undo日志还可以用于恢复数据库的状态。

当数据库发生故障导致数据丢失时,DB2可以根据undo日志中的记录,执行相应的恢复操作,将数据库恢复到最近一次备份之后的状态。

DB2最新维护手册

DB2最新维护手册

DB2维护手册目录DB2维护手册 (1)一、DB2入门-数据库实例 (5)二、DB2日常维护日操作 (20)1、检查管理服务器是否启动 (21)2、检查DB2实例是否已经启动 (21)3、查看表空间状态是否正常 (21)4、查看表的状态 (22)5、查看磁盘空间 (23)6、检查存储管理软件是否正常 (23)7、检查数据库备份是否正常 (24)8、检查归档日志是否正确归档了 (24)9、查看缓冲池的命中率 (24)10、查看当前运行最频繁的SQL,其命中率是否正常 (24)11、查看当前连接的应用程序,有没有非法连接 (25)12、检查有没有死锁 (25)13、对表和索引进行RUNSTATS (25)14、检查表是否需要重组 (25)15、对需要重组的表进行重组 (26)三、DB2日常维护月操作 (27)1、查看DB2日志 (27)2、检查备份和日志是否都保存好了 (27)四、DB2日常维护季度操作 (27)1、通过快照监控器,查看系统性能如何 (27)2、数据库补丁级别 (28)五、注意事项 (28)1、不要删除活动日志文件 (28)2、注意交易日志存储空间 (28)3、按照系统的实际工作量配置日志空间 (29)4、设置正确数据库代码页 (29)5、检查许可证(L ICENSE)安装情况 (30)6、创建数据库前调整好系统时间 (30)7、不要随便执行CHOWN (CHMOD)–R(UNIX/L INUX) (30)8、在归档日志模式下使用LOAD记得加NONRECOVERABLE参数 (31)六、附:以脱机方式重组表 (31)七、附:索引重组 (32)八、收集和更新统计信息的准则 (35)九、附:使用CLP 捕获数据库运行状况快照 (39)十、IBM DB2 日常维护汇总 (41)十一、DB2常用命令集 (51)一、DB2入门-数据库实例在本文中,我使用DB2 来指代DB2 通用数据库V8.1 for UNIX、Linux 和Windows。

db2日志说明

db2日志说明

db2日志说明db2日志记录1. 日志的意义:主要在于数据恢复。

Db2实施了提前写日志存档模式,当发出删除、插入或更新数据库中某一数据的SQL调用时,所作出的数据变更首先要写到日志中去。

当发出一条SQL提交确认命令时,DB2首先要把redo所需要的日志写入磁盘。

如果断电的话,所有被提交的事务都会重新做一遍,而未提交的则会rollback。

事务:为了保证数据的可恢复性和一致性引入的概念。

比如执行了两条sql语句,但是他们是为了完成同一件事,因此他们会被当做一个整体。

当发生意外情况时,如果已经commit,但是未写到磁盘,就要执行redo重新执行一遍。

如果还没有commit,就要全部回滚。

日志作用:比如昨天晚上进行了数据库备份,但是今天中午数据库出现了问题(如存储介质损坏)需要恢复,那么只能恢复到昨天晚上的状态,今天上午的数据都没法恢复,这时如果数据库日志没有损坏,就可以通过日记把这段时间的操作重新执行一遍。

2. 日志分为循环日志和归档日志:日志中只记录DML操作(insert,update和delete操作),当我们前台执行了一条insert,update或delete语句,日志中就会相应的记录这条SQL语句的redo操作和undo操作几种操作类型:DDL(Data Definition Language 数据定义语言),用于操作对象和对象的属性(数据库,表,视图等)。

具体表现在Create,Drop 和Alter操作上。

不会对具体的数据进行操作,而是对对象进行操作。

像主键约束、唯一约束、非空约束、外键约束、核查约束和缺省约束这些操作都是使表具有某些特性,所以在这里我认为他们都是表的属性,也属于DDL操作。

DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操作的单位是记录。

主要表现在Insert,Delete和Update等操作上。

db2日志原理及案例

db2日志原理及案例

NO 0 0 520 OFF OFF NEARSYNC OFF OFF 5 20 OFF
日志规划
• 日志空间大小规划
– 初始设置为数据量大小的10-20%,然后监控调整 – 设置logprimary, logsecond, logfilsiz参数
• 规划路径
– – – – 活动日志路径:newlogpath 镜像日志路径:mirrorlogpath 归档日志设置:logarchmeth1: off/disk/tsm/logretain 归档日志设置2:logarchmeth2
SQLOGDIR
mirrorlogpath
S~3.LOG S~4.LOG S~5.LOG
S~0.LOG
S~1.LOG
S~2.LOG
数据库日志相关的一些参数
Primary log files (LOGPRIMARY) Secondary log files (LOGSECOND) Log size (LOGFILSIZ) New log path ? + ?
16
日志存放位置
Instance /your/choice
NODE0000
newlogpath
S~3.LOG S~4.LOG S~5.LOG
SQL0000n
/2nd/choice
Different disk drive and potentially a different disk controller unit
Student exercise
• 数据库恢复 • Db2dart • Patch日志控制文件
崩溃恢复(crash recovery)
• DB2异常终止 • 操作系统异常
需要思考的问题?

如何在Windows CMD里面用命令行操作DB2数据库

如何在Windows CMD里面用命令行操作DB2数据库

如何在Windows CMD里面用命令行操作DB2数据库尽管 DB2 脚本可以包含 SQL 语句、DB2 系统命令和操作系统命令,但它只是有一个或多个 DB2 命令的文本文件。

虽然不是必需的,但通过使用适当的文件扩展名形成一个标准的 DB2 脚本命名约定通常是个很好的方法。

表 1显示了几种最常用的文件扩展名。

表 1. 脚本的常用文件扩展名文件扩展名描述.db2 包含 DB2 命令的 DB2 脚本 .ddl 包含数据定义语言(DDL)语句的 DB2 脚本 .sql 包含 SQL 语句的 DB2 脚本作为说明之用,清单 1包含一个非常简单的 DB2 脚本,该脚本使用数个 DB2 命令备份 sample 数据库。

可以从任一 DB2 命令行工具执行该脚本。

本文中用到的全部脚本都可以下载。

这些脚本使用缺省的 DB2 实例(DB2)和样本数据库(SAMPLE)。

其中的一些脚本将要求您安装 Windows 资源包(Windows Resource Kit)。

清单 1. 备份 sample 数据库的样本 DB2 脚本(db2backup.db2)-- -- This is a sample DB2 Backup Script -- ATTACH TO DB2; BACKUP DATABASE SAMPLE; DETACH; TERMINATE;您可以使用以下语法从 DB2 命令窗口执行以上 DB2 脚本:db2 -tvf db2backup.db2 -l db2backup.log -r db2backup.rpt在上面的示例中,使用了以下 DB2 命令选项来执行 DB2 脚本文件(db2backup.db2 ):-t 指明在缺省情况下用分号(;)终止每条命令-v 指明应将每条命令显示到标准输出-f 指明从输入文件读取命令-l 指明将命令记录到输出文件中-r 指明将结果保存到报告文件中使用-l 选项将所有 DB2 命令记录到日志文件(db2backup.log )并且使用-r 选项将命令的输出保存到报告文件(db2backup.rpt ),这始终是一个很好的方法。

db2开启归档日志

db2开启归档日志
User exit for logging enabled (USEREXIT) = OFF
HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC
First log archive method (LOGARCHMETH1) =
Node 0
UID PID PPID C STIME TTY TIME CMD
db2inst1 6608 6607 0 21:30 pts/1 00:00:00 db2sysc 0
root 6609 6608 0 21:30 pts/1 00:00:00 db2ckpwd 0
db2 update db cfg for db_name using LOGRETAIN ON
运行后结果如下:
Log retain for recovery enabled (LOGRETAIN) = RECOVERY
User exit for logging enabled (USEREXIT) = OFF
db2 update db cfg for db_name using LOGARCHMETH1 "disk:/archive/db_name_db_log"
运行后结果如下:
Log retain for recovery enabled (LOGRETAIN) = RECOVERY
db2inst1 9026 6613 0 23:27 pts/1 00:00:00 db2agent (idle) 0
db2inst1 9124 6613 0 23:34 pts/1 00:00:00 db2agent (idle) 0

db2数据库面试题

db2数据库面试题

db2数据库面试题一、概述DB2数据库是IBM公司开发的一种关系型数据库管理系统。

在DB2数据库的面试过程中,常常会遇到各种各样的问题。

本文将为您总结一些常见的DB2数据库面试题,帮助您更好地准备面试,并提供详细的解答。

本文将从DB2数据库的基本知识、SQL查询、性能调优等方面展开讨论。

二、基本知识1. 什么是DB2数据库?DB2数据库是IBM开发的一种关系型数据库管理系统,它提供了完整的数据库管理和数据操作功能,并支持SQL查询语言。

2. DB2数据库的特点是什么?DB2数据库具有以下特点:- 跨平台性:DB2可以在不同的操作系统和平台上运行,如Windows、Unix、Linux等。

- 具备高可用性:DB2支持数据备份、恢复和高可用性机制,确保数据的安全性和可靠性。

- 扩展能力强:DB2可以支持大规模的数据和用户,并提供有效的扩展机制。

- 性能优越:DB2采用了先进的查询优化技术,能够提供高效的数据检索和处理能力。

- 安全性强:DB2提供了完善的权限管理和安全机制,保证数据的机密性和完整性。

3. DB2数据库的体系结构是什么样的?DB2数据库的体系结构包括以下几个层次:- 应用层:应用程序通过数据库连接器与DB2数据库进行通信。

- SQL层:处理SQL查询,包括查询优化、执行计划生成等。

- 缓冲池管理器(Buffer Pool Manager):管理数据缓存和页面置换。

- 存储管理器(Storage Manager):管理数据的存储和检索。

- 锁管理器(Lock Manager):管理并发访问和资源锁定。

- 日志管理器(Log Manager):管理事务日志的生成和恢复。

4. DB2数据库的对象包括哪些?DB2数据库的主要对象包括表(Table)、视图(View)、索引(Index)、触发器(Trigger)、存储过程(Stored Procedure)等。

三、SQL查询1. 如何创建一个表?在DB2数据库中,可以使用CREATE TABLE语句来创建一个表,语法如下:CREATE TABLE table_name (column1 datatype1 constraint,column2 datatype2 constraint,...);其中,table_name为表名,column1、column2为列名,datatype1、datatype2为列的数据类型,constraint为列的约束条件(如主键、外键等)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、load 方法装入数据:export to tempfile of del select * from tablename where not 清理条件;load from tempfile of del modified by delprioritychar replace into tablenamenonrecoverable;说明:在不相关的数据表export数据时,可以采取并发的形式,以提高效率;tablename指待清理table的名称;modified by delprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况; replace into对现数据库中的内容进行替换,即将现行的数据记录清理,替换为数据文件内容;nonrecoverable无日志方式装入;2、查找当前的应用:db2 list application grep btpdbs;3、删除当前正在使用的application:db2 "force application (id1,id2,id3)"id1,id2,id3 是list显示的应用号;4、查看当前应用号的执行状态:db2 get snapshot for application agentid 299 grep row5、查看数据库参数:db2 get dbcfg for //当前数据库可以省略6、修改数据库的log数据:db2 update dbcfg using <参数名><参数值>7、db2stop force的用法:在进行bind的时候出现如下错误:sql0082can error has occurred which has terminated processing.sql0092nno package was created because of previous errors.sql0091nbinding was ended with "3" errors and "0" warnings.主要是表文件被加锁,不能继续使用;在进行stop的时候报错:db2stop8/03/2005 21:46:530 0 sql1025nthe database manager was not stopped because databases are still active.sql1025nthe database manager was not stopped because databases are still active.需要使用如下命令可以解决这个问题:db2stop force08/03/2005 21:47:49 0 0 sql1064ndb2stop processing was successful.sql1064ndb2stop processing was successful.然后启动数据库db2start,连接数据库db2s后,重新进行bind即可。

8、缓冲池参数修改:db2 alter bufferpoolibmdefaultbp size 10240查看本表的数据内容如下:db2 "select * from syscat.bufferpools";9、db2 日志处理:db2日志是以文件的形式存放在文件系统中,分为两种模式:循环日志和归档日志。

当创建新数据库时,日志的缺省模式是循环日志。

在这种模式下,只能实现数据库的脱机备份和恢复。

如果要实现联机备份和恢复,必须设为归档日志模式。

目前在综合业务系统中,设置的均是归档日志模式;其它系统(如事后监督、经营决策、中间业务等)一般都设置为循环日志模式。

至于采用何种模式,可以通过修改数据库配置参数(logretain)来实现:归档日志模式:db2 update dbcfg for using logretain on注:改为on后,查看数据库配置参数logretain的值时,实际显示的是recovery。

改变此参数后,再次连接数据库会显示数据库处于备份暂挂(backup pending)状态。

这时,需要做一次对数据库的脱机备份(db2 backup db),才能使数据库状态变为正常。

循环日志模式:db2 updatedbcfg for using logretain off10、db2 日志处理必须按照以下正确的步骤进行操作:要求必须使用db2命令prune进行清理,不建议使用rm命令删除。

删除前应保证应用已停止(即联机已下来)。

查看当前使用的日志文件目录及第一活动日志文件用“db2 get dbcfg for ”命令查看日志文件目录(path to log files)参数,确定数据库当前使用的日志文件目录。

例如:path to log files = /db2log/,说明db2日志存放目录是/db2log用“db2 get dbcfg for ”命令查看第一活动日志文件(first active log file)参数,该参数对应的日志文件之前的日志文件均为归档日志文件,如果确认没有用,可以删除。

例如:first active log file = s0015913.log,说明当前第一活动日志文件是s0015913.log。

备份好要删除的归档日志删除归档日志以应用用户(如btp)登录,执行:&#36; db2 connect to&#36; db2 prune logfile prior to s???????.log注:s???????.log为查看到的第一活动日志文件。

此命令可以将当前第一活动日志文件之前的归档日志文件全部删除。

11、如何清理db2diag.log文件db2diag.log,是用来记录db2数据库运行中的信息的文件。

可以通过此文件,查看记录的有关db2数据库详细的错误信息。

此文件也是不断增大的,需要定期进行清理。

可以通过查看实例的配置参数diagpath,来确定db2diag.log文件是放在哪个目录下:db2 get dbmcfg如果diagnostic data directory path(diagpath) = /home/db2inst1/sqllib/db2dump,则此文件是放在/home/db2inst1/sqllib/db2dump目录下。

当文件系统/home的使用率达到80%-90%左右时,应及时删除db2diag.log文件。

请按以下正确步骤操作:确认应用(如btp)、db2已经停止。

将原db2diag.log文件备份到其它文件系统下。

删除db2diag.log文件。

删除后,db2会自动创建一个新的文件。

12、load 操作在进行load的时候db2 "load from acmmst.txt of del modified by coldel replace into acmmstnonrecoverable ”由于数据不规范出现错误,强行中断以后,进行操作的时候出现如下错误:sql0668noperation not allowed for reason code "3" on table "btp.acmmst".sqlstate=57016此时,进行反方向操作即可:db2 "load from /dev/null of del terminate into acmmstnonrecoverable"。

如果没有使用参数nonrecoverable,则会出现数据库状态不正确的情况,使用:db2 list tablesapces show detail 查看状态,如果不是正常状态,则脱机状态进行备份即可。

两个表文件之间update的方法:db2 "update cdmcrd set offset = (select cdmlsl.offset from cdmlsl where cdmlsl.crdno=cdmcrd.crdno) where cdmcrd.crdno in (select cdmlsl.crdno from cdmlsl)13、多字段条件查询和修改表a中的字段有actno, cnlno,bal,pwd;表b中的字段为actno,cnlno,txnamt;目的是将a 表中的bal修改为b表中的txnamt,命令:db2 "update a set bal=(select txnamt from b where actno=a.actno and cnlno=lno) wherelnoin (select actnocnlno from b );14、多条件匹配查询查询某个表中条件是b?aaa的记录:db2 "select * from a where actno like 'b_aaa%'".查询数据中存在某些字符的记录:db2 "select * from a where actno like '%-aaa%".15、数据库恢复的处理进行数据库恢复的时候使用以下的命令:restore db db1 to /tstdb2/catalog into dbnewlogpath /tstdb2/db2log buffer 2048replace existing redirect parallelism 16;set tablespace containers for 1 using (path '/tstdb2/db2tmp');set tablespace containers for 2 using(device '/dev/rtstcontlv00' 2621440, device '/dev/rtstcontlv01' 2621440,device '/dev/rtstcontlv02' 2621440, device '/dev/rtstcontlv03' 2621440 ) ;restore db db1 continue;恢复完成以后执行命令db2s时报如下的错误:p570:>db2ssql1117n a connection to or activation of database "db" cannot be madebecause of roll-forward pending. sqlstate=57019db21034e the command was processed as an sql statement because it was not avalid command line processor command. duringsql processing it returned:sql1024n a database connection does not exist. sqlstate=08003解决办法如下:p570:>db2 rollforwarddbdb to end of logs and completerollforwardstatusinput database alias = dbnumber of nodes have returned status = 1node number = 0rollforward status = not pendingnext log file to be read =log files processed = -last committed transaction = 2005-11-20-10.59.23.000000db20000i the rollforward command completed successfully.db2日志管理(完成)---归档日志db2 update dbcfg for dbtest usinglogretain recovery userexit ondb2 update dbcfg for dbtest using logarchmeth1 DISK:D:/DB2/Arch_logdb2 update dbcfg for dbtest using logarchmeth2 DISK:D:/DB2/Arch_log2db2 update dbcfg for dbtest using LOGPRIMARY 100 LOGSECOND 50 LOGFILSZ 65535 ;(此时单个日志文件的大小为:65535 *4K ,可用日志的个数为: 100+50 )---循环日志/*Logretaim=Recovery --(Logretaim/userexit两个值任选一个)userexit=Yes*/db2 update dbcfg for edw using logarchmeth1 off logarchmeth2 offdb2 update dbcfg for edw using logretain NO userexit NOdb2 update dbcfg for edw using LOGPRIMARY 100 LOGSECOND 50 LOGFILSIZ 65535 ;(此时单个日志文件的大小为:65535 *4K ,可用日志的个数为: 100+50 )--重启数据库才生效(或者断开所有链接)set instance=db2inst4db2stop forcedb2startdb2 activate dbedw--更改联机日志的路径(更改后logpath的值发生改变)db2 update dbcfg for edw usingnewlogpath /dw/edwdata/db2log一.日志概述任何数据库管理系统都必须拥有确保数据一致性和可恢复性的机制。

相关文档
最新文档