INFORMIOnLine故障诊断与排除.docx
INFORMIX-OnLine故障诊断与排除(1)系统不能进入静态方式-摘自互联网开放系统以其无与伦比能力连接不同计算机软件,硬件。在这种环境下,诊断问题时就需要关注问题全局与细节。本文就如果诊断INFORMIX-Online问题给出了良好建议。诊断问题症状系统管理员诊断问题时首先要定义问题症状。· 系统是否难于进入静态(quiescent)状态? · 是否有非正常结束INFORMIX系统进程? · 系统进程是否定期挂起? 下面讨论指出如何定位系统问题,讨论可能起因,并对这些问题解决提出建议。 系统不能进入静态方式 该症状常常伴有一条错误信息。一般错误是:tbinit:fatal error in shared memory creation (共享内存生成时有严重错误)检查系统初始化时定义系统日志文件来发现错误出处。该日志缺省名为$INFORMIXDIR/online.log。在此文件中会看到与下面相近信息:16:00:56 Cannot Open Primary Chunk '/dev/turbo_root',errno = 1316:00:56 Cannot Open Primary Chunk '/dev/turbo_root',errno = 1316:00:56 I/O error,Primary Chunk 'dev/turbo_root' - Offline16:00:56 I/O lseek() chunk 1,pagenum 0, pagecnt 1 ->errno =916:00:56 INFORMIX-Online Stopped这些错误是由UNIX权限问题造成。OnLine产品需要由root来安装。系统部分可执行程序应属于root或者root有权限。所有INFORMIX系统文件属主及权限都应该记录在$INFORMIXDIR/etc/onlinefiles中。检查所有OnLine文件权限,属主,属组是否正确。也应检查chunk权限,保证CHUNK有UNIX权限660(crw-rw-),其属主,属组为informix,建议管理员使用系统管理员实用程序tbmonitor定义OnLine系统配置。初始化例程自动进行权限检查,计算可利用磁盘空间,但如果配置文件是直接修改,就并非如此了。如果系统日志文件中并未记录有用错误信息,而OnLine系统刚刚升级,则应检查确认页大小(与OnLine产品一道发送缺省配置文件中定义)是否已经改变。若页大小变化了,就必须从老系统输出数据(dbexport)再将数据输入到新系统上去(用dbimport)。 错误tbinit:fatal error in shared memory creation 经常伴有操作系统错误或者附加OnLine错误。这也能用来判定问题为什么会发生。下列错误说明为何共享内存不能生成。· tbinit:shmgetEEXIT17: · tbinit:shmgetEINVAL22:· tbinit shmatEINVAL22:· tbinit shmgetENOSPC28:· Bad Primary Chunk '/dev/devname'· tbinit:shmgetEEXIST17: tbinit:shmgetEEXIT17:这个错误表明共享内存段在申请内存位置上已经存在。tbinit进程从环境变量TBCONFIG指定文件读取配置。若TBCONFIG未指定,tbinit从$INFORMIXDIR/etc/tbconfig文件读取配置。一旦获取配置信息,tbinit派生一个子进程,它将成为tbinit后台进程。tbinit后台进程用唯一SERVERNUM值做一部分输入值来计算共享内存键值,唯一SERVERNUM值确保每个OnLine系统生成自己特定共享内存空间。仔细检查以保证文件配置正确,SERVERNUM值唯一。 tbinit:shmget EINVAL22:or tbinit:shmatEINVAL22当无效参数传递给UNIX调用时,UNIX产生错误。用OnLine术语来说这意味着tbinit申请共享内存未被分配。一旦UNIX接受SERVERNUM和共享内存键值,tbinit便可将Online共享内存段附加在它虚拟地址空间上。虚拟地址,共享内存段要附加tbinit(或其他用户进程)内存空间是由SHMBASE定义。若SHMBASE值不合法,或申请共享内存大于共享内存核心参数允许值时,或共享内存段由于边界对齐问题而无法连续分配时,UNIX会认为传给共享内存附加调用内存值是无效。现在对UNIX核心参数作一回顾,以下描述时有关共享内存配置参数。 核心参数SHMSIZE 是操作系统范围内共享内存段最大值(以k为单位)。SHMMAX 是操作系统范围内共享内存段最大值(以字节为单位)。SHMMIN 是操作系统范围内共享内存段最小值(以字节为单位)。SHMMNI 是操作系统范围内共享内存标识最小数值。SHMLBA 是共享内存低段地址,也就是附加共享内存边界地址SHMSEG 是每个进程附加共享内存段最大数目。SHMALL 时系统范围内共享内存最大量。信号灯分配参数SEMMNI 是操作系统范围内信号灯标识最大值SEMMNS 是操作系统范围内信号灯最大值SEMMSL 是每个标识信号灯最大值。 参数值定义SHMALL*操作系统页大小全部可能共享内存(以字节为单位)。SHMMAX=SHMSIZE*1024.SHMMNI*SHMMAX=操作系统范围内可编址共享内存(以字节为单位)。SHMSEG*SHMMAX=一个操作系统进程可编址共享内存(以字节为单位)。 参数设置指导:规则1 SHMALL * 页大小 >= SHMSEG * SHMMAX规则2 SHMALL * 页大小 SHMNI * SHMMAX规则3 SHMMSL = 主机用户进程数/25规则4 SHMMAX > SHMLBA tbinit: shmgetENOSPC28:当系统申请空间,而设备已满时,UNIX产生该错误。UNIX申请共享内存交换区,保证交换空间驻留设备上有足够空间。没有足够共享内存ID时也会发生错误,检查系统SHMMNI核心参数。 Bad Primary Chunk '/dev/devname'由于控制器,硬件或者权限问题,使得向chunk写失败时,Online标记该chunk为down,这样做目是为了通知管理员数据完整性已经被破坏,检查系统日志文件中I/O错误。以下是典型硬件I/O错误例子:I/O error,Primary Chunk '/dev/rdsk/devname' - OfflineI/O read(),Chunk 2,pagenum 272714,pagecnt 1 ->errno =5I/O write() chunk 2,pagenum 2,pagecnt 1 -> errno = 5发生I/O错误时,检查控制器和硬件。许多UNIX系统提供检查未安装原始设备低级别实用程序,不要在未安装原始设备上使用fsck命令,这是因为fsck会覆盖设备上存储信息,为恢复系统,INFORMIX建议管理员恢复最后存档,用日志恢复失败了写操作。一旦共享内存初始化完成,物理日志从上一次检查点开始检查物理日志前象,如果该记录存在,开始FAST RECOVERY,进入物理恢复,每个前映象写回到磁盘上正确位置上,一旦完成后,逻辑恢复开始,并处理上次检查点之后逻辑日志中记录所对应事务,如果快速恢复非正常结束,或是不能让OnLine进入静态(Quiescent)方式,则让OnLine进入脱机(off-line)方式,再启动OnLine。若OnLiner仍不能进入静态方式,则应该恢复系统存档。INFORMIX-OnLine故障诊断与排除(2)OnLine非正常结束-摘自互联网OnLine非正常结束时,描述有关OnLine进入脱机方式原因信息将写入日志,下面时OnLine结束时系统日志中登陆日志示例:Process Aborted Abnormally: pid=22500 user=210 us=c003f15c flags=a01Process Aborted Abnormally (critial section):pid=22500 user=210 flag=a01INFORMIX-OnLine entering ABORT mode! INFORMIX-OnLine Stopped 日志条目显示一个进入临界状态sqlturbo进程非正常结束,临界状态是指一个进程执行写调用而不能被中断所用术语。如果一个进程处于临界状态时非正常结束,OnLine为保护数据完整性而进入脱机方式。当OnLine重新启动时会执行快速恢复,回滚所有未完成事务。如果持有锁存器(latch)进程非正常结束,OnLine也会非正常结束。锁存器用于控制对诸如缓冲区,锁定表等共享内存资源访问。为防止干涉其它进程申请共享内存资源,INFORMIX OnLine控制对有锁存器资源表访问。虽然OnLine后台进程对夭折进程进行日常清理工作,但数据一致性阻止后台进程在清除过程中释放共享内存锁存器。对后台进程来说,判断用户进程是否完成对数据库修改是不可能。为解脱这以一困境,OnLine强制自己进入脱机方式。当OnLine回到联机(Online)方式时,自动进行快速恢复。快速恢复使OnLine达到与最后一个完成事务一致状态。当持有锁存器进程结束时,会生成以下条目:Process Aborted Abnormally: pid=10743 user=104 us=60204c flags=21Process Aborted Abnormally (latch): pid=10743 user=104 flags=21INFORMIX-OnLine entering ABORT MODE!- OnLine Aborting - us=6019a8,pid=11987,uid=1000这些日志条目提供信息在判定进程为何非正常结束时十分有用,条目中各域定义如下:pid-sqlturbo UNIX进程iduser-真正用户idus-共享内存中用户结构地址flags-定义如下0x0000001-0x0000001 正在使用用户结构0x0000002-0x0000002 等待锁存器0x0000004-0x0000004 等待锁0x0000008-0x0000008 等待缓冲区0x0000010-0x0000010 等待检查点0x0000020-0x0000020 等待读取调用0x0000040-0x0000040 向存档磁道写逻辑日志0x0000080 等待清除长事务0x0000100-0x0000080 特定turbo检测用户0x0000200 处于事务中0x0000400 进程在回滚0x0000800-0x0000100 处于临界状态进程继续.0x0001000-0x0000200 特定后台进程0x0002000 开始工作日志登记0x0004000-0x0000400 存档0x0008000-0x0000800 清除死进程0x0020000-0x00002000 特定缓冲区刷新进程0x0010000-0x0002000 等待逻辑缓冲区写入0x0040000-0x0004000 该进程是远程服务器0x0080000 该进程正完成远程任务0x0100000-0x0008000死锁超时-0x00010000-普通锁超时-0x00020000-超时等待期已结束-0x00040000-等待事务 以上日志条目中,sqlturbo进程UNIX进程id为10743,真正用户id为104,共享内存中用户结构地址为0x60204c,标志显示用户结构正在使用中,OnLine引擎正处于读取调用之中(0x00000001,&0x00000020)。这个信息可以标识非正常结束用户,查明他或她是否遇到意外错误,或以某种方式导致进程非正常结束。用户不应对Informix进程使用kill -9命令。管理员可以用onmode -z pid命令中止某一个sqlturbo线索。如果进程正持有锁存器或处于临界状态,tbmode命令不会立即中止该进程。INFORMIX-OnLine故障诊断与排除(3)OnLine进程似乎被挂起-摘自互联网当OnLine用户抱怨他们进程被挂起,或者不能与OnLine相互作用时,运行onstat -a ,获得有关问题本质信息。onstat是OnLine提供实用程序,是用来监视系统命令。它提供了与tb_Monitor(onmonitor)实用程序相近,但更为详尽统计数字。OnLine挂起最明显原因时逻辑日志已充满而且需要备份。在tbstat输出中检查逻辑日志状态。在逻辑日志填满后备份日志,就会让OnLine继续处理事务。进程必须等待检查点完成。检查点请求可以阻止进程进入临界状态或者获得锁存器资源。onstat显示第1行为状态行,它会显示是否申请了检查点。如果条件成立,有可能是检查点在等待资源。检查用户结构下等待队列来找出资源地址。一旦定位到资源,判定拥有该资源用户进程状态。已经进入临界状态,或是持有锁存器资源进程可以阻止检查点完成。例如,存档进程在磁带改换期间一直持有一个锁存器,并禁止检查点发生。帮助诊断问题实用程序实用程序名目描述使用dbexport卸成ascii文件把数据库卸到磁盘或磁带上,生成包含表结构数据库.sql文件。结构并不包含extent大小数据库移植到其它平台dbimport加载ascii文件从dbexport生成数据库结构及ascii数据,生成并加载数据库,直接由磁盘或磁带加载。由其它平台输入数据tbunload卸成二进制文件将数据库或表数据影象,卸到磁盘或磁带上,用于页大小,机器结构相同OnLine系统高效,真正二进制方式卸数据tbload由二进制文件加载由tbunload生成磁带加载数据库或表高效,数据库数据加载方式tbinit管理初始化共享内存,启动共享内存后台进程tbmonitor命令行tbmode管理使OnLine脱机或联机,中止OnLine进程tbmonitor命令行tbmonitor管理由管理员来开启OnLine系统,报告OnLine系统状态,执行存档,恢复备份逻辑日志,改变系统状态交互式全功能管理程序tbparams管理由管理员用来增加或删除逻辑日志,改变物理日志大小及位置tbmonitor命令行tbspaces管理由管理员用来增加或删除dbspace或blobspace,为它们增加chunk,改变状态tbmonitor命令行tbstat系统检测员提供有关OnLine状态,共享内存资源详细信息报告/debug工具tbtape管理在磁带上作系统存档,或备份逻辑日志tbmonitor命令行tblog系统检测员提供有关逻辑日志条目详细信息报告/debug工具tbcheck系统检测员报告并检查OnLine系统完整性,执行数据,索引页,extent,位图页低级别检测,提供有关保留页,extent和系统信息报告/debug工具