DBLOG
» WTF
Toggle navigation
DBLOG
主页
1、用户
2、各种方案
3、备份恢复
4、表空间相关
5、OGG
6、文件管理
7、常见故障分析
8、DG
9、集群相关
About Me
归档
标签
4、缩表、去重、杀会话
无
2025-08-29 00:07:53
1
0
0
admin
[TOC] ### 1. 去重操作 ```sql -- 去重操作 DELETE FROM tablename t WHERE t.rowid IN (SELECT rid FROM (SELECT t1.rowid rid, ROW_NUMBER() OVER(PARTITION BY cloume1, cloume2 ORDER BY 1) rn FROM tablename t1) t1 WHERE t1.rn > 1); ``` ### 2. 锁表处理 #### 查看被锁表信息 ```sql -- 查看被锁表信息 SELECT sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode FROM v$locked_object lo, dba_objects ao, v$session sess WHERE ao.object_id = lo.object_id AND lo.session_id = sess.sid; ``` #### 杀掉锁表进程 ```sql -- 杀掉锁表进程 ALTER SYSTEM KILL SESSION '397,40645'; ``` #### 查看数据库引起锁表的SQL语句 ```sql -- 查看数据库引起锁表的SQL语句 SELECT A.USERNAME, A.MACHINE, A.PROGRAM, A.SID, A.SERIAL#, A.STATUS, C.PIECE, C.SQL_TEXT FROM V$SESSION A, V$SQLTEXT C WHERE A.SID IN (SELECT DISTINCT T2.SID FROM V$LOCKED_OBJECT T1, V$SESSION T2 WHERE T1.SESSION_ID = T2.SID) AND A.SQL_ADDRESS = C.ADDRESS(+) ORDER BY C.PIECE; ``` ### 3. 事务锁处理 #### 查看事务锁信息 ```sql -- 查看事务锁信息 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, a.spid 操作系统ID, b.paddr, c.sql_text 正在执行的SQL, b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value; ``` #### 杀掉事务锁进程 ```sql -- 杀掉事务锁进程 ALTER SYSTEM KILL SESSION '1715,7929'; ``` #### 处理被标记为KILLED的会话 ```sql -- 查看被标记为KILLED的会话 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'; ``` #### 在操作系统级杀死进程 ```sql -- 获取进程号 SELECT b.spid, a.osuser, b.program FROM v$session a, v$process b WHERE a.paddr = b.addr AND a.sid = 1361; -- 在操作系统级杀死进程 -- 1) 在Unix上,用root身份执行命令:#kill -9 12345(即第2步查询出的spid) -- 2) 在Windows(Unix也适用)用orakill杀死线程,orakill是Oracle提供的一个可执行命令,语法为:orakill sid thread -- 其中: -- sid:表示要杀死的进程属于的实例名。可以用 select name from v$database; 查询 -- thread:是要杀掉的线程号,即第2步查询出的spid。 -- 例:c:>orakill system 12345 ```
上一篇:
4、向grid添加集群资源
下一篇:
4、逻辑备份
0
赞
1 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网