首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL*Plus 實戰手冊:68 個 SET 參數、編輯命令、腳本自動化、性能調優專用設置

     編輯:Oracle 資料庫相關知識

SQL*Plus 是 Oracle DBA/開發者的「瑞士軍刀」,掌握其環境設置、緩衝區編輯、腳本生成、輸出格式化、性能調試五大核心能力,能將日常操作效率提升 10 倍。本文匯總 68 個 SET 參數精華、編輯命令速查表、自動化腳本模板、調優專用設置。

一、高頻 SET 參數速查表(按功能分組)

分組命令默認值說明與推薦值
輸出格式SET LINESIZE 1000100行寬,防換行截斷,建議 1000-32767
SET PAGESIZE 20014頁長,0=不分頁,建議 1000 或 0
SET HEADING OFFON隱藏列標題,生成腳本/CSV 時關閉
SET FEEDBACK OFFON (6行)隱藏「已選擇 N 行」反饋,腳本靜默執行
SET TRIMSPOOL ONOFF去除行尾空格,Spool 文件更乾淨
SET TRIMOUT ONOFF去除輸出行尾空格
SET WRAP OFFON長行截斷不換行,配合 LINESIZE 使用
SET COLSEP '|'單空格列分隔符,生成 CSV 管道符
性能調試SET TIMING ONOFF顯示每條語句執行耗時(牆鐘時間)
SET TIME ONOFF顯示當前時間戳
SET AUTOTRACE TRACEONLY EXPLAINOFF僅顯示執行計劃不執行,調優首選
SET AUTOTRACE TRACEONLY STATISTICSOFF執行並顯示統計(邏輯讀、物理讀、Redo 大小等)
SET AUTOTRACE ONOFF執行+計劃+統計
SET SQLPROMPT '_USER'@'_CONNECT_IDENTIFIER> 'SQL> 自定義提示符,顯示用戶@實例
事務控制SET AUTOCOMMIT OFFOFF關閉自動提交,手動控制事務邊界
SET AUTOCOMMIT ONOFF每條 DML 自動提交(慎用)
SET AUTOCOMMIT 5OFF每 5 條 DML 自動提交(批量載入)
SET PAUSE ONOFF分頁暫停,按 Enter 翻頁
SET ESCAPE '\'OFF轉義字符,處理 & 變量衝突

二、緩衝區編輯命令(SQL*Plus 內置行編輯器)

L[IST] [n|m n]        -- 列出緩衝區全部/指定行,* 標記當前行
A[PPEND] text         -- 在當前行末追加文本
C[HANGE] /old/new     -- 當前行替換
C[HANGE] /text        -- 當前行刪除文本
I[NPUT] [text]        -- 當前行後插入新行
DEL [n|m n]           -- 刪除當前行/指定行
RUN 或 /              -- 執行緩衝區命令
SAVE filename [CRE[PLACE]|APP[END]]  -- 保存緩衝區為 .sql
GET filename          -- 載入 .sql 到緩衝區
START filename 或 @filename  -- 執行腳本文件
@@filename            -- 在腳本中調用另一腳本(相對路徑)

三、變量與替換技巧

DEFINE var = 'value'        -- 定義替換變量
UNDEFINE var                -- 刪除變量
SELECT &var FROM dual;      -- 使用 & 觸發替換
SELECT &&var FROM dual;     -- 雙 & 只提示一次,複用值
ACCEPT var PROMPT 'Enter: ' -- 交互式輸入
COLUMN col NEW_VALUE var    -- 查詢結果賦值給變量(報表常用)

四、Spool 輸出與報表生成

SPOOL file.lst [CRE|APP|OFF]  -- 開啟/關閉/追加輸出
-- 典型報表生成流程
SET HEADING OFF FEEDBACK OFF TRIMSPOOL ON LINESIZE 3000 PAGESIZE 0
SPOOL tables.csv
SELECT table_name || ',' || num_rows || ',' || blocks FROM user_tables;
SPOOL OFF

五、自動化腳本模板:批量授權/同義詞/重建視圖

-- gen_grants.sql
SET HEADING OFF FEEDBACK OFF PAGESIZE 0 TRIMSPOOL ON
SPOOL grants.sql
SELECT 'GRANT SELECT ON ' || table_name || ' TO app_readonly;'
FROM user_tables
WHERE table_name NOT LIKE 'TMP_%';
SPOOL OFF
@grants.sql

-- recompile_views.sql
SPOOL recompile.sql
SELECT 'ALTER VIEW ' || view_name || ' COMPILE;' FROM user_views;
SPOOL OFF
@recompile.sql

六、性能調優專用會話設置

-- 會話級調優環境
ALTER SESSION SET STATISTICS_LEVEL = ALL;
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';  -- 10046 追蹤
-- 或
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(waits=>TRUE, binds=>TRUE);

-- 執行目標 SQL
-- ...

-- 關閉追蹤
EXEC DBMS_MONITOR.SESSION_TRACE_DISABLE;
-- 用 TKPROF 分析
-- tkprof trace.trc output.txt sys=no sort=prsela,exeela,fchela

七、常用別名與便捷函數

-- 登錄後自動執行 login.sql (放在 SQLPATH 目錄)
DEFINE _EDITOR = notepad++
SET SQLPROMPT '_USER'@'_CONNECT_IDENTIFIER> '
SET LINESIZE 200 PAGESIZE 1000 TRIMSPOOL ON TIMING ON
COLUMN plan_plus_exp FORMAT A100
-- 自定義函數:顯示表大小
CREATE OR REPLACE FUNCTION show_table_size(p_table VARCHAR2) RETURN VARCHAR2 AS
  v_size NUMBER;
BEGIN
  SELECT bytes/1024/1024 INTO v_size FROM user_segments WHERE segment_name = UPPER(p_table) AND segment_type = 'TABLE';
  RETURN p_table || ': ' || ROUND(v_size,2) || ' MB';
END;
/
-- 使用
SELECT show_table_size('EMP') FROM dual;

八、避坑提醒

  1. SET LONG 1000000 查看 CLOB 完整內容(如 SQL_FULLTEXT、HIGH_VALUE)。
  2. SET NUMWIDTH 20 防止數字科學計數法顯示截斷。
  3. SET ESCAPE ON 避免 & 被誤識別為替換變量(如密碼含 &)。
  4. Windows 下 @script.sql 路徑含空格需加雙引號:@"D:\My Scripts\run.sql"。
  5. EXIT vs QUIT:EXIT 可帶返回碼(EXIT :SQL.SQLCODE),適合 Shell 判斷。

將上述設置固化為個人 login.sql(放在 SQLPATH 環境變量指向的目錄),每次啟動 SQL*Plus 自動加載,打造專屬「高效調優工作台」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved