IT分销/经销

DB2日志恢复答疑专贴

http://www.db2china.net/club/thread-29689-1-1.html

由于时间限制以及部分朋友交流踊跃,今天的内容主要放在基本概念及原理上。希望大家能再好好看下ppt,并使用工具(db2pd -transactions, -dirty, -logs)多做试验和体会,最好能把自己的心得通过博客或帖子分享出来,共同提高!

如果有什么疑问、或者配置/监控方面的问题请在此提出来。我将尽力解答。
谢谢。


--------------------
交流中需要更正的部分:

1.num_log_span参数:
每个事务都会被测试 - 如果该事务的firstlsn到当前写日志位置的lsn差值对应的日志数超过了num_log_span值,就会被rollback。由此可知在一个设置了num_log_span并且长事务不多的系统里,lowtranlsn对应的事务是最容易被选中的。

2. 日志所在文件系统DIO设置:
mount时不指定DIO。否则db2(DB2_LOGGER_NON_BUFFERED_IO默认值是automatic)将无法自主选择DIO模式还是非DIO模式。

请参考这个帖子内容特别是aix info center那段:
http://www.db2china.net/club/vie ... printable&tid=23066

You can set DIO using the AIX® dio mount option. Without the mount option, you can also enable DIO per-file by using the AIX O_DIRECT open() flag.

Using the -odio or -ocio flags can help performance on certain workloads, but users should be aware that using these flags will prevent file caching for these file systems. Because readahead is disabled for these file systems, this may decrease performance for large sequential reads.
参与24

23同行回答

菜菜鸟一号菜菜鸟一号数据库管理员龙信科技
Very Good!显示全部
Very Good!收起
互联网服务 · 2013-05-17
浏览1128
hchaohchao网站运营经理TWT
附上本次课程的演讲视频:第一部分:http://www.db2china.net/?action-topic-id-52-p-studyplay-vid-163第二部分:http://www.db2china.net/?action-topic-id-52-p-studyplay-vid-165显示全部
互联网服务 · 2013-05-16
浏览1047
田强田强系统工程师
回复  田强 谢谢了!        ----1、当前的LSN,比如当前LSN是0X000000001234,这样的信息会在日志记录 ...2013software 发表于 2013-5-11 11:46     对。理解他们区别核心是看定义,是计数器还是地址。...显示全部
回复  田强

谢谢了!

        ----1、当前的LSN,比如当前LSN是0X000000001234,这样的信息会在日志记录 ...
2013software 发表于 2013-5-11 11:46



    对。理解他们区别核心是看定义,是计数器还是地址。收起
IT分销/经销 · 2013-05-14
浏览1120
thuanqinthuanqin其它ibm
回复 20# 田强    好的,我试一下,谢谢田老师显示全部
回复 20# 田强


   好的,我试一下,谢谢田老师收起
互联网服务 · 2013-05-14
浏览1013
田强田强系统工程师
田老师,能帮我看下这个问题吗?问题是“db2ckbkp看到的需要前滚日志数和list history看到的日志为什么不 ...thuanqin 发表于 2013-5-11 22:53     这块具体细节我没看过,我的理解是history file里记录的是include的log范围。    你可以做下试验。 比如...显示全部
田老师,能帮我看下这个问题吗?

问题是“db2ckbkp看到的需要前滚日志数和list history看到的日志为什么不 ...
thuanqin 发表于 2013-5-11 22:53



    这块具体细节我没看过,我的理解是history file里记录的是include的log范围。

    你可以做下试验。 比如db2chbkp -a显示日志 5, 6,而history file只有5.
    先restore backup,看看有没有日志6.
   如果有,将其改名,使得rollforward时无法找到该日志。看看rollforward能否成功,若是成功了,说明6不需要。如果报错了,说明需要。---对于online backup,db2必须要rollforward到online backup结束时所写到的那个日志(你看下这个日志size,一般和logfilsz不一样的,被truncate之后立即归档)才能确保数据库一致性。收起
IT分销/经销 · 2013-05-14
浏览1139
thuanqinthuanqin其它ibm
田老师,能帮我看下这个问题吗?http://www.db2china.net/club/thread-29795-1-1.html问题是“db2ckbkp看到的需要前滚日志数和list history看到的日志为什么不一样?”显示全部
田老师,能帮我看下这个问题吗?
http://www.db2china.net/club/thread-29795-1-1.html
问题是“db2ckbkp看到的需要前滚日志数和list history看到的日志为什么不一样?”收起
互联网服务 · 2013-05-11
浏览1024
2013software2013software软件开发工程师交通银行
回复 17# 田强 谢谢了!        ----1、当前的LSN,比如当前LSN是0X000000001234,这样的信息会在日志记录里吗?您是指当前db2所写的日志位置吗?如果是,这个会在内存里记录,但不需要记录在日志记录里。嗯,是指的您说的意思。还有,从v9.8开始,LSN概念变...显示全部
回复 17# 田强

