
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece
2、查找死锁的语句:
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#
3、查看oracle的权限角色:
select * from dba_role_privs 授予用户和其他角色的角色
select * from dba_sys_privs授予用户和其他角色的系统权限
select * from dba_tab_privs数据库中对象的所有授权
select * from user_role_privs 查看当前用户的角色
4、oracle 查看已经执行过的sql 这些是存在共享池中的:
select * from v$sqlarea t order by t.LAST_ACTIVE_TIME desc
5、【获取oracle前10条最耗资源的sql语句】:
SELECT * FROM
(
SELECT PARSING_USER_ID
EXECUTIONS,
SORTS,
COMMAND_TYPE,
DISK_READS,
sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC
)
WHERE ROWNUM<11
如果你保证是oracle占用的资源(如果你的server上只跑oracle看任务管理器,是否是oracle占用过多cpu or 内存),那就使用topshow(网上有这个软件),看看是哪个线程占用了过多CPU~在通过v$process,v$session,v$sql_text查出对应的sql~
如果看不出比较大的cpu占用,建议你用statspack来个15分钟左右的报告发上来~
好像不能监控每个数据库的资源消耗,只能监控整个服务器的消耗情况。不过,通过sys.dm_exec_sessions这个视图里的cpu_time,memory_usage,reads,writes,logical_reads等,可以大概了解每个会话所消耗的资源。由于SQL Server实例上可以有多个数据库,而每个会话可以对多个数据库进行 *** 作,所以这里的统计信息,可能是这个会话在多个数据库上消耗的资源。其实本质上,也没必要了解每个数据库消耗太多的资源,而是要了解哪些会话或者连接,消耗了最多的资源,还有哪些语句消耗了最多的资源(sys.dm_exec_query_stats)。--会话消耗的资源SELECT session_id, cpu_time, memory_usage, reads, writes, logical_reads, host_name , --客户主机 program_name --程序 FROM sys.dm_exec_sessions--最消耗资源的语句SELECT TOP 100 t.*, d.*FROM sys.dm_exec_query_stats dCROSS apply sys.dm_exec_sql_text(d.sql_handle) tORDER BY d.total_worker_time desc, --总的cpu时间 d.total_elapsed_time DESC, --总的时间,包括cpu和io的时间 d.total_physical_reads DESC --总的物理读取次数欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)