OnLine非正常结束后的处理方法

OnLine非正常结束时,描述有关OnLine进入脱机方式原因的信息将写入日志,下面是OnLine结束时系统日志中登陆日志的示例:

Process Aborted Abnormally: pid=22500 user=210 us=c003f15c flags=a01
Process Aborted Abnormally (critial section):pid=22500 user=210 flag=a01
INFORMIX-OnLine entering ABORT mode!!! INFORMIX-OnLine Stopped

日志条目显示一个进入临界状态的sqlturbo进程非正常结束,临界状态是指一个进程执行写调用而不能被中断所用的术语。如果一个进程处于临界状态时非正常结束,OnLine为保护数据完整性而进入脱机方式。当OnLine重新启动时会执行快速恢复,回滚所有未完成的事务。

如果持有锁存器(latch)的进程非正常结束,OnLine也会非正常结束。锁存器用于控制对诸如缓冲区,锁定表等共享内存资源的访问。为防止干涉其它进程申请共享内存资源,INFORMIXOnLine控制对有锁存器的资源表的访问。

虽然OnLine后台进程对夭折的进程进行日常的清理工作,但数据一致性阻止后台进程在清除过程中释放共享内存锁存器。对后台进程来说,判断用户进程是否完成对数据库的修改是不可能的。为解脱这以一困境,OnLine强制自己进入脱机方式。当OnLine回到联机(Online)方式时,自动进行快速恢复。快速恢复使OnLine达到与最后一个完成事务一致的状态。

当持有锁存器的进程结束时,会生成以下的条目:

Process Aborted Abnormally: pid=10743 user=104 us=60204c flags=21
Process Aborted Abnormally (latch): pid=10743 user=104 flags=21
INFORMIX-OnLine entering ABORT MODE!!!
-- OnLine Aborting -- us=6019a8,pid=11987,uid=1000

这些日志条目提供的信息在判定进程为何非正常结束时十分有用,条目中各域的定义如下:

pid---------sqlturbo UNIX进程id
user--------真正用户id
us----------共享内存中用户结构的地址
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-zpid命令中止某一个sqlturbo线索。如果进程正持有锁存器或处于临界状态,tbmode命令不会立即中止该进程。

时间: 2024-09-15 22:11:51

OnLine非正常结束后的处理方法的相关文章

.net让线程支持超时的方法实例和线程在执行结束后销毁的方法_实用技巧

.net让线程支持超时 使用 CancellationTokenSource 复制代码 代码如下: private static void TimeoutTest1()        {            var cts = new CancellationTokenSource();             var thread = new Thread(() =>            {                Console.WriteLine(String.Format(&quo

线程结束后 有没有回调方法?

问题描述 一个线程经过一段时间的循环后结束了我想在他结束的时候调用一个函数,请问如何实现? 解决方案 解决方案二:你在结尾前调用就是了或者包装一下void包装(){你的线程方法();结束后调用的方法();}newThread(包装).Start(); 解决方案三:引用1楼Poopaye的回复: 你在结尾前调用就是了或者包装一下void包装(){你的线程方法();结束后调用的方法();}newThread(包装).Start(); +1解决方案四:定义一个委托,新建一个类,在类里定义线程和委托,在

socket-负责监听端口的局部变量serverScoket在方法结束后,为什么还能继续监听端口?

问题描述 负责监听端口的局部变量serverScoket在方法结束后,为什么还能继续监听端口? 我在winform中的按钮点击事件中新建了一个局部变量serveScoket,开启监听,在方法结束后,我新建一个客户端连接仍然可以连接到服务器,这是为什么? private void btnStart_Click(object sender, EventArgs e) { Socket server = new Socket(AddressFamily.InterNetwork,SocketType.

Android软件启动动画及动画结束后跳转的实现方法_Android

本文实例讲述了Android软件启动动画及动画结束后跳转的实现方法.分享给大家供大家参考,具体如下: 自己写了个小程序,软件启动时,先显示几张图片,每3秒显示一张,图片显示完跳转到首页 1. 图片轮播使用Gallery,用法很简单 GalleryAdapter adapter = new GalleryAdapter(this, mIds); mGallery.setAdapter(adapter); GalleryAdapter是自定义适配器 public class GalleryAdapt

xcode-当textView编辑结束后发送的通知是什么

问题描述 当textView编辑结束后发送的通知是什么 当textView编辑结束后发送的通知是什么?我试试这样: - (void)TextViewDidEndEditing:(UITextView *)textView 解决方案 用delegate, 在textView编辑结束: - (void)textViewDidEndEditing:(UITextView *)textView 你注意到没有,你的方法开始是大写字母.

iOS4下实现UIView动画结束后调用

  在写代码时,发现原来3.1.3下经常用的uiview动画结束后调用事件的方法居然不起作用了,摸索了一下,发现ios4下对uivew的animation处理已经有新的方式了,和大家分享一下: 代码功能:在myview向下移出屏幕的动画结束后,触发事件再将myview移除掉. ios4以前的用法: [UIView beginAnimations:@"View Remove" context:nil]; UIView setAnimationDelegate:self]; [UIView

cocoa touch-最后一次调用结束后旋转罗盘

问题描述 最后一次调用结束后旋转罗盘 做了一个罗盘,每5度旋转.问题是,在用户旋转超过五度时,我会同时收到多条服务响应,然后选择方法也会被多次调用.在最后一次调用没结束之前,罗盘旋转非常迟钝. 在最后一次待用结束后,怎么旋转罗盘? - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { if (newHeading.headingAccuracy > 0) {

mysql 6.0安装结束后 start service前面打个叉? 新手中的新手求解

问题描述 mysql 6.0安装结束后 start service前面打个叉? 新手中的新手求解 如题 网上方法都试过了 还能是什么问题 愁人啊 注册表也删过了 sc delete mysql 也用过了 重启开机也弄了 就是不好使啊!!!大神来一个 分分钟搞定下吧 解决方案 先看你的系统服务中有没有安装成功mysql的服务,应该是没有安装好.安装的时候用的管理员权限吗,有没有杀毒软件. 解决方案二: 这种情况把图片贴出来好看一点

销毁链表到底有什么用,程序结束后不应该所有的内存都释放完了吗

问题描述 销毁链表到底有什么用,程序结束后不应该所有的内存都释放完了吗 销毁链表到底有什么用,程序结束后不应该所有的内存都释放完了吗 解决方案 是的,不管程序释放不释放,程序运行结束肯定释放.但是你写小程序要养成好习惯.不然大程序没有释放,这对于那种连续运行很久的程序来说就是一个灾难了. 解决方案二: C++还是java?C++是不会自动释放的.java大部分都 能自动释放,但也存在一些特例 解决方案三: c++ 程序结束后不释放? 链表就是结构体吗 没什么特殊的啊 解决方案四: 这个和申请变量