谢谢了!

        ----1、当前的LSN,比如当前LSN是0X000000001234,这样的信息会在日志记录里吗?
您是指当前db2所写的日志位置吗?如果是,这个会在内存里记录,但不需要记录在日志记录里。

嗯,是指的您说的意思。
还有,从v9.8开始,LSN概念变为log record计数器,也就是自db创建起,写一个log record,lsn会加1。
那么这个log record计数器就是会包含在日志记录里了吧?一个10MB的日志文件,只有两条log record,那第二个日志文件的log record计数器就是3了吧?收起
互联网服务 · 2013-05-11
浏览1043
田强田强系统工程师
http://www.db2china.net/club/vie ... =1&extra=#pid196191    回复  田强        现在明白了,LSN是字节的偏移量。        还有点疑问,日志文件记录除了记录数据变化前后的 ...  ...显示全部
http://www.db2china.net/club/vie ... =1&extra=#pid196191

    回复  田强


        现在明白了,LSN是字节的偏移量。
        还有点疑问,日志文件记录除了记录数据变化前后的 ...
    2013software 发表于 2013-5-9 23:28




----1、当前的LSN,比如当前LSN是0X000000001234,这样的信息会在日志记录里吗?
您是指当前db2所写的日志位置吗?如果是,这个会在内存里记录,但不需要记录在日志记录里。

-----2、日志是要应用在数据页上的吧,那日志记录里是否包含了应该作用在哪一条数据页上的信息呢?要不,怎么知道应用该日志到正确的页。比如说该日志要应用在页号为10号的数据页上,那10这个数字是否会包含在日志记录里呢?
对的。日志记录里要包含操作对象的详细信息。收起
IT分销/经销 · 2013-05-11
浏览1122
田强田强系统工程师
http://www.db2china.net/club/vie ... =1&extra=#pid196187:本帖最后由 trams 于 2013-5-10 12:28 编辑    ---报日志满的错误不一定是因为日志空间用尽,也有可能是因为某个应用长时间未提交阻止了LSN的分配    ...    田强 发表于 2013-5-...显示全部
http://www.db2china.net/club/vie ... =1&extra=#pid196187

本帖最后由 trams 于 2013-5-10 12:28 编辑

    ---报日志满的错误不一定是因为日志空间用尽,也有可能是因为某个应用长时间未提交阻止了LSN的分配
    ...
    田强 发表于 2013-5-9 14:17




---- 描述是有问题的。应该说是日志无法归档,至于LSN分配应该是这个过程中的一步吧。个人认为。。


    日志写满了就可以归档的。lsn不用分配的。但由于日志文件个数、日志文件大小是有限的,如果某个长事务一直hold住lowtranlsn会导致日志文件无法重用,所以报log full。这个和disk full是两码事。
您可以试一下infinite logging(logsecond=-1,没有logprimary+logsecond限制),只要磁盘有足够空间,再长的事务也不会log full。收起
IT分销/经销 · 2013-05-11
浏览1120
田强田强系统工程师
回复 13# mdkii ----DB2具体如何进行undo的。是不是采用一种逻辑的方式,insert 改为 delete,update的再反向update?对,大致就是这样。因为undo是对已发生操作的反向操作嘛。日志记录(log record)会记录操作的详细信息,比如操作类型、更改的数据、如何undo到之前状态等。http:/...显示全部
回复 13# mdkii

----DB2具体如何进行undo的。是不是采用一种逻辑的方式,insert 改为 delete,update的再反向update?

对,大致就是这样。因为undo是对已发生操作的反向操作嘛。
日志记录(log record)会记录操作的详细信息,比如操作类型、更改的数据、如何undo到之前状态等。
http://pic.dhe.ibm.com/infocente ... doc%2Fr0024868.html


---insert的时候分配了一页,这个页同时又被其他人写入了,那么rollback的时候,分配这一页的动作就不能撤销了。总感觉,尽管做了日志记录,有些事情还是不能反向操作的。
这个是没问题的。
在用户看来这是一个简单的动作,但软件实现上这一个动作是由N个拆解动作,通过各个分层组件协同完成的。
比如insert是数据管理层动作,而分配是表空间存储层的动作。
http://pic.dhe.ibm.com/infocente ... 2567%2565%2522%2520

每个动作都会写日志记录。 逻辑上各动作之间有时序,那么rollback的时候就可以一步步反向来做。
有兴趣的话您可以使用db2trc针对某个操作来收集trace,看一下db2的大致执行流程。收起
IT分销/经销 · 2013-05-11
浏览1113

提问者

田强
系统工程师

问题状态

  • 发布时间:2013-05-09
  • 关注会员:1 人
  • 问题浏览:15459
  • 最近回答:2013-05-17
  • X社区推广