oracle 运维常用脚本(SQL篇)

  1. 锁表处理
a) 查询锁表【单库】
 SELECT SESS.SID,
        SESS.SERIAL#,
        LO.ORACLE_USERNAME,
        LO.OS_USER_NAME,
        AO.OBJECT_NAME,
        Q 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;
 或者
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#;
b) 查询锁表【RAC集群】
SELECT OBJECT_NAME,
       MACHINE,
       'alter system kill session   ' || '''' || S.SID || ',' || S.SERIAL# ||
       ''';'
  FROM GV$LOCKED_OBJECT L, DBA_OBJECTS O, GV$SESSION S
 WHERE L.OBJECT_ID  = O.OBJECT_ID
   AND L.SESSION_ID = S.SID;
c) 杀死
 alter system kill session 'sid,SERIAL#';
将以上查询的sid,SERIAL#替换到以上语句中执行即可,值得注意的是,在RAC环境下,如果在一台节点上执行后,还是锁表,请在所有节点上执行杀死语句即可。
  1. 追加数据文件到表空间
alter tablespace TS_STAT_IDX add datafile '+DATA2' size 100M autoextend on next 100M maxsize UNLIMITED;
注意【DATA2】为ASM组,当为RAC环境时,不需要指定具体的数据文件路径,让环境自行创建。
  1. ASM磁盘组空间查询
select name,total_mb,free_mb,(free_mb/total_mb)*100 as usage from v$asm_diskgroup;
  1. 删除表空间文件
drop tablespace niptest including contents and datafiles;
注意:执行上语句时,请先行删除表。
  1. 正在执行的sql语句及执行该语句的用户
SELECT b.sid oracleID,
       b.username 登录Oracle用户名,
       b.serial#,
       spid 操作系统ID,
       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
  1. 正在执行sql的客户端程序、SQL以及耗时
SELECT OSUSER 电脑登录身份,
       PROGRAM 发起请求的程序,
       USERNAME 登录系统的用户名,
       SCHEMANAME,
       B.Cpu_Time 花费cpu的时间,
       STATUS,
       B.SQL_TEXT 执行的sql
FROM V$SESSION A
LEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS
                   AND A.SQL_HASH_VALUE = B.HASH_VALUE
ORDER BY b.cpu_time DESC
  1. 当前连接数查询
select username,count(username) from v$session where username is not null group by username;

你可能感兴趣的:(oracle 运维常用脚本(SQL篇))