SYS 用戶下的基表 + 公開視圖(DBA_/ALL_/USER_ 前綴)。UPPER() 匹配。-- 所有字典表/視圖名稱與說明
SELECT * FROM dictionary; -- 同義詞 dict
-- 字典表列名稱與說明
SELECT * FROM dict_columns; -- 同義詞 dict_cols
SELECT * FROM dictionary WHERE INSTR(UPPER(comments), 'INDEX') > 0;
SELECT column_name, comments
FROM dict_columns
WHERE table_name = 'USER_INDEXES';
-- 當前用戶默認表空間
SELECT username, default_tablespace FROM user_users;
-- 當前用戶角色
SELECT * FROM user_role_privs;
-- 系統權限
SELECT * FROM user_sys_privs;
-- 表級權限
SELECT * FROM user_tab_privs;
-- 所有表
SELECT * FROM user_tables;
-- 名稱含 LOG 的對象
SELECT object_name, object_id FROM user_objects WHERE INSTR(UPPER(object_name), 'LOG') > 0;
-- 表創建時間
SELECT object_name, created FROM user_objects WHERE object_name = UPPER('&table_name');
-- 表大小 (MB)
SELECT SUM(bytes)/1024/1024 AS size_mb FROM user_segments WHERE segment_name = UPPER('&table_name');
-- 緩存區保留的表
SELECT table_name, cache FROM user_tables WHERE INSTR(cache, 'Y') > 0;
-- 索引名、類型、所屬表
SELECT index_name, index_type, table_name FROM user_indexes ORDER BY table_name;
-- 索引包含的列
SELECT * FROM user_ind_columns WHERE index_name = UPPER('&index_name');
-- 索引大小
SELECT SUM(bytes)/1024/1024 AS size_mb FROM user_segments WHERE segment_name = UPPER('&index_name');
SELECT * FROM user_sequences; -- LAST_NUMBER 為當前值
-- 視圖名
SELECT view_name FROM user_views;
-- 視圖定義 SQL(長文本)
SET LONG 20000
SELECT text FROM user_views WHERE view_name = UPPER('&view_name');
SELECT * FROM user_synonyms;
-- 表的約束詳情
SELECT constraint_name, constraint_type, search_condition, r_constraint_name
FROM user_constraints
WHERE table_name = UPPER('&table_name');
-- 約束涉及的列(帶位置)
SELECT c.constraint_name, c.constraint_type, cc.column_name, cc.position
FROM user_constraints c
JOIN user_cons_columns cc ON c.owner = cc.owner AND c.constraint_name = cc.constraint_name
WHERE c.table_name = UPPER('&table_name')
ORDER BY cc.position;
-- 對象狀態
SELECT object_name, status FROM user_objects WHERE object_type = 'FUNCTION';
SELECT object_name, status FROM user_objects WHERE object_type = 'PROCEDURE';
SELECT object_name, status FROM user_objects WHERE object_type = 'PACKAGE';
SELECT object_name, status FROM user_objects WHERE object_type = 'PACKAGE BODY';
-- 源代碼
SELECT text FROM all_source WHERE owner = USER AND name = UPPER('&plsql_name') ORDER BY line;
-- 導出某用戶所有表 DDL
SET LONG 1000000 PAGESIZE 0 LINESIZE 32767 FEEDBACK OFF HEADING OFF
SELECT DBMS_METADATA.GET_DDL('TABLE', table_name) FROM user_tables;
-- 導出完整 Schema
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', FALSE);
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'TABLESPACE', FALSE);
SELECT DBMS_METADATA.GET_DDL('SCHEMA', USER) FROM dual;
USER_SEGMENTS 同理,注意 BYTES 為段分配空間,非實際數據大小。USER_VIEWS.TEXT、ALL_SOURCE.TEXT、DBMS_METADATA 輸出前必設。Oracle 數據字典是數據庫的「說明書」,熟練使用 DICTIONARY、DICT_COLUMNS、USER_/ALL_/DBA_ 三層視圖體系、DBMS_METADATA 逆向工程、SET LONG 長文本處理,能讓 DBA 和開發在無文檔、無圖形工具的純命令行環境下,依然高效完成對象探索、結構對比、權限審計、DDL 導出等核心任務。建議將常用查詢封裝為個人 sql_snippets 库,構建屬於自己的「字典查詢工具箱」。