十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在Oracle中,可以用kill session来终止一个会话进程,其基本语法结构为:
成都创新互联公司成立于2013年,先为广丰等服务建站,广丰等地企业,进行企业商务咨询服务。为广丰企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
alter system kill session 'sid,serial' ;
杀掉(kill)Oracle中的会话(Session)的方法:
SQL conn etl/etl
Connected.
SQL update test set status='invalid';
55944 rows updated.
SQL update test2 set dropped='Y';
3090 rows updated.
Oracle Database,简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统。
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统。
问题场景:在操作大数据量的时候,会出现种种问题导致数据不正确导致需要重新处理数据,如果这个时候删除表数据会无法删除成功,然后手动终止会话可能会提示“标记要终止的会话”,这是因为手动终止会话后,进程的状态被设置为“killed”,但是锁定的资源很长时间没有被释放,那么可以在OS级再杀死相应的进程(线程),详细操作如下:
1,查询临时会话的session:
--查找sql执行的会话session id, 用session id 这一栏的数据进行kill掉会话
SELECT B.SID,
B.OBJECT,
A.SQL_ID,
A.LOGON_TIME,
A.SQL_EXEC_START,
A.MODULE,
C.SQL_TEXT,
C.SQL_FULLTEXT,
A.OSUSER,
A.EVENT#,
A.EVENT,
A.INST_ID,
A.ACTION,
A.PROCESS,
A.STATUS,
'alter system kill session ''' || a.sid || ', ' || a.serial# ||
', @' || a.inst_id || ''' IMMEDIATE;' kill_session,
A.*
FROM GV$SESSION A, GV$ACCESS B,GV$SQL C
WHERE A.SID = B.SID
AND A.INST_ID = B.INST_ID
AND A.SQL_ID = C.SQL_ID(+)
AND A.INST_ID = C.INST_ID(+)
--AND A.TYPE 'BACKGROUND'
--AND A.STATUS = 'ACTIVE'
AND B.OWNER = 'BI_DM'
--AND A.INST_ID =1
--AND A.ACTION IN ('ORA$AT_SA_SPC_SY_4630','ORA$AT_OS_OPT_SY_4629')
AND B.OBJECT = 'TMP_T_JOBNAME'
--AND A.USERNAME LIKE 'DEV%'
--AND A.MACHINE IN (/*'infor',*/'winitdb')
ORDER BY A.SQL_EXEC_START;
2,执行session id 里面是语句
alter system kill session '2761, 65372, @2' IMMEDIATE;
在kill session的时候,当提示RA-00031:标记要终止的会话 时
按如下操作:
1,select a.spid,b.sid,b.serial#,b.username from v$process a,v$session b where a.addr=b.paddr and b.status='KILLED';
2,如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在OS级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select b.spid,a.osuser,b.program from v$session a,v$process b where a.paddr=b.addr and a.sid=9065 --9065就是上面的sid
.在OS上杀死这个进程(线程)
1)、在unix上,用root身份执行命令:#kill -9 9065(即第2步查询出的spid)
2)、在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名 。可以用select name from v$database;查询
thread:是要杀掉的线程号,即第2步查询出的spid。
例:c:orakill system 9065
注意:这里要注意的是kill OS进程是在服务端操作,而不是你程序所在客户机
1、由于oracle运行在Linux系统里面,第一步,我们要连接Linux系统。
2、然后我们转换到oracle安装用户里面。 我的是 oracle。
3、然后我们运行oracle的环境里的变量, 用来输入相关命令。
4、进去oracle的控制台。输入一个命令: sqlplus / as sysdba。
5、如果要启动数据库,就输入命令: startup。
6、如果关闭数据库, 就输入命令: shutdown immediate。
sqlplus环境下 alter system kill session 'sid,serial#';
如果不行的话在操作系统下操作:
windows: orakill 实例名 spid
linux: kill -9 spid
你可以考虑使用在操作系统层面来杀掉客户端会话的连接进程,这样资源马上就可以释放掉,如果只是在数据库级别的话,即便是管理员杀掉会话,那么v$session里面也不过是显示killed状态,而不是真正的释放掉,同时如果此时实际的连接数量达到参数session设定数量上线的话,新的连接将会报错无法连接,直到资源释放才可以。