查看: 9394|回复: 13

[精华] 再来一个经典案例:db2 migrate db from v7->v8 got 10004C error

[复制链接]
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
跳转到指定楼层
1#
发表于 2006-5-25 23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题:
客户有一个aix box,其中两个instance。
最近他们将两个instance 从v7 fp9升级到v8 fp11。
其中一个instance 没有问题。
另一个instance有3个数据库,其中一个数据库在作migrate db的时候报告sql10004c错误:
SQL10004C An I/O error occurred while accessing the database
          directory.

分析:
1)了解系统信息
2)得到必要的诊断文件。
因为instance的其他database都可以成功migrate,因此问题估计只局限于这一个database
在db2diag.log里有如下信息:
2006-05-16-13.39.22.962416-240 I153574C271        LEVEL: Severe
PID     : 1294402              TID  : 772         PROC : db2hmon 0
INSTANCE: deviadm              NODE : 000
FUNCTION: DB2 UDB, base sys utilities, sqledogd, probe:100
MESSAGE : Start db directory migration

2006-05-16-13.39.22.962732-240 I153846C338        LEVEL: Severe
PID     : 1294402              TID  : 772         PROC : db2hmon 0
INSTANCE: deviadm              NODE : 000
FUNCTION: DB2 UDB, base sys utilities, sqledogd, probe:140
MESSAGE : dirtype =
DATA #1 : Hexdump, 1 bytes
0x3074F010 : 76                                         v

2006-05-16-13.39.23.046264-240 E154185C329        LEVEL: Warning (OS)
PID     : 1294402              TID  : 772         PROC : db2hmon 0
INSTANCE: deviadm              NODE : 000
FUNCTION: DB2 UDB, oper system services, sqlochgfileptr, probe:100
CALLED  : OS, -, unspecified_system_function
OSERR   : EBADF (9) "Bad file number"

2006-05-16-13.39.23.046737-240 E154515C329        LEVEL: Warning (OS)
PID     : 1294402              TID  : 772         PROC : db2hmon 0
INSTANCE: deviadm              NODE : 000
FUNCTION: DB2 UDB, oper system services, sqlochgfileptr, probe:100
CALLED  : OS, -, unspecified_system_function
OSERR   : EBADF (9) "Bad file number"
从这里我们屁也看不出来,除了好像是什么EBADF有点用。
从/usr/include/errno.h我们看到#define EBADF   9       /* Bad file descriptor                  */
因此初步设想,文件错误……

客户重新回到v7 instance restore database,然后再次升级,错误依旧……
看来并非偶然情况,值得分析……

从上面的db2diag.log我们看到错误是文件引起的,但具体什么文件偶们就8知道了,这样就只能让客户作db2trc
db2trc on -l 10M
db2trc clr
<reproduce the problem>
db2trc dmp db2trc.dmp
db2trc off
db2trc flw db2trc.dmp db2trc.flw
db2trc fmt db2trc.dmp db2trc.fmt

