根据提供的文件信息,我们可以总结出一系列DBA(数据库管理员)常用的SQL语句,这些语句在Oracle数据库管理中非常实用。下面将详细解释每个SQL语句的功能及其应用场景。 ### SQL语句1:查询等待事件 ```sql select * from v$session_wait where event not like 'SQL*Net%' and event <> 'rdbmsipcmessage' and event not like 'StreamsAQ%' --and event not like '%timer' and event not like '%motemessage' --and event not like '%wait' ``` **功能说明**: 此SQL语句用于查询当前所有会话的等待事件。通过排除一些特定类型的等待事件(如SQL*Net通信、IPC消息等),可以更聚焦于具体的等待类型。这对于性能调优非常有用,特别是当遇到性能瓶颈时,可以通过该语句快速定位到问题所在的等待事件。 ### SQL语句2:获取特定进程对应的会话信息 ```sql select b.SID, b.SERIAL#, b.USERNAME from v$session b where b.paddr = (select addr from v$process c where c.spid = '10860') ``` **功能说明**: 此SQL语句用于查询与特定操作系统进程相对应的Oracle会话信息。这里使用了`v$process`视图来关联操作系统进程ID(SPID)和Oracle内部进程地址(ADDR),然后通过`v$session`视图获取具体的会话信息,包括SID、序列号以及用户名等。这对于调试或监控某个特定进程的数据库活动非常有帮助。 ### SQL语句3:查找含有特定字符串的数据文件 ```sql select * from (select tablespace_name, file_name as name from dba_data_files union all select tablespace_name, file_name as name from dba_temp_files) x where x.name like '%_5000m%' order by 2 ``` **功能说明**: 此SQL语句用于查找数据文件表空间和临时文件表空间中包含特定字符串(本例中为“_5000m”)的所有文件。通过`UNION ALL`操作符将两个查询结果合并,并通过`LIKE`关键字进行模糊匹配,最终按文件名排序输出结果。这对于管理和维护大型数据库系统中的文件结构非常有用。 ### SQL语句4:根据会话ID获取执行的SQL语句 ```sql select /*+ ordered */ sql_text from v$sqltext a where (a.hash_value, a.address) in (select decode(sql_hash_value, 0, prev_hash_value, sql_hash_value), decode(sql_hash_value, 0, prev_sql_addr, sql_address) from v$session b where b.paddr = (select addr from v$process c where c.spid = '&pid')) order by piece asc; ``` **功能说明**: 此SQL语句用于根据会话ID获取正在执行的具体SQL语句文本。通过`v$session`视图和`v$process`视图确定目标会话的SQL哈希值和地址,然后通过`v$sqltext`视图获取完整的SQL语句文本。这对于故障排查和性能优化至关重要。 ### SQL语句5:获取会话ID并生成KILL命令 ```sql select 'kill -9 ' || P.spid as killcmd, s.SID, s.SERIAL#, s.USERNAME, s.PROGRAM from v$process P, v$session S WHERE S.PADDR = P.ADDR and S.TYPE <> 'BACKGROUND' AND S.SID = '&sid' ``` **功能说明**: 此SQL语句用于获取指定会话ID的详细信息,包括操作系统进程ID(SPID)、SID、序列号、用户名以及程序等信息,并自动生成用于杀死该进程的命令行文本。这对于处理死锁或者异常挂起的会话非常有用。 ### SQL语句6:查询每小时归档日志大小 ```sql select trunc(completion_time) as date1, count(*) as cnt, trunc(sum((blocks * block_size) / 1024 / 1024)) as mb from v$archived_log group by trunc(completion_time) order by 1 desc ``` **功能说明**: 此SQL语句用于统计每小时产生的归档日志大小。通过对`v$archived_log`视图的查询,并使用`trunc()`函数对完成时间进行四舍五入,可以得到每个小时内归档日志的数量及总大小。这对于监控归档日志的增长速度非常有用。 ### SQL语句7:查询特定日期后每小时归档日志大小 ```sql select to_char(completion_time, 'yyyy-mm-dd hh24') as date1, count(*) as cnt, trunc(sum((blocks * block_size) / 1024 / 1024)) as mb from v$archived_log where to_char(completion_time, 'yyyy-mm-dd') >= '2008-02-01' group by to_char(completion_time, 'yyyy-mm-dd hh24'); ``` **功能说明**: 此SQL语句进一步扩展了第6个SQL语句的功能,增加了时间范围限制。它只统计从2008年2月1日之后每个小时内的归档日志大小。这有助于更精确地分析特定时间段内的归档日志增长情况。 ### SQL语句8:获取特定用户会话信息 ```sql col username for a12 col program for a20 select P.spid, s.SID, s.SERIAL#, s.USERNAME, s.PROGRAM, sq.SQL_TEXT from v$process P, v$session S, v$sqlarea sq WHERE S.PADDR = P.ADDR and S.TYPE <> 'BACKGROUND' AND S.USERNAME = 'ELS' AND S.SID = 542 AND S.SQL_HASH_VALUE = sq.HASH_VALUE ``` **功能说明**: 此SQL语句用于查询特定用户的会话信息以及正在执行的SQL语句。通过`v$process`、`v$session`以及`v$sqlarea`三个视图的联合查询,可以获取到用户的操作系统进程ID(SPID)、SID、序列号、用户名、程序以及SQL语句文本等信息。这对于追踪特定用户的活动非常有帮助。 以上SQL语句涵盖了数据库管理中常见的几个方面,包括性能监控、故障排查、资源管理等。对于DBA而言,熟练掌握这些SQL语句能够极大地提高工作效率和问题解决能力。
select *
from v$session_wait
where event not like 'SQL*Net%'
and event <> 'rdbms ipc message'
and event not like 'Streams AQ%'
-- and event not like '%timer'
and event not like '%mote message'
-- and event not like '% wait'
根据操作系统进程号定位会话信息sid
select b.SID,b.SERIAL#, b.USERNAME
from v$session b
where b.paddr = (select addr from v$process c where c.spid = '10860')
查询数据文件使用情况
select *
from (select tablespace_name, file_name name from dba_data_files
union all
select tablespace_name, file_name name from dba_temp_files) x
where x.name like '%_5000m%'
order by 2
----------------------------------------------------------------
通过进程id,获取sql语句:
select /*+ ordered */ sql_text
from v$sqltext a
(select decode(sql_hash_value, 0, prev_hash_value, sql_hash_value),
decode(sql_hash_value, 0, prev_sql_addr, sql_address)
from v$session b
where b.paddr =
(select addr from v$process c where c.spid = '&pid'))
order by piece asc;
----------------------------------------------------------------
根据sid 查出PID 用操作系统命令kill 进程
select 'kill -9 '||P.spid as killcmd, s.SID,s.SERIAL#,s.USERNAME,s.PROGRAM
from v$process P, v$session S
WHERE S.PADDR = P.ADDR and s.TYPE<>'BACKGROUND'
AND S.SID = '&sid'
----------------------------------------------------------------
-- 查询每天归档大小、个数
select trunc(completion_time) as date1,
count(0) as cnt,
trunc(sum((blocks * block_size) / 1024 / 1024)) as mb
from v$archived_log
group by trunc(completion_time) order by 1 desc
-- 查询某一天的每小时归档文件大小,个数
select to_char(completion_time, 'yyyy-mm-dd hh24') as date1,
count(0) as cnt,
trunc(sum((blocks * block_size) / 1024 / 1024)) as mb
from v$archived_log
where to_char(completion_time, 'yyyy-mm-dd') >= '2008-02-01'
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助