DB2数据库日志管理上课讲义.docx
- 文档编号:5427925
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:13
- 大小:26.51KB
DB2数据库日志管理上课讲义.docx
《DB2数据库日志管理上课讲义.docx》由会员分享,可在线阅读,更多相关《DB2数据库日志管理上课讲义.docx(13页珍藏版)》请在冰豆网上搜索。
DB2数据库日志管理上课讲义
DB2_数据库日志管理
1、load方法装入数据:
exporttotempfileofdelselect*fromtablenamewherenot清理条件;
loadfromtempfileofdelmodifiedbydelprioritycharreplaceintotablenamenonrecoverable;
说明:
在不相关的数据表export数据时,可以采取并发的形式,以提高效率;
tablename指待清理table的名称;
modifiedbydelprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况;
replaceinto对现数据库中的内容进行替换,即将现行的数据记录清理,替换为数据文件内容;
nonrecoverable无日志方式装入;
2、查找当前的应用:
db2listapplicationgrepbtpdbs;
3、删除当前正在使用的application:
db2"forceapplication(id1,id2,id3)"
id1,id2,id3是list显示的应用号;
4、查看当前应用号的执行状态:
db2getsnapshotforapplicationagentid299greprow
5、查看数据库参数:
db2getdbcfgfor//当前数据库可以省略
6、修改数据库的log数据:
db2updatedbcfgusing<参数名><参数值>
7、db2stopforce的用法:
在进行bind的时候出现如下错误:
sql0082canerrorhasoccurredwhichhasterminatedprocessing.
sql0092nnopackagewascreatedbecauseofpreviouserrors.
sql0091nbindingwasendedwith"3"errorsand"0"warnings.
主要是表文件被加锁,不能继续使用;
在进行stop的时候报错:
db2stop
8/03/200521:
46:
5300sql1025nthedatabasemanagerwasnotstoppedbecausedatabasesarestillactive.
sql1025nthedatabasemanagerwasnotstoppedbecausedatabasesarestillactive.
需要使用如下命令可以解决这个问题:
db2stopforce
08/03/200521:
47:
4900sql1064ndb2stopprocessingwassuccessful.
sql1064ndb2stopprocessingwassuccessful.
然后启动数据库db2start,连接数据库db2s后,重新进行bind即可。
8、缓冲池参数修改:
db2alterbufferpoolibmdefaultbpsize10240
查看本表的数据内容如下:
db2"select*fromsyscat.bufferpools";
9、db2日志处理:
db2日志是以文件的形式存放在文件系统中,分为两种模式:
循环日志和归档日志。
当创建新数据库时,日志的缺省模式是循环日志。
在这种模式下,只能实现数据库的脱机备份和恢复。
如果要实现联机备份和恢复,必须设为归档日志模式。
目前在综合业务系统中,设置的均是归档日志模式;其它系统(如事后监督、经营决策、中间业务等)一般都设置为循环日志模式。
至于采用何种模式,可以通过修改数据库配置参数(logretain)来实现:
归档日志模式:
db2updatedbcfgforusinglogretainon
注:
改为on后,查看数据库配置参数logretain的值时,实际显示的是recovery。
改变此参数后,再次连接数据库会显示数据库处于备份暂挂(backuppending)状态。
这时,需要做一次对数据库的脱机备份(db2backupdb),才能使数据库状态变为正常。
循环日志模式:
db2updatedbcfgforusinglogretainoff
10、db2日志处理
必须按照以下正确的步骤进行操作:
要求必须使用db2命令prune进行清理,不建议使用rm命令删除。
删除前应保证应用已停止(即联机已下来)。
查看当前使用的日志文件目录及第一活动日志文件
用“db2getdbcfgfor”命令查看日志文件目录(pathtologfiles)参数,确定数据库当前使用的日志文件目录。
例如:
pathtologfiles=/db2log/,说明db2日志存放目录是/db2log
用“db2getdbcfgfor”命令查看第一活动日志文件(firstactivelogfile)参数,该参数对应的日志文件之前的日志文件均为归档日志文件,如果确认没有用,可以删除。
例如:
firstactivelogfile=s0015913.log,说明当前第一活动日志文件是s0015913.log。
备份好要删除的归档日志
删除归档日志以应用用户(如btp)登录,执行:
$db2connectto
$db2prunelogfilepriortos?
?
?
?
?
?
?
.log
注:
s?
?
?
?
?
?
?
.log为查看到的第一活动日志文件。
此命令可以将当前第一活动日志文件之前的归档日志文件全部删除。
11、如何清理db2diag.log文件
db2diag.log,是用来记录db2数据库运行中的信息的文件。
可以通过此文件,查看记录的有关db2数据库详细的错误信息。
此文件也是不断增大的,需要定期进行清理。
可以通过查看实例的配置参数diagpath,来确定db2diag.log文件是放在哪个目录下:
db2getdbmcfg如果diagnosticdatadirectorypath(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"loadfromacmmst.txtofdelmodifiedbycoldelreplaceintoacmmstnonrecoverable”
由于数据不规范出现错误,强行中断以后,进行操作的时候出现如下错误:
sql0668noperationnotallowedforreasoncode"3"ontable"btp.acmmst".
sqlstate=57016
此时,进行反方向操作即可:
db2"loadfrom/dev/nullofdelterminateintoacmmstnonrecoverable"。
如果没有使用参数nonrecoverable,则会出现数据库状态不正确的情况,使用:
db2listtablesapcesshowdetail查看状态,如果不是正常状态,则脱机状态进行备份即可。
两个表文件之间update的方法:
db2"updatecdmcrdsetoffset=(selectcdmlsl.offsetfromcdmlslwherecdmlsl.crdno=cdmcrd.crdno)wherecdmcrd.crdnoin(selectcdmlsl.crdnofromcdmlsl)
13、多字段条件查询和修改
表a中的字段有actno,cnlno,bal,pwd;表b中的字段为actno,cnlno,txnamt;目的是将a表中的bal修改为b表中的txnamt,命令:
db2"updateasetbal=(selecttxnamtfrombwhereactno=a.actnoandcnlno=lno)wherelnoin(selectactnocnlnofromb);
14、多条件匹配查询
查询某个表中条件是b?
aaa的记录:
db2"select*fromawhereactnolike'b_aaa%'".
查询数据中存在某些字符的记录:
db2"select*fromawhereactnolike'%-aaa%".
15、数据库恢复的处理
进行数据库恢复的时候使用以下的命令:
restoredbdb1to/tstdb2/catalogintodbnewlogpath/tstdb2/db2logbuffer2048replaceexistingredirectparallelism16;settablespacecontainersfor1using(path'/tstdb2/db2tmp');settablespacecontainersfor2using(device'/dev/rtstcontlv00'2621440,device'/dev/rtstcontlv01'2621440,device'/dev/rtstcontlv02'2621440,device'/dev/rtstcontlv03'2621440);restoredbdb1continue;
恢复完成以后执行命令db2s时报如下的错误:
p570:
>db2ssql1117naconnectiontooractivationofdatabase"db"cannotbemadebecauseofroll-forwardpending.sqlstate=57019db21034ethecommandwasprocessedasansqlstatementbecauseitwasnotavalidcommandlineprocessorcommand.duringsqlprocessingitreturned:
sql1024nadatabaseconnectiondoesnotexist.sqlstate=08003
解决办法如下:
p570:
>db2rollforwarddbdbtoendoflogsandcompleterollforwardstatusinputdatabasealias=dbnumberofnodeshavereturnedstatus=1nodenumber=0rollforwardstatus=notpendingnextlogfiletoberead=logfilesprocessed=-lastcommittedtransaction=2005-11-20-10.59.23.000000db20000itherollforwardcommandcompletedsuccessfully.
db2日志管理(完成)
---归档日志
db2updatedbcfgfordbtestusinglogretainrecoveryuserexiton
db2updatedbcfgfordbtestusinglogarchmeth1DISK:
D:
/DB2/Arch_log
db2updatedbcfgfordbtestusinglogarchmeth2DISK:
D:
/DB2/Arch_log2
db2updatedbcfgfordbtestusingLOGPRIMARY100LOGSECOND50LOGFILSZ65535;
(此时单个日志文件的大小为:
65535*4K,可用日志的个数为:
100+50)
---循环日志
/*Logretaim=Recovery--(Logretaim/userexit两个值任选一个)
userexit=Yes*/
db2updatedbcfgforedwusinglogarchmeth1offlogarchmeth2off
db2updatedbcfgforedwusinglogretainNOuserexitNO
db2updatedbcfgforedwusingLOGPRIMARY100LOGSECOND50LOGFILSIZ65535;
(此时单个日志文件的大小为:
65535*4K,可用日志的个数为:
100+50)
--重启数据库才生效(或者断开所有链接)
setinstance=db2inst4
db2stopforce
db2start
db2activatedbedw
--更改联机日志的路径(更改后logpath的值发生改变)
db2updatedbcfgforedwusingnewlogpath/dw/edwdata/db2log
一.日志概述
任何数据库管理系统都必须拥有确保数据一致性和可恢复性的机制。
关系数据库系统为确保那些非常重要的特性所使用的众多机制之一是事务性日志记录。
在本文中,我们将定义和讨论事务性日志记录的类型,及如何分配日志文件、如何存储它们。
数据库存储了供应用程序访问和处理的数据。
那些应用程序会插入、读取、更新或删除数据。
每一个这样的活动都是在一个事务中执行的,该事务被定义成“应用程序过程中一个可恢复的操作序列”。
除非已经提交了事务(也称作“工作单元”),否则它不会影响数据库。
将数据库操作组合到事务中只是确保数据一致性解决方案的一半。
另一半是称作预写式日志记录(write-aheadlogging)的数据库管理器实现。
不管事务是否被提交,只要它们发生,就会记录这些事务。
在将任何数据从缓冲池写到数据库结构之前,事务会从日志缓冲区(logbuffer)写到日志文件(事务性日志记录)。
用于记录事务的文件叫做事务日志。
二.日志分类
DB2UDB有两种可用的日志记录类型—循环(circular)日志记录和归档(archive)日志记录。
其中归档日志又分为联机归档日志和脱机归档日志。
2.1循环日志记录
循环日志记录是数据库使用的缺省日志记录策略。
在此策略中,一旦日志目录中最后一个主日志文件被写满了,就会将新的事务写到第一个日志文件中,从而覆盖现有的日志数据。
这些新事务会继续依次覆盖每个旧日志文件。
这种日志记录方法确保了所有已提交事务的数据一致性,这样就可以执行应急恢复。
循环日志记录通常在数据仓库环境中使用,在该环境中,恢复数据库需要的只是恢复数据库映象的问题。
该策略不应该用在线事务处理(on-linetransactionprocessing,OLTP)环境,因为它不可能进行前滚恢复。
2.2归档日志记录
与循环日志记录相比,当最后一个日志文件写满时,归档日志记录过程会创建一个新的日志文件,这样将来的事务就不会覆盖现有的日志文件。
当初始化数据库时,系统会在活动日志目录中分配一定数量、指定大小的主日志文件。
这个数量由数据库配置参数控制。
当主日志文件都写满时,就会“根据需要”创建辅助日志文件,直到创建了最大数量的辅助日志文件为止。
一旦达到了这个数量,如果需要附加的日志空间,就会发出一个错误,指出没有更多的可用日志文件,所有数据库活动停止。
利用归档日志记录,就可能采取联机(在线)数据库备份,在执行这一操作期间,会继续记录数据库活动。
如果数据库崩溃或发生故障,就会使用全备份映象,然后执行使用归档日志的前滚操作,通过前滚到日志结尾,将数据库恢复到时间点状态或最近的一致状态,从而恢复数据库。
有两种归档日志:
联机归档日志:
活动日志中所有改动对正常处理已不需要,即该日志中所记录的事务都已提交并写入数据库文件时,该活动日志转换为联机归档日志。
称之为联机,是由于它们与活动日志存放在同一个目录下。
脱机归档日志:
将联机归档日志从活动日志目录下Copy到另外的地方存档,就称为脱机归档日志。
这些日志可能在数据库前滚恢复的时候仍然需要。
三.日志相关参数
我们只有弄清楚了日志相关的参数之后,才能正确修改配置参数,得到我们想要的日志管理模式,现对各参数介绍如下:
3.1LOGRETAIN
缺省情况下,logretaim的值为OFF,此时采用循环日志记录方式,将期修改为ON/RECOVERY时,采用归档日志记录方式,从而允许数据库管理器使用前滚恢复方法,可以进行在线备份。
该参数使归档日志保留在数据库日志路径目录中。
当启用了logretain配置参数时,就不需要启用userexit。
这两个参数中的任何一个都足以允许前滚恢复方法。
以下是logretain的有效值:
No(缺省值)—表示不保留日志。
Recovery—表示保留日志,且可以用于前滚恢复。
此外,如果您使用数据复制,CAPTURE程序可以将日志中所记录的更新写到更改表。
Capture—表示只保留日志,这样Capture程序可以将更新写到更改表。
如果没有裁剪这些日志,那么它们可以用于正向恢复。
注:
通常仅当为了数据复制而设置数据库时,才使用Capture设置。
如果logretain设置成“Recovery”或者userexit设置成“Yes”,将保留活动日志文件,而且这些文件将变成联机归档日志文件,以便在前滚恢复中使用。
这称为日志保留记录。
在将logretain设置成“Recovery”和/或将userexit设置成“Yes”之后,必须对数据库进行完全备份。
这一状态由backup_pending标志参数表示。
如果再logretain设置成“No”并且userexit也设置成“No”,就不能对数据库执行前滚恢复,而且可恢复性仅限于最新的数据库备份。
在这种情况下,数据库管理器会删除logpath目录中的所有日志文件(包括联机归档日志文件),分配新的活动日志文件,并且回复到循环日志记录。
当logretain设置成“Capture”时,在Capture程序完成时,它会调用PRUNELOGFILE命令来删除日志文件。
虽然如果不裁剪日志,这些日志就可以用于正向恢复,但如果您想要确保可以对数据库执行前滚恢复,就不应该将logretain设置成“Capture”。
当logretain配置参数设置成“RECOVERY”时,日志文件将保留在活动日志路径中。
活动日志路径由数据库配置文件中的“日志文件路径(PathtoLogFiles)(logpath)”或“更改的日志文件路径(ChangedPathtoLogFiles)(newlogpath)”值确定。
3.2USEREXIT
该参数使数据库管理器调用用户出口程序来归档和检索日志。
启用了用户出口之后,就允许前滚恢复。
当启用了userexit配置参数时,就不需要启用logretain。
这两个参数中的任何一个都足以允许前滚恢复方法。
使用该参数表示覆盖了循环日志记录(缺省值)。
userexit包含有logretain的功能,反之却不成立。
当使用userexit配置参数或logretain配置参数以允许前滚恢复时,活动日志路径非常重要。
当启用了userexit配置参数时,会调用用户出口来归档日志文件,并将它们移到活动日志路径以外的位置。
以下是该参数的有效值:
No(缺省值)
Yes
如果启用了该参数,无论logretain参数如何设置,都会执行日志保留记录。
该参数还表示用户出口程序应该用于归档和检索日志文件。
当数据库管理器关闭日志文件时,会归档日志文件。
当ROLLFORWARD实用程序需要使用日志文件来恢复数据库时,就会检索它们。
在启用了参数logretain和/或userexit时,必须对数据库进行完全备份。
这一状态由backup_pending标志参数表示。
如果取消选择这两个参数,就不能对数据库进行前滚恢复,因为将不再保留日志。
在这种情况下,数据库管理器会删除logpath目录中的所有日志文件(包括联机归档日志文件),分配新的活动日志文件,并且回复到循环日志记录。
3.3LOGPRIMARY
该参数指定要创建的主日志的数量。
无论主日志是空的还是满的,所需的磁盘空间量都是相同的。
因此,如果您配置的日志数量比需要的多,那么您就不必要地多使用了磁盘空间。
如果您配置的日志太少了,就会遇到“日志满”情况。
当选择要配置的日志数量时,必须考虑您生成的每个日志的大小,以及您的应用程序是否能处理“日志满”情况。
对于V8.1,这个限制是256GB。
即,日志文件的数量(LOGPRIMARY+LOGSECOND)乘以以字节为单位的每个日志文件的大小(LOGFILSIZ*4096)必须小于256GB。
3.4LOGSECOND
该参数指定为恢复日志文件(仅当需要时)而创建和使用的辅助日志文件的数量。
请注意,日志文件的总数由以下等式限制:
logprimary+logsecond<=256(DB2UDBV8.1)
当主日志文件满了时,就会按需要每次分配一个辅助日志文件(大小为logfilsiz),最多达到由该参数控制的最大数量。
如果所需的辅助日志文件的数量比该参数允许的数量大,就会将一个错误代码返回到应用程序,并且会停止对数据库的操作。
3.5LOGFILSZ
该参数确定了每个已配置日志的页数量。
一页的大小是4KB。
每个主日志的大小(页数量)对数据库性能有直接影响。
当将数据库配置成保留日志,每当写满一个日志时,就会发出一个分配和初始化一个新日志的请求。
增加日志大小会减少为分配和初始化新日志所需的请求数量。
但是,请注意,日志大小越大,格式化每个新日志所花费的时间就越多。
格式化新日志对于连接到数据库的应用程序是透明的,而且也不会影响数据库性能。
3.6LOGBUFSZ
该参数允许您指定数据库共享内存的数量,在将日志记录写到磁盘之前,用该共享内存作为这些记录的缓冲区。
当发生以下情况之一时,会将日志记录写到磁盘:
事务提交/日志缓冲区满了/引起写操作的其它一些内部数据库管理器事件。
缓冲日志记录将导致使日志文件I/O更有效,因为将日志记录写到磁盘的频率将更低,而每次写入磁盘的日志记录则更多。
3.7MINCOMMIT
该参数允许您延迟将日志记录写到磁盘,直到已经执行了所规定的最小数量的提交。
当您有多个针对数据库的应用程序正在运行,并且应用程序在非常短的时间段里请求了许多提交,那么该延迟可以帮助减少与写日志记录相关的数据库管理器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DB2 数据库 日志 管理 上课 讲义