拿到db2trc以后在里面找sqlochgfileptr, 一下子就看到了:
4372        | | | | | | | | | | | sqlegred entry
4373        | | | | | | | | | | | | sqlochgfileptr entry
4374        | | | | | | | | | | | | | pdLogSysRC entry
4375        | | | | | | | | | | | | | | _pdlogInt entry
4376        | | | | | | | | | | | | | | | sqltGetDiagPath entry
4377        | | | | | | | | | | | | | | | sqltGetDiagPath data [probe 10]
4378        | | | | | | | | | | | | | | | sqltGetDiagPath exit
4379        | | | | | | | | | | | | | | _pdlogInt data [probe 130]
4380        | | | | | | | | | | | | | | | sqloGetInstanceOwnerName entry
4381        | | | | | | | | | | | | | | | sqloGetInstanceOwnerName exit
4382        | | | | | | | | | | | | | | | sqloGetName entry
4383        | | | | | | | | | | | | | | | sqloGetName exit
4384        | | | | | | | | | | | | | | | sqltgets entry
4385        | | | | | | | | | | | | | | | sqltgets exit
4386        | | | | | | | | | | | | | | _pdlogInt data [probe 110]
4387        | | | | | | | | | | | | | | | sqloopenp entry
4388        | | | | | | | | | | | | | | | sqloopenp data [probe 30]
4389        | | | | | | | | | | | | | | | | sqloflock entry
4390        | | | | | | | | | | | | | | | | sqloflock data [probe 1]
4391        | | | | | | | | | | | | | | | | sqloflock exit
4392        | | | | | | | | | | | | | | | sqloopenp exit [rc = 0x070F00CB = 118423755 = SQLO_FREV]
4393        | | | | | | | | | | | | | | | sqlochgfileptr entry
4394        | | | | | | | | | | | | | | | sqlochgfileptr exit
4395        | | | | | | | | | | | | | | | sqlowrite entry
4396        | | | | | | | | | | | | | | | sqlowrite exit
4397        | | | | | | | | | | | | sqlochgfileptr SYSTEM ERROR [probe 100]
4398        | | | | | | | | | | | | | | | sqloclose entry
4399        | | | | | | | | | | | | | | | sqloclose exit
4400        | | | | | | | | | | | | | | _pdlogInt exit
4401        | | | | | | | | | | | | | pdLogSysRC exit
4402        | | | | | | | | | | | | sqlochgfileptr exit [rc = 0x860F000A = -2045837302 = SQLO_FNEX]
4403        | | | | | | | | | | | sqlegred exit [rc = 0xFFFFD8EC = -10004]
但是光这些我们看不到程序逻辑,再往上翻页:
4207        | | | | | | | | | sqlederd entry
4208        | | | | | | | | | | sqledogd entry[/COLOR]
4209        | | | | | | | | | | | sqlfcsys entry
4210        | | | | | | | | | | | | sqlf_read_dbm_and_verif entry
4211        | | | | | | | | | | | | | sqlfpath entry
4212        | | | | | | | | | | | | | | sqledflt entry
4213        | | | | | | | | | | | | | | | sqloInstancePath entry
4214        | | | | | | | | | | | | | | | sqloInstancePath exit
4215        | | | | | | | | | | | | | | sqledflt exit
4216        | | | | | | | | | | | | | sqlfpath exit
4217        | | | | | | | | | | | | sqlf_read_dbm_and_verif data [probe 4]
4218        | | | | | | | | | | | | | sqloopenp entry
4219        | | | | | | | | | | | | | sqloopenp data [probe 30]
4220        | | | | | | | | | | | | | | sqloflock entry
4221        | | | | | | | | | | | | | | sqloflock data [probe 1]
4222        | | | | | | | | | | | | | | sqloflock exit
4223        | | | | | | | | | | | | | sqloopenp exit
4224        | | | | | | | | | | | | | sqloread entry
4225        | | | | | | | | | | | | | sqloread exit
4226        | | | | | | | | | | | | | sqlfcsum entry
4227        | | | | | | | | | | | | | sqlfcsum exit [rc = 0x0000529C = 21148]
4228        | | | | | | | | | | | | sqlf_read_dbm_and_verif exit
4229        | | | | | | | | | | | | sqloclose entry
4230        | | | | | | | | | | | | sqloclose exit
4231        | | | | | | | | | | | sqlfcsys exit
4232        | | | | | | | | | | | sqlegopn entry
4233        | | | | | | | | | | | | sqloopenp entry
4234        | | | | | | | | | | | | sqloopenp data [probe 30]
4235        | | | | | | | | | | | | | sqloflock entry
4236        | | | | | | | | | | | | | sqloflock data [probe 1]
4237        | | | | | | | | | | | | | sqloflock exit
4238        | | | | | | | | | | | | sqloopenp exit
4239        | | | | | | | | | | | sqlegopn exit
4240        | | | | | | | | | | | sqlegred entry
4241        | | | | | | | | | | | | sqlochgfileptr entry
4242        | | | | | | | | | | | | sqlochgfileptr exit
4243        | | | | | | | | | | | | sqloread entry
4244        | | | | | | | | | | | | sqloread exit
4245        | | | | | | | | | | | sqlegred exit
4246        | | | | | | | | | | | sqloclose entry
4247        | | | | | | | | | | | sqloclose exit
4248        | | | | | | | | | | | sqlt_logerr_str entry
4249        | | | | | | | | | | | sqlt_logerr_str data [probe 10]
4250        | | | | | | | | | | | | pdLog entry
4251        | | | | | | | | | | | | | _pdlogInt entry
4252        | | | | | | | | | | | | | | sqltGetDiagPath entry
4253        | | | | | | | | | | | | | | sqltGetDiagPath data [probe 10]
4254        | | | | | | | | | | | | | | sqltGetDiagPath exit
4255        | | | | | | | | | | | | | _pdlogInt data [probe 130]
4256        | | | | | | | | | | | | | | sqloGetInstanceOwnerName entry
4257        | | | | | | | | | | | | | | sqloGetInstanceOwnerName exit
4258        | | | | | | | | | | | | | | sqloGetName entry
4259        | | | | | | | | | | | | | | sqloGetName exit
4260        | | | | | | | | | | | | | | sqltgets entry
4261        | | | | | | | | | | | | | | sqltgets exit
4262        | | | | | | | | | | | | | _pdlogInt data [probe 110]
4263        | | | | | | | | | | | | | | sqloopenp entry
4264        | | | | | | | | | | | | | | sqloopenp data [probe 30]
4265        | | | | | | | | | | | | | | | sqloflock entry
4266        | | | | | | | | | | | | | | | sqloflock data [probe 1]
4267        | | | | | | | | | | | | | | | sqloflock exit
4268        | | | | | | | | | | | | | | sqloopenp exit [rc = 0x070F00CB = 118423755 = SQLO_FREV]
4269        | | | | | | | | | | | | | | sqlochgfileptr entry
4270        | | | | | | | | | | | | | | sqlochgfileptr exit
4271        | | | | | | | | | | | | | | sqlowrite entry
4272        | | | | | | | | | | | | | | sqlowrite exit
4273        | | | | | | | | | | sqledogd data [probe 100]
4274        | | | | | | | | | | | | | | sqloclose entry
4275        | | | | | | | | | | | | | | sqloclose exit
4276        | | | | | | | | | | | | | _pdlogInt exit
4277        | | | | | | | | | | | | pdLog exit
4278        | | | | | | | | | | | sqlt_logerr_str exit
4279        | | | | | | | | | | | sqledflt entry
4280        | | | | | | | | | | | | sqloInstancePath entry
4281        | | | | | | | | | | | | sqloInstancePath exit
4282        | | | | | | | | | | | sqledflt exit
4283        | | | | | | | | | | | sqledflt entry
4284        | | | | | | | | | | | | sqloInstancePath entry
4285        | | | | | | | | | | | | sqloInstancePath exit
4286        | | | | | | | | | | | sqledflt exit
4287        | | | | | | | | | | | sqloGetInstanceOwnerName entry
4288        | | | | | | | | | | | sqloGetInstanceOwnerName exit
4289        | | | | | | | | | | | sqlt_logerr_str entry
4290        | | | | | | | | | | | sqlt_logerr_str data [probe 10]
4291        | | | | | | | | | | | sqlt_logerr_str data [probe 20]
4292        | | | | | | | | | | | | pdLog entry
4293        | | | | | | | | | | | | | _pdlogInt entry
4294        | | | | | | | | | | | | | | sqltGetDiagPath entry
4295        | | | | | | | | | | | | | | sqltGetDiagPath data [probe 10]
4296        | | | | | | | | | | | | | | sqltGetDiagPath exit
4297        | | | | | | | | | | | | | _pdlogInt data [probe 130]
4298        | | | | | | | | | | | | | | sqloGetInstanceOwnerName entry
4299        | | | | | | | | | | | | | | sqloGetInstanceOwnerName exit
4300        | | | | | | | | | | | | | | sqloGetName entry
4301        | | | | | | | | | | | | | | sqloGetName exit
4302        | | | | | | | | | | | | | | sqltgets entry
4303        | | | | | | | | | | | | | | sqltgets exit
4304        | | | | | | | | | | | | | _pdlogInt data [probe 110]
4305        | | | | | | | | | | | | | | sqloopenp entry
4306        | | | | | | | | | | | | | | sqloopenp data [probe 30]
4307        | | | | | | | | | | | | | | | sqloflock entry
4308        | | | | | | | | | | | | | | | sqloflock data [probe 1]
4309        | | | | | | | | | | | | | | | sqloflock exit
4310        | | | | | | | | | | | | | | sqloopenp exit [rc = 0x070F00CB = 118423755 = SQLO_FREV]
4311        | | | | | | | | | | | | | | sqlochgfileptr entry
4312        | | | | | | | | | | | | | | sqlochgfileptr exit
4313        | | | | | | | | | | | | | _pdlogInt data [probe 90]
4316        | | | | | | | | | | | | | | sqlowrite entry
4317        | | | | | | | | | | | | | | sqlowrite exit
4318        | | | | | | | | | | sqledogd data [probe 140][/COLOR]
4319        | | | | | | | | | | | | | | sqloclose entry
4320        | | | | | | | | | | | | | | sqloclose exit
4321        | | | | | | | | | | | | | _pdlogInt exit
4322        | | | | | | | | | | | | pdLog exit
4323        | | | | | | | | | | | sqlt_logerr_str exit
4324        | | | | | | | | | | | sqloexec2 entry[/COLOR]
4327        | | | | | | | | | | | | sqloexecs entry
4332        | | | | | | | | | | | | sqloexecs exit
4333        | | | | | | | | | | | | sqlowchd entry
4355        | | | | | | | | | | | | sqlowchd data [probe 20]
4356        | | | | | | | | | | | | sqlowchd exit
4357        | | | | | | | | | | | sqloexec2 exit[/COLOR]
4358        | | | | | | | | | | | sqlegopn entry[/COLOR]
4359        | | | | | | | | | | | | sqloopenp entry
4360        | | | | | | | | | | | | sqloopenp data [probe 30]
4361        | | | | | | | | | | | | | sqloflock entry
4362        | | | | | | | | | | | | | sqloflock data [probe 1]
4363        | | | | | | | | | | | | | sqloflock exit
4364        | | | | | | | | | | | | sqloopenp exit
4365        | | | | | | | | | | | sqlegopn exit
4366        | | | | | | | | | | | sqlegred entry[/COLOR]
4367        | | | | | | | | | | | | sqlochgfileptr entry
4368        | | | | | | | | | | | | sqlochgfileptr exit
4369        | | | | | | | | | | | | sqloread entry
4370        | | | | | | | | | | | | sqloread exit
4371        | | | | | | | | | | | sqlegred exit
4372        | | | | | | | | | | | sqlegred entry
4373        | | | | | | | | | | | | sqlochgfileptr entry[/COLOR]
4374        | | | | | | | | | | | | | pdLogSysRC entry
4375        | | | | | | | | | | | | | | _pdlogInt entry
4376        | | | | | | | | | | | | | | | sqltGetDiagPath entry
4377        | | | | | | | | | | | | | | | sqltGetDiagPath data [probe 10]
4378        | | | | | | | | | | | | | | | sqltGetDiagPath exit
4379        | | | | | | | | | | | | | | _pdlogInt data [probe 130]
4380        | | | | | | | | | | | | | | | sqloGetInstanceOwnerName entry
4381        | | | | | | | | | | | | | | | sqloGetInstanceOwnerName exit
4382        | | | | | | | | | | | | | | | sqloGetName entry
4383        | | | | | | | | | | | | | | | sqloGetName exit
4384        | | | | | | | | | | | | | | | sqltgets entry
4385        | | | | | | | | | | | | | | | sqltgets exit
4386        | | | | | | | | | | | | | | _pdlogInt data [probe 110]
4387        | | | | | | | | | | | | | | | sqloopenp entry
4388        | | | | | | | | | | | | | | | sqloopenp data [probe 30]
4389        | | | | | | | | | | | | | | | | sqloflock entry
4390        | | | | | | | | | | | | | | | | sqloflock data [probe 1]
4391        | | | | | | | | | | | | | | | | sqloflock exit
4392        | | | | | | | | | | | | | | | sqloopenp exit [rc = 0x070F00CB = 118423755 = SQLO_FREV]
4393        | | | | | | | | | | | | | | | sqlochgfileptr entry
4394        | | | | | | | | | | | | | | | sqlochgfileptr exit
4395        | | | | | | | | | | | | | | | sqlowrite entry
4396        | | | | | | | | | | | | | | | sqlowrite exit
4397        | | | | | | | | | | | | sqlochgfileptr SYSTEM ERROR [probe 100]
4398        | | | | | | | | | | | | | | | sqloclose entry
4399        | | | | | | | | | | | | | | | sqloclose exit
4400        | | | | | | | | | | | | | | _pdlogInt exit
4401        | | | | | | | | | | | | | pdLogSysRC exit
4402        | | | | | | | | | | | | sqlochgfileptr exit [rc = 0x860F000A = -2045837302 = SQLO_FNEX]
4403        | | | | | | | | | | | sqlegred exit [rc = 0xFFFFD8EC = -10004][/COLOR]

这些红色部分的东西勉强能看出当时的逻辑……
在sqledogd 中作了一堆东西,然后到了sqledogd data [probe 140]以后进入sqloexec2 作真正的migration,然后打开一个什么文件,读取两次.
看起来在第二次读取得时候出现了这个问题.
然后在fmt文件中找到对应的行号:
4359        entry DB2 UDB oper system services sqloopenp cei (1.3.15.811.2)
        pid 1130532 tid 1 cpid 85 node 0
        bytes 124

        Data1         (PD_TYPE_FILE_NAME,92) File name:
        /udb/deviadm/unitpsp/container0/deviadm/NODE0000/SQL00001/deviadm/NODE0000/sqldbdir/sqldbdir
        Data2         (PD_TYPE_UINT,4) unsigned integer:
        852
        Data3         (PD_TYPE_UINT,4) unsigned integer:
        436

4379        data DB2 UDB RAS/PD component _pdlogInt fnc (3.3.134.7.0.130)
        pid 1130532 tid 1 cpid 85 node 0 probe 130
        bytes 108

        Data1         (PD_TYPE_BITMASK,8) Bitmask:
        0x0000000000000002
        Data2         (PD_TYPE_ECFID,4) Function:
        DB2 UDB, oper system services, sqlochgfileptr
        Data3         (PD_TYPE_HEXINT,8) Hex integer:
        0x0000000000000000
        Data4         (PD_TYPE_ECFID,4) Function:
        OS, -, unspecified_system_function
        Data5         (PD_TYPE_HEXINT,8) Hex integer:
        0x0000000000000009
        Data6         (PD_TYPE_UINT,4) unsigned integer:
        100
        Data7         (PD_TYPE_UINT,4) unsigned integer:
        3
        Data8         (PD_TYPE_UINT,4) unsigned integer:
        4

