oracle 查看及kill进程,DDL死锁,锁表查询处理。sql语句执行时长查询

 连接数和进程处理:

1.查询数据库当前进程的连接数:

  select count(*) from v$process;

2.查看数据库当前会话的连接数:

  select count(*) from v$session;

3.查看数据库的并发连接数:

  select count(*) from v$session where status='ACTIVE';

4.查看当前数据库建立的会话情况:

  select sid,serial#,username,program,machine,status from v$session;

5.查询数据库允许的最大连接数:

  select value from v$parameter where name = 'processes';

  或者:show parameter processes;

6.查询所有数据库的连接数

  select schemaname,count(*)from v$session group by schemaname;

7.查询终端用户使用数据库的连接情况。

  select osuser,schemaname,count(*) from v$session group by schemaname,osuser;

#修改连接

  alter system set processes = value scope = spfile

#修改数据库允许的最大连接数:

  alter system set processes = 300 scope = spfile;

  (需要重启数据库才能实现连接数的修改)

重启数据库:

       sqlplus / as sysdba --登录dba

  shutdown immediate;

  startup;

DDL死锁查询处理

SELECT DISTINCT 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' ||

                s.inst_id || ''' immediate;' AS kill_session_scripts

               ,s.sql_id

               ,a.sql_text

               ,s.sid

               ,s.serial#

  FROM dba_ddl_locks l

      ,gv$session    s

      ,gv$sqlarea     a

WHERE 1 = 1

   AND l.session_id = s.sid

   AND s.sql_id = a.sql_id

   AND lower(a.sql_text) NOT LIKE '%alter system kill session %'

-- AND l.owner IN ('TZQ','LOG');

查询正在使用了sql

1.

select a.sid,

       a.serial#,

       a.paddr,

       a.machine,

       nvl(a.sql_id, a.prev_sql_id) sql_id,

       b.sql_text,

       b.sql_fulltext,

       b.executions,

       b.first_load_time,

       b.last_load_time,

       b.last_active_time,

       b.disk_reads,

       b.direct_writes,

       b.buffer_gets

  from v$session a, v$sql b

where a.username = sys_context('USERENV', 'CURRENT_USER')

   and a.status = 'ACTIVE'

   and nvl(a.sql_id, a.prev_sql_id) = b.sql_id;

2.

SELECT b.sid oracleID,  

       b.username 用户名,  

       b.serial#,  

       paddr,  

       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获得PID:

SELECT spid, osuser, s.program

FROM v$session s, v$process p

WHERE s.paddr=p.addr AND s.sid={ORACLEID};

然后执行

ALTER system KILL SESSION '{ORACLEID},{SERIAL#}';

查询当前被锁的表

SELECT l.session_id sid,  

       s.serial#,  

       l.locked_mode 锁模式,  

       l.oracle_username 登录用户,  

       l.os_user_name 机器用户名,  

       s.machine 机器名,  

       s.terminal 终端用户名,  

       o.object_name 被锁对象名,  

       s.logon_time 登录数据库时间  

FROM v$locked_object l, all_objects o, v$session s  

WHERE l.object_id = o.object_id  

   AND l.session_id = s.sid  

ORDER BY sid, s.serial#;

解锁

alter system kill session 'sid,serial#'

查询sql执行时间

select *

from (select sa.SQL_TEXT "执行 SQL",

        sa.EXECUTIONS "执行次数",

        round(sa.ELAPSED_TIME / 1000000, 2) "总执行时间",

        round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) "平均执行时间",

        sa.COMMAND_TYPE,

        sa.PARSING_USER_ID "用户ID",

        u.username "用户名",

        sa.HASH_VALUE

     from v$sqlarea sa

     left join all_users u

      on sa.PARSING_USER_ID = u.user_id

     where sa.EXECUTIONS > 0

     order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc)

where rownum <= 50;

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值