SELECT tablespace_name, status, contents, logging, extent_management, allocation_type
FROM dba_tablespaces
ORDER BY tablespace_name;
STATUS:ONLINE/OFFLINE/READ ONLY。CONTENTS:PERMANENT/TEMPORARY/UNDO。
-- 離線(維護/遷移前)
ALTER TABLESPACE users OFFLINE NORMAL; -- 無活躍事務
ALTER TABLESPACE users OFFLINE TEMPORARY; -- 有活躍事務,檢查點後離線
ALTER TABLESPACE users OFFLINE IMMEDIATE; -- 強制,需介質恢復上線
-- 上線
ALTER TABLESPACE users ONLINE;
-- 只讀(歸檔/審計/備份窗口)
ALTER TABLESPACE archive_data READ ONLY;
-- 恢復讀寫
ALTER TABLESPACE archive_data READ WRITE;
-- 1. 記錄文件路徑
SELECT file_name FROM dba_data_files WHERE tablespace_name = 'USERS';
-- 2. 離線表空間
ALTER TABLESPACE users OFFLINE NORMAL;
-- 3. OS層面移動文件
$ mv /u01/oradata/PROD/users01.dbf /u02/oradata/PROD/users01.dbf
-- 4. 重命名元數據
ALTER TABLESPACE users RENAME DATAFILE
'/u01/oradata/PROD/users01.dbf' TO '/u02/oradata/PROD/users01.dbf';
-- 5. 上線
ALTER TABLESPACE users ONLINE;
| 模式 | 命令 | 後續 |
|---|---|---|
| ARCHIVELOG | ALTER DATABASE DATAFILE '...' OFFLINE; | 上線自動恢復RECOVER DATAFILE |
| NOARCHIVELOG | ALTER DATABASE DATAFILE '...' OFFLINE DROP; | 上線不可用,需從備份恢復 |
-- 查詢當前管理模式
SELECT tablespace_name, extent_management, allocation_type
FROM dba_tablespaces;
-- 字典 → 本地(不可逆,SYSTEM/TEMP/SYSAUX禁止)
EXEC DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL('USERS');
-- 本地 → 字典(極少用,僅兼容極舊工具)
EXEC DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL('USERS');
注意:轉換期間表空間鎖定,建議維護窗口執行。
-- 僅刪除元數據(文件保留,極少用)
DROP TABLESPACE test_ts;
-- 刪除元數據+對象+數據文件(標準)
DROP TABLESPACE test_ts INCLUDING CONTENTS AND DATAFILES;
-- 強制刪除(有外鍵引用/分區表跨表空間)
DROP TABLESPACE test_ts INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
CREATE TABLE test_ts_verify (id NUMBER) TABLESPACE users;
INSERT INTO test_ts_verify VALUES (1);
COMMIT;
DROP TABLE test_ts_verify PURGE;
[ONLINE] ←→ [OFFLINE] ←→ [READ ONLY]
↑ ↑
(NORMAL) (IMMEDIATE需恢復)
↓
[DROP] (不可逆)
表空間狀態管理六步法:查 → 切 → 遷 → 文件級切 → 轉換 → 刪。核心原則:離線前必檢查活躍事務、遷移必驗證文件完整性、轉換不可逆必備份、刪除必確認無業務依賴。將上述命令封裝為ts_mgmt.sh腳本庫,實現標準化運維。