4397        SYSTEM ERROR DB2 UDB oper system services sqlochgfileptr cei (5.3.15.659.2.100)
        pid 1130532 tid 1 cpid 85 node 0 probe 100
        bytes 376

        Data1         (PD_TYPE_DIAG_LOG_REC,360) Diagnostic log record:
       
        2006-05-16-13.45.55.141789-240 E158120C359        LEVEL: Warning (OS)
        PID     : 1130532              TID  : 1           PROC : db2bp
        INSTANCE: deviadm              NODE : 000
        FUNCTION: DB2 UDB, oper system services, sqlochgfileptr, probe:100
        CALLED  : OS, -, unspecified_system_function
        OSERR   : EBADF (9) "A file descriptor does not refer to an open file."

这里我们就可以看出来db2在打开sqldbdir文件以后读取得时候出了问题。
因此向客户索要sqldbdir文件,发现在0x13位上是04,也就是说这个文件并没有被migrate。
现在问题就比较明朗了,有两种可能性
a)数据库没有被migrate
b)数据库已经migrate但是sqldbdir文件出了问题。

但是我们怎么检查到底数据库有没有被migrate好呢?
我们知道,如果做db2 list db directory的话db2寻找的是.../sqllib/sqldbdir/sqldbdir文件,但如果是db2 list db directory on xxxx的话db2就会在其目录下的sqldbdir文件中检索。
每次检索都会搜寻其中的数据库是否需要migreate。
因此让客户db2 list db directory on /udb/deviadm/unitpsp/container0/deviadm/NODE0000/SQL00001/
然后拿到生成的db2imdbdir文件,再让客户用db2trc格式化得到:

