pro1为多条Insert语句,如果有一条insert不成功,就应该RollBack,可是却提示无法在分布式事务处理中ROLLBACK ORA-06512。你的pro1(strSql varchar2,strOut out integer)里的strSql包含了所有的Insert语句吗? 如果你用一次pro1(strSql varchar2,strOut out integer)只完成一条记录的插入,则你在成功插入前几条记录就已经CommitTransaction。当第n条失败了,就只能Rollback当前的那n条记录了。 如果你的pro1(strSql varchar2,strOut out integer)调用一次就完成十条记录的insert,那就不知道为什么不能Rollback了。 我们的做法都是调用一次prol,insert一条记录,在外部控制Transaction.
B.及时断开不必要的session
C.通过程序清除不是好方法.还是由DBA在后台用alter system kill XXXX来做为好.
或是查看一下系统表例如V$SGA,V$WAITSTAT,V$SESSION等等来分析一下了.
看看后台日志文件alter.log,有没有什么错误了.
{
//
//用途:执行单条SQL语句,如插入、修改、删除。当执行SQL出错时,返回错误消息,否则返回空字符
string Message="";
System.Data.OleDb.OleDbCommand comm=new OleDbCommand(sql,OraConn);
try
{
OraConn.Open();
comm.Connection=OraConn;
comm.ExecuteNonQuery();
}
catch ( Exception e)
{
Message=e.Message;
}
finally
{
OraConn.Close();
}
return Message; //**这句话应该放在finally块中
}
{
//用途:执行代输入、输出参数的存储过程,以完成插入、修改、删除操作。
OleDbCommand comm = GetOraComm(procName,prams,values);
OraConn.Open();
comm.ExecuteNonQuery();
OraConn.Close();
string AA=comm.Parameters["RururnValue"].Value.ToString();
return AA;
}
如果你用一次pro1(strSql varchar2,strOut out integer)只完成一条记录的插入,则你在成功插入前几条记录就已经CommitTransaction。当第n条失败了,就只能Rollback当前的那n条记录了。
如果你的pro1(strSql varchar2,strOut out integer)调用一次就完成十条记录的insert,那就不知道为什么不能Rollback了。
我们的做法都是调用一次prol,insert一条记录,在外部控制Transaction.