承接基礎題,本文精選 Oracle DBA 面試進階高頻題 23-50 號,涵蓋 PL/SQL 封裝、對象類型區別、統計收集、審計、物化視圖、後台進程職責、動態視圖、Redo Log 管理、DDL 審計、索引重建、分區、編譯錯誤、ANALYZE、SQL TRACE、導入工具差異、網絡配置文件,附標準答案與考點解析。
| # | 問題 | 標準答案 | 考點解析 |
|---|---|---|---|
| 23 | 如何加密 PL/SQL 程序? | WRAP 工具 (wrap iname=xxx.pls oname=xxx.plb) | 源碼保護,生成可執行二進制文件,不可逆 |
| 24 | FUNCTION、PROCEDURE、PACKAGE 區別 | Function 必須返回值,Procedure 無返回值,Package 是相關 Function/Procedure 的邏輯集合,支持封裝、重載、狀態保持 | 模塊化編程基礎,Package 為企業級開發標準 |
| 25 | TABLE FUNCTION 用途 | 通過 PL/SQL 邏輯返回行集合,可像表/視圖一樣在 FROM 子句中查詢,用於管道流、ETL 轉換 | PIPELINED 關鍵字實現流式處理,減少內存佔用 |
| 26 | 三種收集統計信息的建議 | Buffer Cache Advice、Segment Level Statistics、Timed Statistics | 對應 DB_CACHE_ADVICE、STATISTICS_LEVEL、TIMED_STATISTICS 參數 |
| 27 | Audit trace 存放目錄 | Unix: $ORACLE_HOME/rdbms/audit;Windows: 事件查看器 | AUDIT_TRAIL 參數控制 (DB/OS/XML/NONE) |
| 28 | Materialized View 作用 | 預計算彙總/分組/連接結果,加速數據倉庫/DSS 查詢,支持增量刷新 (FAST REFRESH) | 查詢重寫 (QUERY_REWRITE_ENABLED) 自動重定向 |
| 29 | 用戶進程出錯,哪個後台進程清理? | PMON (Process Monitor) | 釋放鎖、回滾未提交事務、清理 PGA、重新註冊服務 |
| 30 | 哪個後台進程刷新 Materialized View? | Job Queue Processes (Jnnn / CJQ0) | JOB_QUEUE_PROCESSES > 0 才會自動刷新 |
| 31 | 如何判斷哪個 Session 正在等待什麼資源? | V$SESSION / V$SESSION_WAIT (或 V$SESSION_WAIT_HISTORY) | 關鍵列: SID, EVENT, SECONDS_IN_WAIT, P1/P2/P3, BLOCKING_SESSION |
| 32 | 什麼是 Redo Logs? | 記錄數據庫所有變更的物理/邏輯結構,用於實例恢復、介質恢復、Data Guard 同步 | 循環寫入,組/成員多路鏡像,LGWR 寫入觸發 COMMIT 完成 |
| 33 | 如何強制 Log Switch? | ALTER SYSTEM SWITCH LOGFILE; | 手動觸發歸檔、均衡 Redo 分佈、備份前切換 |
| 34 | 判斷 DDL 變更的兩種方法 | LogMiner (分析歸檔/聯機日志)、Streams (捕獲 DDL LCR) | LogMiner 適合事後審計,Streams 適合實時捕獲複製 |
| 35 | Coalescing 做什麼? | 針對字典管理表空間 (Dictionary Managed Tablespace) 合併相鄰空閒區 (Extents) 形成大區,減少碎片 | 局部管理表空間 (LMT) 自動管理,無需手動 COALESCE |
| 36 | Temporary vs Permanent Tablespace 差異 | Temporary: 排序、哈希、臨時表、中間結果;Permanent: 持久對象 (表、索引、Undo 段) | 臨時表空間不產生 Redo,分配/釋放極快 |
| 37 | 創建數據庫時自動建立的 Tablespace | SYSTEM | 存放數據字典、系統回滾段 (10g+ 改用 SYSAUX/UNDO) |
| 38 | 創建用戶需授予什麼權限才能連接? | CREATE SESSION (通常通過 GRANT CONNECT 間接授予) | 10g+ CONNECT 角色僅含 CREATE SESSION |
| 39 | 如何給 Tablespace 增加數據文件? | ALTER TABLESPACE | 在線操作,無需停機 |
| 40 | 如何調整數據文件大小? | ALTER DATABASE DATAFILE ' | 縮小需高水位標記以下,否則報 ORA-03297 |
| 41 | 哪個 View 查數據文件大小? | DBA_DATA_FILES (或 V$DATAFILE) | 列: FILE_ID, TABLESPACE_NAME, FILE_NAME, BYTES, AUTOEXTENSIBLE |
| 42 | 哪個 View 判斷 Tablespace 剩餘空間? | DBA_FREE_SPACE (配合 DBA_DATA_FILES 計算總/已用/剩餘) | 常用查詢: SELECT tablespace_name, SUM(bytes)/1024/1024 free_mb FROM dba_free_space GROUP BY tablespace_name |
| 43 | 如何判斷誰向表插入了一行? | 啟用審計: AUDIT INSERT ON table_name BY ACCESS; 查 DBA_AUDIT_TRAIL | 細粒度審計 (FGA) 可加條件 |
| 44 | 如何重建索引? | ALTER INDEX | ONLINE 允許 DML 並發,PARALLEL 加速 |
| 45 | 什麼是 Partitioning?優點? | 將大表/索引按範圍/列表/哈希/間隔分割為多個分區,優點: 分區裁剪、分區級維護、分區級備份、並行度提升、歷史數據歸檔 | 分區鍵選擇決定裁剪效果 |
| 46 | PL/SQL Package 編譯報錯如何顯示錯誤? | SHOW ERRORS 或 SELECT * FROM USER_ERRORS WHERE NAME = 'PKG_NAME'; | 編譯警告不阻塞,錯誤導致對象 INVALID |
| 47 | 如何收集表的統計信息? | ANALYZE TABLE ... COMPUTE STATISTICS (舊) / DBMS_STATS.GATHER_TABLE_STATS (推薦, 10g+) | DBMS_STATS 支持並行、增量、直方圖、發布/鎖定統計 |
| 48 | 如何啟用 Session 級 SQL Trace? | DBMS_SESSION.SET_SQL_TRACE(TRUE) 或 ALTER SESSION SET SQL_TRACE = TRUE; 或事件 10046 | 生成 .trc 文件,TKPROF 格式化分析 |
| 49 | IMPORT vs SQL*Loader 差異 | IMP 只能導入 EXP 導出的 .dmp 文件;SQL*Loader 可導入各種 ASCII/CSV/定長格式文本文件,性能更高 (直路徑/並行) | SQL*Loader 是大數據加載首選 |
| 50 | 網絡連接用到哪兩個文件? | TNSNAMES.ORA (服務名映射) 和 SQLNET.ORA (客戶端網絡參數: 域、超時、加密、命名方法) | 還有 LISTENER.ORA (服務端監聽配置) |
23-50 題覆蓋 PL/SQL 封裝、統計/審計/物化視圖、後台進程分工、動態視圖診斷、Redo/分區/索引管理、編譯錯誤、TRACE、導入工具選型、網絡配置。掌握標準答案並能展開實戰細節,是資深 DBA 面試的核心競爭力。