pid = 2359296 tid = 0 node = -1

1           sqlemdbd entry
2           sqlemdbd data [probe 5]
3           sqlemdbd data [probe 5]
4           sqlemdbd data [probe 5]
5           sqlemdbd data [probe 5]
6           | sqlemgdr entry
7           | sqlemgdr data [probe 4]
8           | sqlemgdr data [probe 5]
9           | sqlemgdr data [probe 6]
10          | sqlemgdr data [probe 7]
11          | sqlemgdr data [probe 8]
12          | | sqleMigOpenWrapper entry
13          | | sqleMigOpenWrapper data [probe 758]
14          | | sqleMigOpenWrapper data [probe 758]
15          | | sqleMigOpenWrapper data [probe 758]
16          | | sqleMigOpenWrapper data [probe 758]
17          | | | sqleMigCheckError entry
18          | | | sqleMigCheckError data [probe 758]
19          | | | sqleMigCheckError data [probe 758]
20          | | | sqleMigCheckError exit [rc = 2]
21          | | sqleMigOpenWrapper data [probe 758]
22          | | sqleMigOpenWrapper exit [rc = 1]
23          | | dir_check entry
24          | | | sqleMigOpenWrapper entry
25          | | | sqleMigOpenWrapper data [probe 4263]
26          | | | sqleMigOpenWrapper data [probe 4263]
27          | | | sqleMigOpenWrapper data [probe 4263]
28          | | | sqleMigOpenWrapper data [probe 4263]
29          | | | | sqleMigCheckError entry
30          | | | | sqleMigCheckError data [probe 4263]
31          | | | | sqleMigCheckError data [probe 4263]
32          | | | | sqleMigCheckError exit [rc = 2]
33          | | | sqleMigOpenWrapper data [probe 4263]
34          | | | sqleMigOpenWrapper exit [rc = 1]
35          | | | sqleMigOpenWrapper entry
36          | | | sqleMigOpenWrapper data [probe 4319]
37          | | | sqleMigOpenWrapper data [probe 4319]
38          | | | sqleMigOpenWrapper data [probe 4319]
39          | | | sqleMigOpenWrapper data [probe 4319]
40          | | | sqleMigOpenWrapper data [probe 4319]
41          | | | sqleMigOpenWrapper exit
42          | | | sqleMigCloseWrapper entry
43          | | | sqleMigCloseWrapper data [probe 4365]
44          | | | sqleMigCloseWrapper exit
45          | | dir_check exit
46          | | release_check entry
47          | | | sqleMigOpenWrapper entry
48          | | | sqleMigOpenWrapper data [probe 4528]
49          | | | sqleMigOpenWrapper data [probe 4528]
50          | | | sqleMigOpenWrapper data [probe 4528]
51          | | | sqleMigOpenWrapper data [probe 4528]
52          | | | sqleMigOpenWrapper data [probe 4528]
53          | | | sqleMigOpenWrapper exit
54          | | | sqleMigCloseWrapper entry
55          | | | sqleMigCloseWrapper data [probe 4839]
56          | | | sqleMigCloseWrapper exit
57          | | release_check exit
58          | sqlemgdr error [probe 70]
59          | sqlemgdr exit [rc = 0x000003E8 = 1000]
60          sqlemdbd exit [rc = 3]

