Oracle过程停止运行

时间:2014-11-20 13:59:39

标签: sql asp.net oracle plsql

我有一个从.NET应用程序调用的Oracle存储过程。它运行超过15分钟。这是一个非常简单的代码,从较小的表插入一个大表,然后清除较小的表。

我的问题是它运行了15分钟,然后就死了。日志中没有错误消息。没有。刚停止运行。我做了一个SQL跟踪,没有任何问题的证据。有时候它有效,有时则不然。

存在一些一致性 - 当它失败时,它永远不会进入Data Moved Successfully或Exception部分。只是似乎停止了运行。

PROCEDURE C_X_AllocInsertData(
    p_AccountTable    VARCHAR2,
    p_AllocationTable VARCHAR2,
    p_YearMonth NUMBER, 
    p_versionPK NUMBER,
    p_returncode OUT NUMBER) 
AS PRAGMA AUTONOMOUS_TRANSACTION;
  v_OutputTableRowCntSql varchar(32767);
BEGIN
  p_returncode:=0;

  C_X_VERSIONINSERTLOG(
    p_VersionPk
   ,'Now moving the data from temp table to big table'
   ,'Now moving the data from temp table to big table'
  );

  --Now that all operations are complete, delete from account table
  v_OutputTableRowCntSql := 'BEGIN delete from '||p_AccountTable||' where YEARMONTH= '||p_YearMonth||'; ';


  --Then insert from the TMP table
  v_OutputTableRowCntSql := v_OutputTableRowCntSql || 'insert into '||p_AccountTable|| ' SELECT * FROM ' || p_AllocationTable||'; ';

  --Then clear the temp table
  v_OutputTableRowCntSql := v_OutputTableRowCntSql ||  'delete from '||p_AllocationTable||'; END;';
  EXECUTE IMMEDIATE v_OutputTableRowCntSql;
  C_X_VERSIONINSERTLOG(
    p_VersionPk
   ,'Data moved successfully.'
   ,'Data moved successfully.'
  );
  commit;

EXCEPTION 
  WHEN OTHERS THEN
  p_returncode:=-1;

  C_X_VERSIONINSERTLOG(
    p_VersionPk
   ,'Insert into big table failed for version #'||p_versionPK||'... Error message was:  '||SQLERRM
   ,'Insert into big table failed.  Error message was:  '||SQLERRM||' Statement was: '||v_OutputTableRowCntSql
  );
END;

似乎C_X_VERSIONINSERTLOG程序缺少适当的错误处理......我将添加它。这是原来的形式......这可能是问题吗?

PROCEDURE C_X_VERSIONINSERTLOG
  (
    P_VERSIONPK       NUMBER,
    P_LOGTEXT VARCHAR2,
    P_ERROR_MSG VARCHAR2)
AS PRAGMA AUTONOMOUS_TRANSACTION;
  v_VersionLogPk C_X_VERSIONLOG.VersionLogPk%TYPE;
BEGIN

  SELECT C_X_VERSIONLOG_SEQ.nextval INTO v_VersionLogPk FROM DUAL;

  INSERT
  INTO C_X_VERSIONLOG
    (
      VersionLogPk,
      VERSIONPK,
      VERSIONLOGTEXT,
      VERSIONLOGTECHNICALTEXT,
      VERSIONLOGDATE
    )
    VALUES
    (
      v_VersionLogPk,
      P_VERSIONPK,
      P_LOGTEXT,
      P_ERROR_MSG ,
      CURRENT_TIMESTAMP
    );
  COMMIT;
END C_X_VERSIONINSERTLOG;

0 个答案:

没有答案