本文主要是介绍ERP(TIPTOP)用户自行解锁操作说明(p_kill),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ERP(TIPTOP)用户自行解锁操作说明(试运行)
#操作截图①
-------------华-------------丽--------------分--------------割--------------线-----------------
#操作截图②
-------------华-------------丽--------------分--------------割--------------线-----------------
# 说明
1.操作说明①:用户输入程序编号p_kill,自动打开界面,自动带出当前登录ERP用户。
(备注: 此处[ERP用户编号]已做输入限制,ERP用户为CLASS-A和CLASS-A1的用户可以输入其它用户进行解锁,反之只能对自己用户产生锁表进行解锁)
2.操作说明②:用户输入完成之后,点击确定,然后再点击右边 “解除锁表”按钮,作业会根据当前用户编号,进入数据库查找到此用户造成的表死锁,找到后并将其解除,由于公司数据库为oracle rac,此过程会等上1~2分钟。
3.解锁成功之后会弹出以下提示:
4.此作业已经做好了管控,可以给各个基地的user提供执行权限(试运行暂时先开几个用户权限),方便在我们休假的时候,用户锁表,自行运行此作业进行解锁。
-------------华-------------丽--------------分--------------割--------------线-----------------
####(程序原理说明)
1.新建作业 p_kill (略);
2.oralce 数据库建立function和procedure,
Procedure:在oracle system用户下建立procedurexxxx,并将procedure的执行权限赋给其它营运中心(即其它oracle用户),
授权语句如下:
grant excute on xxxx(procedurename) to xx(user)
Function:在function里面调用procedure(因为GP版本太低,直接调用存储过程导致编译不通过!),记得每个营运中心都建立这个一模一样的function。
3.本作业主要调用的function和存储过程如下:
fuction :
CREATE OR REPLACE FUNCTION killtable(var_name1 VARCHAR2 )
returnVARCHAR2 ISvar_log VARCHAR2(200);
beginlocktablekill(var_name =>var_name1,var_result => var_log);RETURN(var_log);
end ;
-------------华-------------丽--------------分--------------割--------------线-----------------
procedure:CREATEOR REPLACE PROCEDURE LOCKTABLEKILL(VAR_NAME IN VARCHAR2,VAR_RESULTOUT VARCHAR2) ISVAR_SID VARCHAR2(20);VAR_SERIALVARCHAR2(20);VAR_SQL VARCHAR2(2000);VAR_SQL2 VARCHAR2(2000);VAR_USER VARCHAR2(20);VAR_END VARCHAR2(50);-------------------------------------------------------------------------description : erp 用户调用procedure 给用户解锁---date&author : add by kk 2014-10-23---environment: oracle 10g RAC----------------------------------------------------------------------
BEGINVAR_USER :=VAR_NAME;VAR_SQL := 'select a.sid,a.serial# FROM
(SELECTSUBSTR(all_objects.owner||''.''||object_name,1,16) LockedOBJECT
,SUBSTR(os_user_name,1,10)TiptopUser
,gv$locked_object.processProcID
,SUBSTR(terminal,1,7)Terminal
,gv$session.sid,gv$session.serial#
,gv$session.machine
,gv$session.INST_ID FROMgv$locked_object,all_objects,gv$session WHEREgv$locked_object.object_id=all_objects.object_id ANDgv$locked_object.SESSION_ID=gv$session.SID
) awhere a.TiptopUser = ''' || VAR_USER ||'''
ANDrownum =1 ';-------------------------------------------------------------------------------------------- --上面这段sql只针对oracle 10g RAC, 如果是非RAC就简单多了,sql重新写下.
--这里只取了一行,当然你如果想把用户所有的锁表都罗列然后解锁 ,--可以考虑使用cursor, 然后再loop,循环使用alter命令干掉进程 ;--------------------------------------------------------------------------------------------DBMS_OUTPUT.PUT_LINE(VAR_SQL);EXECUTE IMMEDIATE VAR_SQLINTO VAR_SID, VAR_SERIAL;IF VAR_SID IS NOT NULL AND VAR_SERIAL IS NOTNULL THENSELECT VAR_SID || ',' || VAR_SERIAL INTOVAR_END FROM DUAL;VAR_RESULT := '死锁用户存在';DBMS_OUTPUT.PUT_LINE(VAR_END);VAR_SQL2 := 'alter system killsession ''' || VAR_END ||''' immediate ';DBMS_OUTPUT.PUT_LINE(VAR_SQL2);EXECUTE IMMEDIATE VAR_SQL2;VAR_RESULT := '死锁用户存在,且已经解锁!请重新运行ERP作业!';END IF;
EXCEPTIONWHEN NO_DATA_FOUND THENVAR_RESULT := '不存在死锁的用户';
END;
___________________________________________________________________
--------界面粗糙了一点,内容也单调了一些,功能还不够强大,后期继续改进------
---------各位大神多支招,感谢!!!-------------------------------------------------------------
------------------------------------------------edit by kk 2014-10-23------------------
------------------------------------------------QQ:309200966--------------------------------
___________________________________________________________________
这篇关于ERP(TIPTOP)用户自行解锁操作说明(p_kill)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!