oracle 特殊查询sql,使用一些特殊的SQL查看Oracle重要信息

查看Oracle当前被锁的对象

比如执行下面的语句将toperator进行加锁

select * from toperator t for update;

然后执行下面的SQL查看当前被锁的对象

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#;

b52effa7c9f42727350a1259dd7f2988.png

查看Oracle正在执行的SQL

select a.username, a.sid, b.sql_text, b.sql_fulltext, b.last_active_time, b.module

from v$session a, v$sqlarea b

where a.sql_address = b.address;

输出如下

23d21c1d7cbb97bdcda402bf09f236e1.png

可以看到这条SQL本身因为也正在执行,所以也在其中显示,另外last_active_time显示最近一次执行的时间,这里因为Oracle的日期时间配置的有问题,所以虽然现在日期为2017-03-09,但显示为2018-02-02,不过每次重新执行这条SQL,可以看到其last_active_time的时间是对应更新的。module显示是在哪个进程中执行的这个SQL,可以看到其是在PL/SQL Developer中执行的

另外还可以通过sql_fulltext查看完整的SQL

877f6c9eb1fe9d37f31ea0d6cd731ed6.png

查看Oracle执行过的SQL

select b.sql_text, b.last_active_time, b.first_load_time, b.sql_fulltext

from v$sqlarea b

where b.module like '%EXE名称%'

and b.sql_fulltext like '%部分SQL%';

用于查某个特定进程执行的SQL

比如我想查看进程名为procmaintran.exe执行包含toperator表的SQL的历史信息

select b.sql_text, b.last_active_time, b.first_load_time, b.sql_fulltext, b.module

from v$sqlarea b

where b.module like '%procmaintran.exe%'

and b.sql_fulltext like '%toperator%';

可以看到输出结果

e58670830a437b8b0c1b175cd3873ead.png

这个方法可以查看在PLSQL中执行的SQL、可以查看Delphi中拼接的普通SQL、也可以查看proc程序中的SQL等,对于排查SQL相关的问题还是很有帮助的

只不过proc中的SQL会比较特殊,大概的格式如下(其中:b0、:b1表示proc中定义使用的变量)

select t.name, t.age

into :b0, :b1

from userinfo t

where t.age > :b2

如果要在PLSQL中执行看结果需要对其进行简单的修改,替换其中的变量,变成标准的普通SQL,然后再去执行。比如上面的SQL修改成

select t.name, t.age

from userinfo t

where t.age > 10

查看数据库连接数

在《测试SQL Server的连接数》讲到了如何查看SQL Server的连接数

Oracle当然也是可以查看其连接数据的,主要是通过v$session

select count(*) from v$session t where t.PROGRAM like '进程名'

执行上面的SQL可以查看当前某个进程和Oracle建立的连接数,比如下图查看testADO.exe和Oracle的连接数

a83cbc1820231a1d1da3df69cc135613.png

通过v$session还可以获取更多信息,比如连接的用户等信息

比如执行下面的SQL可以看到所有列信息

select * from v$session t where t.PROGRAM like '进程名'

56948829aeb658023bd77fe563713a4a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值