jillme
作者jillme课题专家组·2011-05-03 23:55
CIO·某大型银行

【转】系统不能进入静态方式的处理方案

字数 3934阅读 1788评论 0赞 0
系统不能进入静态方式 

该症状常常伴有一条错误信息。一般错误是: 

tbinit:fatal error in shared memory creation (共享内存生成时有严重错误) 

检查系统初始化时定义的系统日志文件来发现错误的出处。该日志的缺省名为$INFORMIXDIR/online.log。在此文件中会看到与下面相近的信息: 

16:00:56 Cannot Open Primary Chunk '/dev/turbo_root',errno = 13 
16:00:56 Cannot Open Primary Chunk '/dev/turbo_root',errno = 13 
16:00:56 I/O error,Primary Chunk 'dev/turbo_root' -- Offline 
16:00:56 I/O lseek() chunk 1,pagenum 0, pagecnt 1 -->;errno =9 
16: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:shmget[EEXIT][17]:  
tbinit:shmget[EINVAL][22]: 

tbinit shmat[EINVAL][22]: 


tbinit shmget[ENOSPC][28]: 


Bad Primary Chunk '/dev/devname' 


tbinit:shmget[EEXIST][17]:  


tbinit:shmget[EEXIT][17]: 

这个错误表明共享内存段在申请的内存位置上已经存在。tbinit进程从环境变量TBCONFIG指定的文件读取配置。若TBCONFIG未指定,tbinit从$INFORMIXDIR/etc/tbconfig文件读取配置。一旦获取配置信息,tbinit派生一个子进程,它将成为tbinit后台进程。tbinit后台进程用唯一的SERVERNUM值做一部分输入值来计算共享内存键值,唯一的SERVERNUM值确保每个OnLine系统生成自己特定的共享内存空间。仔细检查以保证文件配置正确,SERVERNUM的值唯一。 


tbinit:shmget [EINVAL][22]:or tbinit:shmat[EINVAL][22] 

当无效参数传递给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: shmget[ENOSPC][28]: 

当系统申请空间,而设备已满时,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' -- Offline 

I/O read(),Chunk 2,pagenum 272714,pagecnt 1 -->;errno =5 

I/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仍不能进入静态方式,则应该恢复系统存档。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广