沃梦达 / IT编程 / 数据库 / 正文

查询Oracle中正在执行和执行过的SQL语句

要查询Oracle数据库中正在执行和执行过的SQL语句,可以进行以下步骤:

要查询Oracle数据库中正在执行和执行过的SQL语句,可以进行以下步骤:

步骤1:开启SQL跟踪

在Oracle数据库中,SQL跟踪是一种捕捉SQL执行信息的机制,它可以记录SQL语句的执行时间、执行计划、I/O等信息。要查询数据库中正在执行和执行过的SQL语句,需要先开启SQL跟踪。可以通过以下命令开启SQL跟踪:

ALTER SESSION SET SQL_TRACE = TRUE;

注意:开启SQL跟踪需要具有SYSDBA或SYSOPER角色的用户权限,否则会提示“ORA-01031: insufficient privileges”。

步骤2:查询SQL跟踪文件

开启了SQL跟踪之后,会在数据库的用户目录下生成一个trace文件。可以通过以下命令查询trace文件的路径:

SELECT VALUE
FROM   v$diag_info
WHERE  NAME = 'Default Trace File';

该命令会返回trace文件的路径,例如:/u01/app/oracle/diag/rdbms/mydb/mydb/trace/mydb_ora_12345.trc。

步骤3:解析SQL跟踪文件中的SQL语句

查询到trace文件的路径之后,可以使用tkprof工具来解析trace文件,并将SQL语句展示出来。tkprof是Oracle提供的诊断工具,可以将trace文件中的SQL语句以易于阅读的方式显示出来。可以使用以下命令运行tkprof工具:

tkprof tracefile.trc outputfile.txt explain=system/manager sys=no waits=yes sort=prsela,fchela,ela

其中,tracefile.trc是要解析的trace文件名;outputfile.txt是tkprof的输出文件名;explain=system/manager是连接数据库的用户名和密码;sys=no表示不要显示sys级别的SQL语句;waits=yes表示输出等待事件的信息;sort=prsela,fchela,ela表示按SQL执行次数、磁盘操作次数和消耗的时间排序。

通过以上三个步骤,就可以查询到Oracle数据库中正在执行和执行过的SQL语句。

下面是两个示例:

示例1:查询当前正在执行的SQL语句

-- 开启SQL跟踪
ALTER SESSION SET SQL_TRACE = TRUE;

-- 查询当前正在执行的SQL语句
SELECT sql_id, sql_text
FROM   v$sql
WHERE  sql_id IN (SELECT sql_id FROM v$session WHERE status = 'ACTIVE');

在查询结果中,可以看到当前正在执行的SQL语句及其对应的sql_id。

示例2:解析trace文件中的SQL语句

首先,使用步骤1中的SQL语句开启SQL跟踪,然后执行一些SQL语句,最后使用如下的命令解析trace文件:

-- 解析trace文件
tkprof /u01/app/oracle/diag/rdbms/mydb/mydb/trace/mydb_ora_12345.trc outputfile.txt explain=system/manager sys=no waits=yes sort=prsela,fchela,ela

在输出文件中,就可以看到解析后的SQL语句及其执行信息。

本文标题为:查询Oracle中正在执行和执行过的SQL语句