SELECT uo.object_name, uo.object_id, lo.oracle_username, lo.locked_mode
FROM user_objects uo, v$locked_object lo
WHERE uo.object_id = lo.object_id;
SELECT * FROM nls_database_parameters;
SELECT * FROM all_objects WHERE object_name = UPPER('tname');
SELECT segment_name, ROUND(SUM(bytes)/1024/1024, 0) "MBytes"
FROM user_extents
GROUP BY segment_name
ORDER BY "MBytes" DESC;
SELECT * FROM dba_ddl_locks WHERE owner = 'USERNAME';
SELECT a.tablespace_name,
ROUND(a.bytes/(1024*1024),2) "Total MB",
ROUND(b.bytes/(1024*1024),2) "Used MB",
ROUND(c.bytes/(1024*1024),2) "Free MB",
ROUND((b.bytes*100)/a.bytes,2) || '%' "% Used",
ROUND((c.bytes*100)/a.bytes,2) || '%' "% Free"
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c
WHERE a.tablespace_name = b.tablespace_name
AND a.tablespace_name = c.tablespace_name;
註:10g 以上建議使用 DBA_TABLESPACE_USAGE_METRICS 或 DBA_FREE_SPACE + DBA_DATA_FILES 組合查詢,兼容性更好。
-- 加鎖
LOCK TABLE dept IN SHARE MODE;
-- 查找持有鎖的會話
SELECT sid, serial#, username, osuser FROM v$session WHERE sid IN (SELECT session_id FROM v$locked_object);
-- 正常殺會話
ALTER SYSTEM KILL SESSION 'sid,serial#';
-- 例: ALTER SYSTEM KILL SESSION '131,33574';
當 KILL SESSION 只標記不立即釋放資源時,在 OS 層面強制終止:
-- 查找被標記 KILLED 會話的 OS 進程號 (SPID)
SELECT 'kill -9 ' || a.spid "OS_KILL_CMD"
FROM v$process a, v$session b
WHERE a.addr = b.paddr
AND b.status = 'KILLED';
在 Linux/Unix 執行輸出的命令;Windows 使用 ORAKILL SID SPID。
ALTER TABLESPACE bgtablespace01
ADD DATAFILE '/opt/oracle/oradata/orcl/bgtablespace01/bgtablespace0190.dbf' SIZE 5120M;
ALTER USER user_name DEFAULT TABLESPACE bgtablespace01;
❌ 慢寫法(全表更新,耗時數小時):
ALTER TABLE tab_large ADD col_new NUMBER(9) DEFAULT 1;
✅ 快寫法(元數據操作,秒級完成):
ALTER TABLE tab_large ADD col_new NUMBER(9);
ALTER TABLE tab_large MODIFY col_new DEFAULT 1;
原理:11g 起優化,ADD COLUMN DEFAULT 僅修改字典,不更新現有行。若需回填歷史數據,事後分批 UPDATE 即可。
CREATE USER sjzq IDENTIFIED BY sjzq123
DEFAULT TABLESPACE BGTABLESPACE01
TEMPORARY TABLESPACE Temp;
GRANT CONNECT TO sjzq;
GRANT SELECT ON abc.tname TO sjzq;