一 、Oracle 和达梦 kill session 的差异
1. Oracle 数据库 其中一种 Kill Session 的方法:
Oracle -- ALTER SYSTEM KILL SESSION 杀死会话的基本语法如下所示。
SQL> ALTER SYSTEM KILL SESSION 'sid,serial#';
在RAC环境中,可以选择指定INST_ID,在查询GV$SESSION视图时显示。这允许终止不同RAC节点上的会话。
SQL> ALTER SYSTEM KILL SESSION 'sid,serial#,@inst_id';
KILL SESSION命令实际上不会终止会话。它只是要求会话自杀。在某些情况下,例如等待远程数据库的回复或回滚事务,会话不会立即自行终止并等待当前操作完成。在这些情况下,会话将具有“标记为杀死”的状态。然后它会尽快被杀死。 除了上面描述的语法之外,还可以添加IMMEDIATE子句。
SQL> ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
这不会影响命令执行的工作,但会立即将控制权返回给当前会话,而不是等待确认kill。
2 . DM 杀会话
DM 数据库采用的是线程架构,所有不能向Oracle那样直接kill 进程,只能调用sp_close_session()来kill 线程杀掉会话。
SQL> select sess_id,curr_sch ,sql_text,user_name,trx_id ,clnt_host,clnt_ip,osname, vpooladdr from sys.v$sessions where sql_text<>'';
LINEID SESS_ID CURR_SCH SQL_TEXT
---------- -------------------- -------- --------------------------------------------------------------------------------------------------------------------------------
USER_NAME TRX_ID CLNT_HOST CLNT_IP OSNAME VPOOLADDR
--------- -------------------- --------- -------------------- --------- --------------------
1 140615618728712 SYSDBA select COMMENT$ from SYS.SYSCOLUMNCOMMENTS where SCHNAME='SYS' and TVNAME='SYSOBJECTS' and COLNAME='SUBTYPE$'
SYSDBA 1871 ahzhixin ::ffff:192.168.20.45 Windows 8 140615618661112
2 140615954273032 SYSDBA select sess_id,curr_sch ,sql_text,user_name,trx_id ,clnt_host,clnt_ip,osname, vpooladdr from sys.v$sessions where sql_text<>'';
SYSDBA 1874 dm2 ::ffff:127.0.0.1 Linux 140615954205432
used time: 1.935(ms). Execute id is 57.
然后根据SESSION_ID使用系统过程SP_CLOSE_SESSION(SESSION_ID)来kill 会话:
SQL> SP_CLOSE_SESSION(140615618728712);
DMSQL executed successfully
used time: 1.099(ms). Execute id is 58.
SQL>
二、 关于线程的概念:
在Oracle 数据库中,有很多的进程,每个进程负责不同的功能。 而DM 数据库使用“对称服务器构架”的单进程、多线程结构。这种对称服务器构架在有效地利用了系统资源的同时又提供了较高的可伸缩性能,这里所指的线程即为操作系统的线程。
[root@dm1 dm]# ps -ef|grep dmserver
dmdba 21285 1 0 18:02 ? 00:00:04 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/cndba/dm.ini -noconsole
root 21638 21435 0 23:52 pts/1 00:00:00 grep dmserver
[root@dm1 dm]#
服务器在运行时由各种内存数据结构和一系列的线程组成,线程分为多种类型,不同类型的线程完成不同的任务。线程通过一定的同步机制对数据结构进行并发访问和处理,以完成客户提交的各种任务。DM 数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程。
DM 进程中主要包括监听线程、IO 线程、工作线程、调度线程、日志线程等,可以通过DM 的动态性能视图查看线程的相关信息。主要 相关的线程有如下4个:
V$LATCHES 记录当前正在等待的线程信息 V$THREADS 记录当前系统中活动线程的信息 V$WTHRD_HISTORY 记录自系统启动以来,所有活动过线程的相关历史信息。 V$PROCESS 记录服务器进程信息