Oracle中的SQL语句执行日志查询可以通过以下步骤来完成:
1. 开启SQL Trace跟踪
在开启SQL Trace跟踪前需要确认以下事项:
- 需要有ALTER SESSION
权限
- 需要对要跟踪的会话打开跟踪标识
具体步骤如下:
- 开启跟踪标识:ALTER SESSION SET SQL_TRACE=TRUE;
- 执行目标SQL语句
- 关闭跟踪标识:ALTER SESSION SET SQL_TRACE=FALSE;
2. 导出SQL执行日志信息
执行上述步骤后,我们即可生成SQL执行日志信息。但这些日志信息并不是易于被分析的纯文本信息,因此我们可以使用工具对这些日志文件进行解析和格式化,从而方便我们查看和分析。
Oracle自身提供有tkprof
这个工具,可以将SQL Trace文件进行解析和格式化,具体用法如下:
tkprof trace_file_name output_file_name explain=用户名/密码 sys=no
其中trace_file_name
为SQL Trace存储的文件名,output_file_name
是解析后生成的目标日志文件名,explain
是解析输出的文本是否需要加入SQL语句的执行计划,sys
表示在解析过程中是否需要查询SYS
表。
示例1
我们来举个例子,比如我们想要通过SQL Trace来跟踪一个查询进程,查询的SQL语句如下:
SELECT * FROM CUSTOMERS WHERE CITY = 'New York';
我们可以通过以下步骤来进行跟踪和导出执行日志信息:
-- 1. 开启SQL Trace跟踪
ALTER SESSION SET SQL_TRACE=TRUE;
-- 2. 执行目标SQL语句
SELECT * FROM CUSTOMERS WHERE CITY = 'New York';
-- 3. 关闭SQL Trace跟踪
ALTER SESSION SET SQL_TRACE=FALSE;
-- 4. 导出执行日志信息
tkprof trace_file_name output_file_name explain=用户名/密码 sys=no
示例2
我们再来举个例子,比如我们想要对一个PL/SQL过程进行跟踪,并查看执行的时间和I/O消耗情况。此时,我们可以通过以下步骤来跟踪和导出执行日志信息:
-- 1. 开启SQL Trace跟踪
ALTER SESSION SET SQL_TRACE=TRUE;
-- 2. 执行目标PL/SQL过程
DECLARE
x NUMBER;
BEGIN
FOR i IN 1..10000 LOOP
x := x + i;
END LOOP;
END;
-- 3. 关闭SQL Trace跟踪
ALTER SESSION SET SQL_TRACE=FALSE;
-- 4. 导出执行日志信息
tkprof trace_file_name output_file_name sys=no sort=exeela
这里我们指定了sort=exeela
来对SQL语句执行时间进行排序,并把I/O消耗高的SQL语句排在前面,以便我们更快速地找到瓶颈。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Oracle中sql语句如何执行日志查询 - Python技术站