涵蓋 SQL*Plus 客製化、隨機數生成、OS 級效能指令、字典視圖查詢、錯誤追蹤、DB Link、字符集診斷、表空間資訊、內部用戶認證、Java 進程干擾——這些是 DBA 日常「查、改、監、修」的核心技能點。
-- 臨時生效 (當前 Session)
DEFINE _EDITOR = "C:\Program Files\Notepad++\notepad++.exe" -- Windows
DEFINE _EDITOR = "vim" -- Linux/Unix
-- 永久生效: 編輯 $ORACLE_HOME/sqlplus/admin/glogin.sql
-- 在檔案中加入:
DEFINE _EDITOR = "vim"
-- 之後輸入 EDIT 即啟動 vim 編輯緩衝區 SQL
注意:路徑含空格必須雙引號;Linux 建議 vim/nano,Windows 推薦 Notepad++/VS Code (需配置 code --wait)。
-- 1. DBMS_RANDOM 套件 (標準、功能豐富)
-- 整數隨機數
SELECT DBMS_RANDOM.RANDOM FROM dual; -- -2^31 ~ 2^31-1
-- 0~1 實數
SELECT DBMS_RANDOM.VALUE FROM dual;
-- 指定範圍實數
SELECT DBMS_RANDOM.VALUE(100, 200) FROM dual;
-- 指定範圍整數
SELECT TRUNC(DBMS_RANDOM.VALUE(1, 101)) FROM dual; -- 1~100
-- 隨機字串 (字母數字, 長度 10)
SELECT DBMS_RANDOM.STRING('X', 10) FROM dual; -- 'X'=大寫字母+數字, 'U'=大寫, 'L'=小寫, 'A'=大小寫混合, 'P'=可列印字元
-- 2. 12c+ 標準 SQL 函數 (無需 PL/SQL 上下文切換)
SELECT ORA_HASH('seed', 1000) FROM dual; -- 雜湊值 0~1000
-- 真正隨機需結合 SYSTIMESTAMP
SELECT DBMS_RANDOM.VALUE * 1000 FROM dual;
效能:DBMS_RANDOM 為 PL/SQL 呼叫,大量行 (百萬級) 建議在 PL/SQL 迴圈批量生成或使用 DBMS_RANDOM.SEED 固定種子以便重現。
| 資源 | 命令 | 關鍵指標 | 解讀 |
|---|---|---|---|
| 磁碟 I/O | iostat -xmt 5 或 sar -d 5 10 | %util (忙碌%), await (平均等待 ms), svctm (服務時間), %iowait | %util > 80% 或 await > 20ms → I/O 瓶頸 |
| CPU | sar -u 5 10 或 mpstat -P ALL 5 或 top -H | %user, %system, %iowait, %idle, runq-sz (運行隊列) | runq-sz > CPU 核心數 → CPU 飽和; %iowait 高 → I/O 等待非 CPU 問題 |
| 記憶體 | vmstat 5 10 或 free -h | si/so (swap in/out), wa (wait%), run queue (r) | si/so 持續 > 0 → 物理記憶體不足 |
| 網路 | sar -n DEV 5 10 | rxKB/s, txKB/s, rxerr/s, txerr/s | 錯誤率高 → 網卡/線纜/交換機故障 |
修正:原文 sar -r 為記憶體統計,非 CPU。CPU 用 sar -u。
-- 當前用戶對象
SELECT object_name, object_type, status, created, last_ddl_time
FROM user_objects
ORDER BY object_type, object_name;
-- 所有用戶對象 (需 DBA 權限)
SELECT owner, object_name, object_type, status
FROM dba_objects
WHERE owner NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP','APPQOSSYS')
ORDER BY owner, object_type, object_name;
-- 區段資訊 (含大小、表空間)
SELECT owner, segment_name, segment_type, tablespace_name, bytes/1024/1024 AS size_mb
FROM dba_segments
WHERE owner = 'APP_USER'
ORDER BY bytes DESC;
-- 當前用戶程式單元錯誤
SELECT name, type, sequence, line, text, attribute, message_number
FROM user_errors
ORDER BY name, type, sequence, line;
-- 所有用戶錯誤
SELECT owner, name, type, line, text
FROM dba_errors
WHERE owner = 'APP_USER';
-- 快速編譯失效物件
BEGIN
FOR r IN (SELECT object_name, object_type FROM user_objects WHERE status = 'INVALID') LOOP
EXECUTE IMMEDIATE 'ALTER ' || r.object_type || ' ' || r.object_name || ' COMPILE';
END LOOP;
END;
/
-- 定義的 DB Links
SELECT owner, db_link, username, host, created
FROM dba_db_links;
-- 測試連通性
SELECT * FROM dual@remote_db_link; -- 成功返回 1 行
-- 或
SELECT SYSDATE FROM dual@remote_db_link;
-- 使用中的 DB Link Session (V$DBLINK 需 11g+)
SELECT * FROM v$dblink;
-- 資料庫字符集 (儲存編碼)
SELECT parameter, value FROM nls_database_parameters
WHERE parameter IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
-- 實例參數 (Session 預設)
SELECT parameter, value FROM v$nls_parameters
WHERE parameter IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET','NLS_LANGUAGE','NLS_TERRITORY');
-- 當前 Session 字符集 (受 NLS_LANG 影響)
SELECT userenv('language') FROM dual;
-- 輸出: AMERICAN_AMERICA.ZHS16GBK
亂碼診斷三步曲:1) 資料庫字符集 2) 客戶端 NLS_LANG 3) 應用/驅動程式字符集 —— 三者必須一致或相容 (子集→超集)。
-- 資料檔詳細
SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb,
autoextensible, maxbytes/1024/1024 AS max_mb, online_status
FROM dba_data_files
ORDER BY tablespace_name, file_id;
-- 表空間使用率彙總 (含臨時/Undo)
SELECT tablespace_name,
ROUND(SUM(bytes)/1024/1024,2) total_mb,
ROUND(SUM(CASE WHEN autoextensible='YES' THEN maxbytes ELSE bytes END)/1024/1024,2) max_mb
FROM dba_data_files
GROUP BY tablespace_name;
INTERNAL 為 8i 前等同 SYS AS SYSDBA 的特殊連接方式。9i+ 已移除 INTERNAL,統一用 SYS AS SYSDBA。
若遇 ORA-01031: insufficient privileges 以 SYS 登入,檢查 SQLNET.ORA:
# 移除或註釋 NTS 驗證,強制密碼檔認證
# SQLNET.AUTHENTICATION_SERVICES = (NTS)
SQLNET.AUTHENTICATION_SERVICES = (NONE) -- 僅密碼檔
並確認 $ORACLE_HOME/dbs/orapwSID 密碼檔存在、REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE。
Oracle 8i/9i 安裝 JVM 後,OracleHTTPServer (iAS/Apache) 可能啟動 java.exe 進程處理 JSP/Servlet。
現象:大量 java.exe 佔用記憶體/CPU,非資料庫核心進程。
解法:
OracleOraHome90HTTPServer (Home 名稱含版本) → 啟動類型 = 手動。-Xms -Xmx)、限制線程池、監控 GC 日誌。關鍵:資料庫本身不依賴 java.exe (除非啟用 Java Stored Procedure / XML DB / Spatial),純 OLTP 可安全停用。
第 4 期 10 題聚焦「工具配置、OS 監控、字典查詢、認證機制、元件隔離」。建議將每題轉化為可執行的「單頁操作卡」:命令、預期輸出、異常判斷、升級處理,印製或電子化隨身攜帶,現場故障「查卡、跑命令、定根因、出報告」一氣呵成。