整理實務高頻查詢:分頁模板、資料字典瀏覽、系統參數檢視、實例/資料庫資訊、字符集/時間/用戶/權限等,附帶 iBATIS/PreparedStatement 參數化分頁寫法。
-- 標準三層 ROWNUM (10g/11g)
SELECT * FROM (
SELECT A.*, ROWNUM RN FROM (
SELECT * FROM YOUR_TABLE WHERE CONDITIONS ORDER BY SORT_COL
) A WHERE ROWNUM <= :END_ROW
) WHERE RN > :START_ROW;
-- iBATIS 參數化範例
String sql = "SELECT * FROM " + tableName;
String pageSql = "SELECT * FROM (SELECT A.*, ROWNUM RN FROM (" + sql + ") A WHERE ROWNUM <= ?) WHERE RN > ?";
PreparedStatement ps = conn.prepareStatement(pageSql);
ps.setInt(1, pageIndex * pageSize); // endRow
ps.setInt(2, (pageIndex - 1) * pageSize); // startRow
| 需求 | SQL |
|---|---|
| 所有表名 (含其他用戶) | SELECT TABLE_NAME FROM ALL_TABLES; |
| 當前用戶所有表 | SELECT TABLE_NAME FROM USER_TABLES; |
| 所有用戶物件 | SELECT * FROM USER_OBJECTS; |
| 指定表結構 (欄位、型別、長度) | DESC TABLE_NAME; 或 SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME='...'; |
| 所有使用者 | SELECT * FROM ALL_USERS; / DBA_USERS (需權限) |
| 當前用戶 | SHOW USER; |
| 資料庫名稱與 DBID | SELECT NAME, DBID FROM V$DATABASE; |
| 實例名稱 | SELECT INSTANCE_NAME FROM V$INSTANCE; |
-- 顯示參數 (支援模糊)
SHOW PARAMETER DB;
SHOW PARAMETER DOMAIN;
SHOW PARAMETER SERVICE_NAME;
-- SQL 查詢參數
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME LIKE '%DB%';
-- 域名
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'DB_DOMAIN';
-- 服務名
SHOW PARAMETER SERVICE_NAME;
-- 當前時間
SELECT SYSDATE FROM DUAL;
-- 字符集相關參數
SELECT * FROM V$NLS_PARAMETERS;
-- 或
SELECT * FROM NLS_DATABASE_PARAMETERS; -- 資料庫層級
SELECT * FROM NLS_INSTANCE_PARAMETERS; -- 實例層級
SELECT * FROM NLS_SESSION_PARAMETERS; -- 會話層級
SQLPLUS "/ AS SYSDBA"
-- 或
SQLPLUS SYS/PASSWORD AS SYSDBA
-- 表空間使用率
SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES)/1024/1024,2) TOTAL_MB,
ROUND(SUM(DECODE(AUTOEXTENSIBLE,'YES',MAXBYTES,BYTES))/1024/1024,2) MAX_MB
FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME;
-- 空間剩餘
SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 FREE_MB
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;
-- 被阻塞會話
SELECT S.SID, S.SERIAL#, S.USERNAME, S.MACHINE, S.PROGRAM,
BLOCKING_SESSION, BLOCKING_SESSION_STATUS
FROM V$SESSION S WHERE BLOCKING_SESSION IS NOT NULL;
-- 鎖定物件
SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, L.LMODE, L.REQUEST
FROM V$LOCKED_OBJECT O
JOIN V$SESSION S ON O.SESSION_ID = S.SID
JOIN V$LOCK L ON S.SID = L.SID;
SELECT SQL_ID, ELAPSED_TIME/1E6 ELAPSED_SEC, EXECUTIONS,
ELAPSED_TIME/1E6/EXECUTIONS AVG_SEC, SQL_TEXT
FROM V$SQL
WHERE EXECUTIONS > 0
ORDER BY ELAPSED_TIME/EXECUTIONS DESC
FETCH FIRST 20 ROWS ONLY;
V$ 視圖需 SELECT_CATALOG_ROLE 或 DBA 權限ALL_ 視圖顯示可存取物件,USER_ 僅當前用戶,DBA_ 全庫 (需權限)V$SQL/V$SESSION 等動態視圖時建議加 WHERE 條件限制範圍FETCH FIRST N ROWS ONLY 替代 ROWNUM