專案部署、環境重置、測試資料刷新常需「刪除舊用戶/表空間 → 重建新用戶/表空間 → 授權」。本文提供標準化、可直接執行的操作腳本與關鍵參數說明,適用 Windows/Linux 環境 (路徑自行調整)。
-- 1. 以 SYSDBA 登入
CONN / AS SYSDBA
-- 2. 刪除用戶 (CASCADE 級聯刪除所有物件)
DROP USER eqm CASCADE;
-- 3. 刪除表空間 (含內容、資料檔、外鍵約束)
DROP TABLESPACE eqm INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
-- 4. 若報錯「表空間仍被使用」,查詢佔用段並處理
SELECT DISTINCT owner, segment_name, segment_type
FROM dba_extents
WHERE tablespace_name = 'EQM';
-- 依查詢結果 DROP 相關物件後再執行步驟 3
-- 5. 建立表空間 (自動擴展、本地管理)
CREATE TABLESPACE eqm
LOGGING
DATAFILE 'D:\oracle\product\10.2.0\oradata\EQM.DBF' -- Linux 路徑如 /u01/app/oracle/oradata/EQM.dbf
SIZE 4096M
AUTOEXTEND ON NEXT 150M MAXSIZE 20480M
EXTENT MANAGEMENT LOCAL;
-- 6. 建立暫存表空間 (建議分離)
CREATE TEMPORARY TABLESPACE eqm_temp
TEMPFILE 'D:\oracle\product\10.2.0\oradata\EQM_TEMP.dbf'
SIZE 1024M
AUTOEXTEND ON NEXT 100M MAXSIZE 4096M
EXTENT MANAGEMENT LOCAL;
-- 7. 建立用戶並指定預設/暫存表空間
CREATE USER eqm IDENTIFIED BY eqm
DEFAULT TABLESPACE eqm
TEMPORARY TABLESPACE eqm_temp;
-- 8. 授予 DBA 權限 (生產環境請依最小權限原則精細授權)
GRANT DBA TO eqm;
-- 9. (可選) 授予無限制表空間額度
ALTER USER eqm QUOTA UNLIMITED ON eqm;
| 子句 | 用途 | 建議值/備註 |
|---|---|---|
INCLUDING CONTENTS | 刪除表空間內所有段 | 必加,否則非空表空間無法刪除 |
AND DATAFILES | 同步刪除 OS 層資料檔 | 必加,避免殘留孤兒檔案 |
CASCADE CONSTRAINTS | 刪除參考此表空間表的外鍵 | 必加,避免外鍵阻礙刪除 |
AUTOEXTEND ON | 資料檔自動擴展 | 生產環境建議開啟,設定 MAXSIZE 防止撐爆磁碟 |
EXTENT MANAGEMENT LOCAL | 本地管理極區 (位圖) | 10g+ 預設且強制,效能優於字典管理 |
TEMPORARY TABLESPACE | 指定用戶暫存表空間 | 分離排序/雜湊操作,避免佔用永久表空間 |
V$SESSION 找出持有該用戶物件鎖的 Session,KILL 後再試。ALTER DATABASE DATAFILE '...' OFFLINE DROP; 再 DROP TABLESPACE ... INCLUDING CONTENTS; (參考文章 49279)。chown oracle:oinstall、chmod 750)。GRANT DBA,改用角色組合:GRANT CONNECT, RESOURCE, CREATE VIEW, CREATE PROCEDURE, ... 並配合 QUOTA 限制。DATAFILE '/u01/app/oracle/oradata/ORCL/eqm01.dbf'
TEMPFILE '/u01/app/oracle/oradata/ORCL/eqm_temp01.dbf'
建議使用 OMF (Oracle Managed Files) 簡化檔案管理:DB_CREATE_FILE_DEST 參數設定後可省略 DATAFILE 子句。