sqlplus配置和session中sql追踪
[plain]
sqlplus启动时会查找和加载的两个文件login.sql和glogin.sql。
其中glogin.sql文件默认存放在$ORACLE_HOME/sqlplus/admin目录下,login.sql可以设置在SQLPATH中。
一、login.sql文件
login.sql文件可以存放sqlplus中能使用的任何命令,包括sqlplus命令和sql语句。
sqlplus启动时会首先查找当前目录下的login.sql文件,其次会在SQLPATH目录下查找。
如果找到login.sql文件,则在SQLPLUS显示"SQL>”前执行login.sql里的所有内容。
如果没找到login.sql文件,则停止查找。
所以可将个人喜欢的常用设置放在login.sql文件中,每次sqlplus启动时会自动加载。
设置SQLPATH
在ORACLE用户profile文件中加入SQLPATH环境变量。我的是.bash_profile
如:export SQLPATH=/data/app/sqlpath(此路径是你login.sql所在的目录)
当然也可启动sqlplus后,再执行该文件(使用@命令)。
二、glogin.sql
文件glogin.sql是ORACLE为所有的数据库用户建立默认的SQLPLUS设置,默认存放在$ORACLE_HOME/sqlplus/admin目录下。
sqlplus启动时也会在出现"SQL>”之前自动执行该文件的所有内容。所以也可将一些常用设置放在该文件里。
代码为:
[sql]
define_editor=vi
----设定默认编辑器
set timing on
--显示执行时间
set serveroutput on size 1000000
--设定输出显示,且缓冲区设置为1000000
set trimspool on
--假脱机输出文本时,会去除文本行两端的空格,且行宽不定.如果为off,则文本行宽度等于linesize
set long 5000
--设置LONG和CLOB类型显示的默认字节数
set linesize 1000
--设定文本行宽为1000
set pagesize 9999
--设定SQLPLUS的页面大小
set NULL < null >
--设定NULL值显示为null
column plan_plus_exp format a80
--设定autotrace得到的解释计划输出的默认宽度
column global_name new_value gname
set termout off
define gname=idle
column global_name new_value gname
select lower(user) || '@' || substr( global_name,1,decode( dot,0, length(global_name),
dot-1) ) global_name from
(select global_name, instr(global_name,'.') dot from global_name);
set sqlprompt '&gname> '
set termout on
--以当前用户名@实例名代替 sql> 显示
在session中进行sql追踪方法:
set autotrace off;
默认不生成autotrace报告
set autotrace on explain
只显示优化器执行路径
set autotrace on statistics
只显示sql语句的执行统计信息
set autotrace on ;
显示优化器路径和sql语句执行统计信息。如下:
[sql]
test@ORCL> set autotrace on;
test@ORCL> select * from t;
ID NAME
---------- ----------------------------------
1 a
2 a
3 a
4 w
Elapsed: 00:00:00.05
Execution Plan
----------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 4 | 20 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| T | 4 | 20 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
7 consistent gets
0 physical reads
0 redo size
672 bytes sent via SQL*Net to client
519 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
4 rows processed
0 recursive calls:在执行这个sql语句中oracle内部额外执行的sql语句的个数。
0 db block gets:从buffer cache中读取的数据块的数量(通过update/delete/select for update读的次数)。
7 consistent gets:从buffer cache中读取的undo数据块的数量(通过不带for update的select 读的次数)。
0 physical reads:从硬盘读取的数据块的数量。
0 redo size:执行sql过程中产生redo的大小。
672 bytes sent via SQL*Net to client:通过SQL*Net发送给客户端的字节数。
519 bytes received via SQL*Net from client:通过SQL*Net接受客户端的字节数。
2 SQL*Net roundtrips to/from client:网络往返次数。(在sql*plus 中可以受arraysize参数影响。)
0 sorts (memory):内存排序记录的数量。
0 sorts (disk):磁盘排序记录的数量。
4 rows processed:实际返回记录的数量。