您的位置:首页 > 数据库

关于锁表查询的部分SQL

2013-03-14 23:18 369 查看
查询表空间名称和大小
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
2),
'990.99') "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC;

查看数据库引起锁表的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

查看数据库锁的情况必须要有DBA权限,可以使用一下SQL 语句:
select object_id,session_id,locked_mode from v$locked_object;
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;

查看被锁的表
select p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.object_id ;

杀掉进程
alter system kill session 'sid,serial#';

查看连接数
select count(*) from v$session;

查看并发连接数
Select count(*) from v$session where status='ACTIVE';

查看连接的进程
SELECT sid, serial#, username, osuser FROM v$session;

查看数据库使用的裸设备
select * from dba_data_files order by file_name;
select * from dba_temp_files order by file_name;
select * from v$controlfile order by file_name;
select * from v$logfile order by file_name;
具体的方法是查询dba_data_files,dba_temp_files,v$controlfile和v$logfile看这四类文件具体占用的裸设备

查询所有用户表使用大小的前三十名
select * from (select segment_name,bytes from dba_segments where owner = USER order by bytes desc ) where rownum <= 30

以下的SQL语句列出当前数据库建立的会话情况:
select sid,serial#,username,program,machine,status

如果DBA要手工断开某个会话,则执行:
alter system kill session \’SID,SERIAL#\’;
注意,上例中SID为1到7(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何操作。

查询表空间有那些表:
select table_name from all_tables where tablespace_name= 'TEMP';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: