我用的是linux oci编程,调用commit()时有时提交不成功事务,弄得没有保存到磁盘数据文件,造成数据丢失。请问如何保证成功提交事务到数据文件里。谢谢!!
解决方案 »
- 请问查询该表是不是分区表的语句除了以下还有其他写法么?
- Oracle截取电子信箱问题?
- oracle bpm work space 开发/定制
- oracle如何横向显示字符
- 大家好 我的Oracle OEM打不开是什么原因呢?
- RMAN change命令求答
- 请教一个查询!!!
- 求教:"备份数据库中A表,然后还原到另一个数据库的B表中",备份语句如果写?
- 想在存储过程中创建使用临时表,然后返回临时表中的数据!
- ORACLE里10的幂咋表式呀?如10的N次方,3QS!急
- 真的求高手指教,现在第二天数据比昨天的数据都莫名其妙的减少一部分,不知原因!
- 请问如何查询ORACLE的历史操作记录!!!!!
你用的COMMIT是OCI自带的COMMIT方法么?那应该是提交到数据库里的。
不能完全保证事务成功提交到数据库里,只能在每次COMMIT时,进行判断。
如果提交没有成功,记错误日志。
我用的是OCI自带的COMMIT方法,请问如何判断每次commit返回参数,请列出具体代码看看,谢谢!
我用的是提交数据库的OCITransCommit方法,不是直接的commit
对于OCITransCommit方法,返回值有如下:
OCI_SUCCESS,OCI_SUCCESS_WITH_INFO,OCI_NEED_DATA,OCI_NO_DATA之类的;你可以查查你的commit方法有哪些返回参数。
Stmt->setSQL(strsql);
count=Stmt->executeUpdate();
Conn->commit();
Conn->terminateStatement(Stmt);请问OCITransCommit()可以替换为commit()吗?
另外,你这里的commit不是OCI自己的方法,你不是通过一个类对象Conn来调用的嘛?
你的commit是类Conn里封装的一个方法。
你得深入到类Conn里仔细看了。
我估计哈,这个类Conn->commit()方法里,实际上调用的还是OCITransCommit()
呵呵,你自己找找吧。
Connection *Conn;
Statement *Stmt;
Env = Environment::createEnvironment(Environment::OBJECT);
Conn = Env->createConnection(user, pwd, strconn_string);
Stmt = Conn->createStatement();
Stmt->setSQL(strsql);
count=Stmt->executeUpdate();
Conn->commit();
Conn->terminateStatement(Stmt);
以上就是源程序的主要代码,就这么简单
在头文件里定义:
class connection
{
private:
...
public:
sword commit();
...
}
在cpp文件里定义:
sword connection::commit()
{
if(_state != connected) return OCI_ERROR;
return checkerr(OCITransCommit(_svchp, _errhp, (ub4) 0));
}