存储过程执行卡死

原因:

1.session没杀死,有之前的相关存储过程session在执行

2.session杀死,但是相关进程没有杀死

解决:

1.根据存储过程名称(大写)查询死锁的会话id
select sid,serial# 
  from v$session 
 where sid = (select session_id from dba_ddl_locks where name='P_DR_RPT_CYHZJCFY');

2.杀死session

alter system  kill session "sid,serial#'

3.查询是否存储已经kill掉的会话存在进程在跑
select b.SPID from v$session a, v$process b where a.PADDR = b.ADDR and  a.status = 'KILLED'

4.用管理员杀死服务器上的进程,可以用sqlplus,也可以window下直接关闭电脑进程

--存在登陆数据库
sqlplus / as sysdba
--查询spid 进程
!ps -ef | grep 18110
 --杀死进程
!kill -9 18110
5.重新编译

 

发布了29 篇原创文章 · 获赞 12 · 访问量 1万+
展开阅读全文

SQL存储过程比SQL语句慢,甚至

12-03

因公司业务需要,需要每天凌晨从别的系统(Oracle数据库)取前一天的数据,建了存储过程后,发现执行存储过程经常卡死,单独执行却挺快,不知道是哪里出了问题,求大神帮忙分析下,万分感谢!以下为存储过程代码: USE [HERP_BHYY] GO /****** 对象: StoredProcedure [dbo].[sp_GetHISChargeOReceiptDataInHISDBbyDay] 脚本日期: 12/03/2013 08:36:35 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_GetHISChargeOReceiptDataInHISDBbyDay] @ImpDate as DATETIME AS BEGIN --SET NOCOUNT ON; DECLARE @ST_DATE AS DATETIME DECLARE @ED_DATE AS DATETIME DECLARE @TEMP_DATE DATETIME IF @ImpDate is not null begin SET @ST_DATE=LEFT(@ImpDate,10) SET @ED_DATE=dateadd(day,1,@ST_DATE) end delete hisdb2.dbo.his_charge_acc_o where charge_date>=@ST_DATE and charge_date<@ED_DATE insert into hisdb2.dbo.his_charge_acc_o (charge_date, deposit_pre, pay_type_code, patient_type_code, his_irecord, charge_money, patient_code, invoice_no, operator, acc_flag, balance_flag, invoice_type) select charge_date, deposit_pre, pay_type_code, patient_type_code, his_irecord, charge_money, patient_code, invoice_no, operator, acc_flag, balance_flag, invoice_type from openquery(HIS,'select charge_date, deposit_pre, pay_type_code, patient_type_code, his_irecord, charge_money, patient_code, invoice_no, operator, acc_flag, balance_flag, invoice_type from data_hrp.HIS_CHARGE_ACC_o') where charge_date>=@ST_DATE and charge_date<@ED_DATE end 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览