oille101 2021-09-27 23:46 采纳率: 50%
浏览 20

ORACLE 会话级别临时表锁表

系统成本核算,比较复杂,因此采用 oracle 包与包体 内部嵌入 存储过程的方式进行结算,由于数据量比较大,每次结算在一个表中3千多万条数据出现多次检索与更新,因此采用会话级临时表将不同公司的计算隔离开,但是每月结算时,结完几家公司后临时表就会出现锁表,找不到原因,兄弟们谁遇到这个问题.怎么解决,部分代码展示:

function mainRun(lockId in varchar2) return varchar2 is
      --返回结果集
      --401 未找到要结算的单据
      --402 未找到上个月的月结单
      --200 正常
      resultSet number(5);
      monlockID varchar2(20);
      --接收赋值 公司 农场 月份
      corp varchar2(30);
      fa varchar2(30);
      mon varchar2(30);
    begin
      
      --清除临时表数据
      --execute immediate 'TRUNCATE TABLE PB_BALANCE_TMP_ACCOUNT';  
      --execute immediate 'TRUNCATE TABLE PB_BALANCE_TMP_ACCOUNT_DTL';
      --execute immediate 'TRUNCATE TABLE PB_BALANCE_TMP_PIG';
      --execute immediate 'TRUNCATE TABLE PB_BALANCE_TMP_PIG_DTL';
      
      DELETE FROM PB_BALANCE_TMP_ACCOUNT;
      DELETE FROM PB_BALANCE_TMP_ACCOUNT_DTL; 
      DELETE FROM PB_BALANCE_TMP_PIG;
      DELETE FROM PB_BALANCE_TMP_PIG_DTL;
      
      COMMIT;
    
      monlockID := lockId;
      --为公司,农场,月份赋值
      select t.corporation,t.month,t.farm into corp,mon,fa from pb_monthlock t where t.id=monlockID and t.monlockstate=0;
      if corp is null or mon is null or fa is null then
         resultSet := 401;
      else
         --前置验证数据
         resultSet := preProcess(corp,fa,mon);
      end if;
         --结算成本
      if resultSet = 200 then
        resultSet := account(corp,fa,mon);
      end if;
        --处理临时表数据
      if resultSet = 200 then
        resultSet := process_tmptable_cost(corp,fa,mon);
      end if;

      return resultSet;
end mainRun;**


  • 写回答

1条回答 默认 最新

  • 唯一的小彬哥 2021-09-28 11:04
    关注

    你所的锁表问题,到底是表锁?还是行级锁?不管那种在Oracle是比较容易定位的,只要在发生问题时监控锁表对象,以及阻塞语句立刻就能定位到了。然后再根据SQL找代码基本就能定位。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月27日

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划