在生产库发现一个奇怪的问题,我在一个存储过程中使用了一个会话级临时表,用户只要用自己的帐户登陆网站就会调用这个存储过程,
我发现这个会话级的临时表经常容易锁死,导致数据库不停的创建回滚段,然后导致用户无法登陆网站。(目前基本上每天这种情况都会发生一次)
我的操作系统是window2000,oracle是oracle 9.2。请教告诉什么原因。
我的存储过程大致如下:
PROCEDURE GetNewMsgList(P_Userid NUMBER,
p_groupid NUMBER,
p_allcount OUT NUMBER,
P_rc OUT messagesrctype,
P_errno OUT NUMBER,
P_errmsg OUT VARCHAR2) IS
sqlstr VARCHAR2(4000);
v_count NUMBER;
BEGIN
sqlstr := ' ';
EXECUTE IMMEDIATE 'TRUNCATE TABLE JSY_NEW_MSG_TEMP';
sqlstr := 'INSERT INTO JSY_NEW_MSG_TEMP (msgid,userid,topic,length,hits)
SELECT msgid,userid,topic,length,hits FROM jsy_messages_info;
EXECUTE IMMEDIATE sqlstr;
COMMIT;
SELECT COUNT(msgid) INTO p_allcount FROM JSY_NEW_MSG_TEMP;
OPEN P_rc FOR SELECT * FROM JSY_NEW_MSG_TEMP ;
p_errno := 0;
p_errmsg := '操作成功';
EXCEPTION
WHEN OTHERS THEN
p_errno := -88;
p_errmsg := SQLERRM;
ROLLBACK;
END GetNewMsgList;
我发现这个会话级的临时表经常容易锁死,导致数据库不停的创建回滚段,然后导致用户无法登陆网站。(目前基本上每天这种情况都会发生一次)
我的操作系统是window2000,oracle是oracle 9.2。请教告诉什么原因。
我的存储过程大致如下:
PROCEDURE GetNewMsgList(P_Userid NUMBER,
p_groupid NUMBER,
p_allcount OUT NUMBER,
P_rc OUT messagesrctype,
P_errno OUT NUMBER,
P_errmsg OUT VARCHAR2) IS
sqlstr VARCHAR2(4000);
v_count NUMBER;
BEGIN
sqlstr := ' ';
EXECUTE IMMEDIATE 'TRUNCATE TABLE JSY_NEW_MSG_TEMP';
sqlstr := 'INSERT INTO JSY_NEW_MSG_TEMP (msgid,userid,topic,length,hits)
SELECT msgid,userid,topic,length,hits FROM jsy_messages_info;
EXECUTE IMMEDIATE sqlstr;
COMMIT;
SELECT COUNT(msgid) INTO p_allcount FROM JSY_NEW_MSG_TEMP;
OPEN P_rc FOR SELECT * FROM JSY_NEW_MSG_TEMP ;
p_errno := 0;
p_errmsg := '操作成功';
EXCEPTION
WHEN OTHERS THEN
p_errno := -88;
p_errmsg := SQLERRM;
ROLLBACK;
END GetNewMsgList;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/89921/viewspace-691527/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/89921/viewspace-691527/