嘿嘿,一看返回值是1000,于是说明了数据库已经被migrate好了,那么唯一的可能就是sqldbdir文件有错误。
自己创建一个目录,然后把路径做好,得到客户的四个分区下的sqldbdir,然后在testing enviornment上做db2 list db directory onxxxx,这样db2就会自动尝试升级这个文件。
奇怪的是在测试环境下运行一切ok,0x13位上也从0x04变成了0x09,将4个文件发回给客户替换原来的文件,db2stop db2start db2 connect成功……

结论:
不知道为什么在客户环境中打开并读取两次sqldbdir文件的时候报告EBADF,尤其是打开没问题,第一次读取可以,但是在第二次读取前的sqlochgfileptr 函数下出错。
sqlochgfileptr 实际上只是计算了offset后进行fseek的,因此原本我们怀疑客户有mix code(就是在一个instance下各个lib文件所属于的db2 release不同),因此:
1) which db2imdbd
/home/deviadm/sqllib/bin/db2imdbd
  
2) dump -H sqllib/adm/db2sysc |tee db2sysc.dump
3) dump -H sqllib/bin/db2imdbd |tee db2imdbd.dump
4) mount |tee mount.out
5) dump -H sqllib/lib/libdb2e.a |tee libdb2e.dump
但是从结果看起来一切正常,这样的话root cause还是不清楚……
不过database看起来运行一切都好,客户也就不追究了……
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412010广州亚运会纪念徽章:橄榄球
日期:2011-05-22 10:54:33管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:012010年世界杯参赛球队:丹麦
日期:2010-04-06 10:23:36
2#
发表于 2006-5-26 07:20 | 只看该作者
最好对db2trc能有一个系统的说明

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
3#
 楼主| 发表于 2006-5-26 07:47 | 只看该作者
