实例讲解:Sqlplus的set系统变量及其得?size=
Set系统变量的功能和使用方法:
变量名 说明
set appinfo{on|off|text} |
脚本登陆到dbms_application_info这个治理用的package中。
set arraysize{15|n} |
是sql*plus从db取回数据是每次的list大小,但是这里有点需要声明,其实取回的时候第一次都是只取1条记录的,第二开始才会按照arraysize指定的数值来返回记录数,这个变量的设定范围是从1~5000的整数,默认为15,不建议取的太大,会影响hit的命中率,对于这点以后我将会在tuning的相关叙述中证实。
set autocommit{on|off|immediate|n} |
自动commit,可是设定开启,关闭,实时和多少条记录后commit
set autoprint{on|off} |
自动打印变量值,假如autoprint为on是那么在procedure的执行完是大家都将可以看到屏幕上有打印变量的值,关闭是则只显示“过程执行完毕”这样的提示,在调试的时候建议打开
set autorecovery{on|off} |
设定为on时将以默认的文件名来记录REDO Log,当需要恢复时使用recover automatic database,否则只能使用recover database。
set autotrace{on|off|trace [only]}[explain][statistics] |
对正常执行完毕的sql dml语句自动生成报表信息,在tuning的时候比较有用,执行对象需要被赋予plustrace角色。在这里有的人可能会发现自己的对象集合中没有plan_table这张表(请用sys用户来建表),下面我给出建表的DDL,下面的几个命令请用sys用户来执行:
CREATE TABLE PLAN_TABLE (STATEMENT_ID VARCHAR2(30),TIMESTAMP DATE,REMARKS VARCHAR2(80),OPERATION VARCHAR2(30),OPTIONS VARCHAR2(30),OBJECT_NODE VARCHAR2(128),OBJECT_OWNER VARCHAR2(30),OBJECT_NAME VARCHAR2(30),OBJECT_INSTANCE NUMBER(38),OBJECT_TYPE VARCHAR2(30),OPTIMIZER VARCHAR2(255),SEARCH_COLUMNS NUMBER,ID NUMBER(38),PARENT_ID NUMBER(38),POSITION NUMBER(38),COST NUMBER(38),CARDINALITY NUMBER(38),BYTES NUMBER(38),OTHER_TAG VARCHAR2(255),PARTITION_START VARCHAR2(255),PARTITION_STOP VARCHAR2(255),PARTITION_ID NUMBER(38),OTHER LONG,DISTRIBUTION VARCHAR2(30)); |
这样plan_table就生成了,但是系统里还是没有plustrace这个role,别急,create role的脚本在?sqlplusadminplustrce.sql,在这里我非凡声明一下,我刚开始学oracle的时候总是不明白为什么前面是一个问号,后来才知道这个?号代表定位$ORACLE_HOME变量指定的路径,可能我比较菜吧。。。
言归正传,plustrace生成以后赋给public用于生成统计report,将plan_table的所有权限也赋予给public用于生成执行计划report
下面是关于autotrace参数的解释:
OPTION 说明
SET AUTOTRACE ON 同时输出执行结果以及统计信息和执行计划信息。
SET AUTOTRACE OFF 关闭执行计划和统计信息报表
SET AUTOTRACE ON EXPLAIN 只打开执行计划报销,显示命令结果,不显示统计信息。
SET AUTOTRACE ON STATISTICS 只打开统计信息报销,显示命令结果,不显示执行计划。
SET AUTOTRACE TRACEONLY 假如是这种形态的话不显示命令的执行结果,同时显示执行计划和统计信息,但是在traceonly的后面仍然可以追加explain或者statistics,等同于set autotrace on [explain|statistics]但是不显示执行结果
set blockterminator {.|c} |
定义表示结束PL/SQL块结束的字符。
set cmdsep{;|c|on|off} |
sqlplus的命令行区分字符,默认为off,也就是说只有回车才能输入下一条命令并开始执行,假如改为on状态的会自动设定成“;”, 就可以在一行内用“;”分隔多条sqlplus命令。类似于:
wupei@PYE.US.ORACLE.COM> show all; set autotrace off;set colsep{ |text} |
注释:列于列之间的分隔字符,可以用select语句来验证。