以前发现通过COLUMN命令没有办法像格式化SQL查询结果那样格式化SHOW PARAMETER命令的结果。没想到测试审计SYS操作时意外发现了这个问题的答案。
审计DBA用户操作:http://yangtingkun.itpub.net/post/468/508790
可以看到,正常的COLUMN语句对于show parameter命令无效:
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /data/oracle/product/11.2/dbs/
spfiletest112.ora
SQL> col name format a15
SQL> col value format a50
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /data/oracle/product/11.2/dbs/
spfiletest112.ora
从上一篇文章可以看到,由于SYS用户执行了show parameter命令,从而在审计日志中得到了sqlplus执行的命令:
Mon Nov 15 22:43:50 2010
ACTION : 'SELECT NAME NAME_COL_PLUS_SHOW_PARAM,DECODE(TYPE,1,'boolean',2,'string',3,'integer',4,'file',5,'number', 6,'big int
eger', 'unknown') TYPE,DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%audit_file_dest%') OR
DER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/1
STATUS: 0
根据show parameter的真实语句,很容易就可以用column命令来格式化show parameter的输出结果了:
SQL> col name_col_plus_show_param format a15
SQL> col value_col_plus_show_param format a50
SQL> show parameter spfile
NAME TYPE VALUE
--------------- ----------- --------------------------------------------------
spfile string /data/oracle/product/11.2/dbs/spfiletest112.ora
这里还有一个问题,SQL语句将NAME列命名为NAME_COL_PLUS_SHOW_PARAM,为什么最终显示的仍然是NAME呢,显然在其他地方对这个结果进行了处理。
而这个地方最可能就是glogin.sql:
[oracle@yans1 ~]$ cd $ORACLE_HOME/sqlplus/admin
[oracle@yans1 admin]$ more glogin.sql
--
-- Copyright (c) 1988, 2004, Oracle Corporation. All Rights Reserved.
--
-- NAME
-- glogin.sql
--
-- DESCRIPTION
-- SQL*Plus global login "site profile" file
--
-- Add any SQL*Plus commands here that are to be executed when a
-- user starts SQL*Plus, or uses the SQL*Plus CONNECT command
--
-- USAGE
-- This script. is automatically run
--
-- Used by Trusted Oracle
COLUMN ROWLABEL FORMAT A15
-- Used for the SHOW ERRORS command
COLUMN LINE/COL FORMAT A8
COLUMN ERROR FORMAT A65 WORD_WRAPPED
-- Used for the SHOW SGA command
COLUMN name_col_plus_show_sga FORMAT a24
COLUMN units_col_plus_show_sga FORMAT a15
-- Defaults for SHOW PARAMETERS
COLUMN name_col_plus_show_param FORMAT a36 HEADING NAME
COLUMN value_col_plus_show_param FORMAT a30 HEADING VALUE
-- Defaults for SHOW RECYCLEBIN
COLUMN origname_plus_show_recyc FORMAT a16 HEADING 'ORIGINAL NAME'
COLUMN objectname_plus_show_recyc FORMAT a30 HEADING 'RECYCLEBIN NAME'
COLUMN objtype_plus_show_recyc FORMAT a12 HEADING 'OBJECT TYPE'
COLUMN droptime_plus_show_recyc FORMAT a19 HEADING 'DROP TIME'
-- Defaults for SET AUTOTRACE EXPLAIN report
-- These column definitions are only used when SQL*Plus
-- is connected to Oracle 9.2 or earlier.
COLUMN id_plus_exp FORMAT 990 HEADING i
COLUMN parent_id_plus_exp FORMAT 990 HEADING p
COLUMN plan_plus_exp FORMAT a60
COLUMN object_node_plus_exp FORMAT a8
COLUMN other_tag_plus_exp FORMAT a29
COLUMN other_plus_exp FORMAT a44
-- Default for XQUERY
COLUMN result_plus_xquery HEADING 'Result Sequence'
通过观察这个glogin.sql文件这个问题一目了然了,而show sga等命令和show parameter是同样的道理。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-678384/ ,如需转载,请注明出处,否则将追究法律责任。