db2trc分为两部分,flw和fmt。类似:
void funA()
{
recordTrace("funA started";
xxxxxx
xxxxxx
ret=funcB(3,5);
recordTrace("funA exit";
}

funcB(int a, int b)
{
recordTrace("funcB started";
xxxx
xxxx
recordTrace("probe 100", &a, &b);
writeToDisk(a,b);
recordTrace("funcB exit";
}

这样出来的东西就类似于
0001 | funA started
0002 | | funcB started
0003 | | probe100
0004 | | funcB exit
0005 | funA exit

因此,用db2trace就可以清晰地看到程序的运行过程
其中的一些重要内存和变量可能会被dump到fmt文件中,
比如在我们上面的例子里,fmt文件中0003对应的就有
0003 | funcB probe 100
memory dump:
3 5

这样的话就可以很清晰地看到一些重要的变量

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
1
2010系统架构师大会纪念
日期:2010-09-03 16:39:57
4#
发表于 2006-5-26 11:11 | 只看该作者
专业

使用道具 举报

回复
论坛徽章:
0
5#
发表于 2006-5-26 12:55 | 只看该作者
学习

使用道具 举报

回复
论坛徽章:
6
生肖徽章:马
日期:2006-11-27 21:29:25玉石琵琶
日期:2007-05-08 07:09:23生肖徽章:虎
日期:2007-09-26 17:01:22生肖徽章:虎
日期:2007-09-26 17:01:52紫蜘蛛
日期:2007-09-26 17:05:48生肖徽章:虎
日期:2007-09-26 17:13:06
6#
发表于 2006-5-26 17:30 | 只看该作者

使用道具 举报

回复
论坛徽章:
6
生肖徽章:马
日期:2006-11-27 21:29:25玉石琵琶
日期:2007-05-08 07:09:23生肖徽章:虎
日期:2007-09-26 17:01:22生肖徽章:虎
日期:2007-09-26 17:01:52紫蜘蛛
日期:2007-09-26 17:05:48生肖徽章:虎
日期:2007-09-26 17:13:06
7#
发表于 2006-5-26 17:31 | 只看该作者
然后在fmt文件中找到对应的行号:
4359
4359怎么看出来的?

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
8#
 楼主| 发表于 2006-5-26 20:04 | 只看该作者
在flw文件中找到比较重要的行,然后查找其对应的fmt文件中相应行号附近的内存dump……

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
9#
 楼主| 发表于 2006-5-27 00:43 | 只看该作者
为了看起来更清晰偶还是直接把trace文件发上来吧

db2trc.zip

123.12 KB, 下载次数: 38

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
10#
发表于 2009-2-8 20:11 | 只看该作者
有个疑问,你怎么从flw文件中看出是4359这行出问题了,那些函数名称有没有相关文档介绍啊

[ 本帖最后由 棉花糖ONE 于 2009-2-8 20:14 编辑 ]

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表