Chinaunix

标题: 程序日志显示入库成功,但是用sql语句找字段却找不到? [打印本页]

作者: liumilan2009    时间: 2010-07-16 17:40
标题: 程序日志显示入库成功,但是用sql语句找字段却找不到?
用C++程序写了一个入库字段程序。
数据库为informix

日志显示已经成功入库

但是进informix数据库时候,用select * from tfa_alarm_act where a=12;
no data return.
这是什么原因?

程序用ODBC的API写的SQLExecDirect

是程序原因还是数据库原因啊?

照理说若没成功入库,那应该报错才对
作者: liaosnet    时间: 2010-07-16 18:03
这个...

原因也许很多..来几个假设吧.
1,程序问题..压根就没操作成功...review程序设计..
2,数据库问题..也有可能,比如使用了BUFF LOG的数据库,可能BUFFER缓冲区没填满..数据没刷回磁盘...
作者: yunzhongyue    时间: 2010-07-16 21:27
",数据库问题..也有可能,比如使用了BUFF LOG的数据库,可能BUFFER缓冲区没填满..数据没刷回磁盘..."
会有这种可能吗?觉得不可思议!
作者: liaosnet    时间: 2010-07-16 22:33
",数据库问题..也有可能,比如使用了BUFF LOG的数据库,可能BUFFER缓冲区没填满..数据没刷回磁盘..."
会有这 ...
yunzhongyue 发表于 2010-07-16 21:27



  看下 BUFFER LOG型的库介绍~  当然出现这样的情况比较少而已..
作者: yunzhongyue    时间: 2010-07-17 10:58
回复 4# liaosnet

难道数据库只会从磁盘上取数据?
作者: liaosnet    时间: 2010-07-17 11:02
本帖最后由 liaosnet 于 2010-07-17 11:03 编辑
回复  liaosnet

难道数据库只会从磁盘上取数据?
yunzhongyue 发表于 2010-07-17 10:58



    反正不会从LOGBUF里读数~~

不过在这种情况下.应该过一会就会提交回磁盘的~就可以查到了..
作者: yunzhongyue    时间: 2010-07-17 11:35
回复 6# liaosnet


    LOGBUF和BUF不是一回事吧,LOGBUF里的东西是要写回逻辑日志当中的。数据库是不会从LOGBUF中读数,但是会在BUFFER中读数啊。
作者: liaosnet    时间: 2010-07-17 16:22
回复  liaosnet


    LOGBUF和BUF不是一回事吧,LOGBUF里的东西是要写回逻辑日志当中的。数据库是不会 ...
yunzhongyue 发表于 2010-07-17 11:35



    新插入的数据是到LOGBUF的..不是到BUFFER的撒..BUFFER的数据是从磁盘上读取的..
作者: yunzhongyue    时间: 2010-07-19 14:58
回复 8# liaosnet


    这个还是不太明白,logbuf不是应该刷到逻辑日志当中的吗?
   可否详细说一下或提供一下相关的资料,谢谢!
作者: yunzhongyue    时间: 2010-07-19 15:12
回复 9# yunzhongyue

做了个试验,insert 一些记录到buf log的数据库中,onstat -p中的bufwrites是会增加的,这个是不是意味着有写buffer呢?
作者: liaosnet    时间: 2010-07-19 17:02
Buffered Logging   缓冲日志
    使用“缓冲日志”模式的数据库环境将在逻辑日志和物理日志缓冲区中保留这些事务信息,直到该缓冲区填满,或者发生检查点操作,或者是当事务还没有被写往日志之前关闭了产生该事务的用户连接。
    有这样一种情况可以强迫缓冲日志数据库写出它的事务信息:因为实例中只有一组逻辑日志缓冲区,当实例中的一个非缓冲日志数据库提交一个事务时,缓冲日志信息会随着非缓冲日志信息一起被写出到磁盘上。
    在“缓冲日志”数据库环境中,每个事务所造成的磁盘I/O大大降低,因此实例会运行得较快,但是因为事务信息存储在共享内存中,严重的实例错误就会很危险,当实例的共享内存被释放时,那些还没有写到磁盘上的事务信息就都丢失了.


应该是我理解错了..从LOGBUF刷回磁盘的确会慢些(但仅是刷回到逻辑日志文件上,更新表上的数据应该在这之前). 这个跟HDR环境下的备机同步有点弄混了.
作者: liumilan2009    时间: 2010-07-20 13:55
新插入数据应该是有入库,因为随后的数据信息根据前面的插入数据信息,进行update。但是update成功了,再查下数据库,还是没查到数据
作者: yunzhongyue    时间: 2010-07-20 14:09
是不是事务rollback了?
作者: liumilan2009    时间: 2010-07-20 15:59
rollback?会把数据给变没了吗?
作者: liumilan2009    时间: 2010-07-20 16:00
怎么判断有没有回滚啊?
作者: liaosnet    时间: 2010-07-20 16:21
怎么判断有没有回滚啊?
liumilan2009 发表于 2010-07-20 16:00



    检查操作逻辑~~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2