当前位置:首页 > 服务端 > 删除ArcSDE中的死连接或指定SDE_ID号连接或删除全部直连的连接

删除ArcSDE中的死连接或指定SDE_ID号连接或删除全部直连的连接

在实际操作过程中,我们可能有的时候设及到没有把直连的连接删除在表SDE.process_information中的连接记录,这时建议不能直接删除,正常可以建议使用设置TCPKEEPALIVE的值的进行操作,也可使用过程来进行删除.

 

第一种:删除全部直连

进入sqlplus中以sys用户连接,创建过程如下:

     CREATE OR REPLACE PROCEDURE "SYS"."KILL_ALL_DC"
/*************************************************
*John Karagiannis (ESRI Charlotte) - 2007
*Procedure kills all sessions listed in the sde.process_information table
*************************************************/
AS
SQL_STMT VARCHAR2(200);
CURSOR SDE_USERS IS
SELECT SERVER_ID,OWNER FROM SDE.PROCESS_INFORMATION WHERE DIRECT_CONNECT = 'Y';
NEWC INTEGER;
BEGIN
 FOR SDEREC IN SDE_USERS LOOP
  DECLARE CURSOR KILL_DC IS
  SELECT SID,SERIAL# FROM SYS.V$SESSION
  WHERE PROCESS LIKE SDEREC.SERVER_ID || ':%'
  AND USERNAME = SDEREC.OWNER;
  BEGIN
   FOR KILLREC IN KILL_DC LOOP
    SQL_STMT := 'ALTER SYSTEM KILL SESSION ' || '''' || KILLREC.SID || ',' || KILLREC.SERIAL# || '''';
    EXECUTE IMMEDIATE SQL_STMT;
   END LOOP;
  END;
 END LOOP;
    SDE.PINFO_UTIL.PURGE_UNUSED(NEWC);
END;
/

执行exec kill_all_dc;

 

 

第二种,删除指定的条件的直连

 

CREATE OR REPLACE PROCEDURE "SYS"."KILL_DC"
/*************************************************
* John Karagiannis (ESRI Charlotte) - 2007
* Procedure kills oracle session based on specific
* sde_id obtained from the sde.process_information table
*************************************************/
(
SDEID IN NUMBER
)
AS
SQL_STMT VARCHAR2(200);
CURSOR SDE_USERS IS
SELECT SERVER_ID,OWNER FROM SDE.PROCESS_INFORMATION WHERE DIRECT_CONNECT = 'Y'AND SDE_ID = SDEID;
NEWC INTEGER;
BEGIN
 FOR SDEREC IN SDE_USERS LOOP
  DECLARE CURSOR KILL_DC IS
  SELECT SID,SERIAL# FROM SYS.V$SESSION
  WHERE PROCESS LIKE SDEREC.SERVER_ID || ':%'
  AND USERNAME = SDEREC.OWNER;
  BEGIN
   FOR KILLREC IN KILL_DC LOOP
    SQL_STMT := 'ALTER SYSTEM KILL SESSION ' || '''' || KILLREC.SID || ',' || KILLREC.SERIAL# || '''';
    EXECUTE IMMEDIATE SQL_STMT;
   END LOOP;
  END;
 END LOOP;
    SDE.PINFO_UTIL.PURGE_UNUSED(NEWC);
END;
/

 

执行exec Kill_dc(30);

第三种情况:删除断网或意外中断的连接,创建储存过程并设置定时器的方式解决这个问题

1、进入sqlplus中,以sys用户连接,COPY下面内容并执行(就是按ENTER),就OK了。

 

CREATE OR REPLACE PROCEDURE "SYS"."KILL_ALL_DC2"
/*************************************************
*John Karagiannis (ESRI Charlotte) - 2007
*Procedure kills all sessions listed in the sde.process_information table
*************************************************/
AS
SQL_STMT VARCHAR2(200);
CURSOR SDE_USERS IS
SELECT SERVER_ID,OWNER FROM SDE.PROCESS_INFORMATION WHERE DIRECT_CONNECT = 'Y';
NEWC INTEGER;
BEGIN

    SDE.PINFO_UTIL.PURGE_UNUSED(NEWC);
END;
/

variable jobsde number;
begin
dbms_job.submit(:jobsde,'kill_all_dc2;',sysdate,'sysdate+1/1440');
end;
/

begin
dbms_job.run(:jobsde);
end;
/

 

作者:北斗星
来源链接:https://www.cnblogs.com/gzwain/archive/2008/08/27/1277312.html

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/125511.html

标签: unused variable
分享给朋友:

“删除ArcSDE中的死连接或指定SDE_ID号连接或删除全部直连的连接” 的相关文章