格式化SHOW PARAMETER命令

yangtingkun發表於2010-11-17

以前發現透過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部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-678384/,如需轉載,請註明出處,否則將追究法律責任。

相關文章