CREATE DATABASE prod_db
...
UNDO TABLESPACE undotbs1
DATAFILE '/u01/oradata/prod/undo01.dbf' SIZE 1G AUTOEXTEND ON MAXSIZE 4G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
注意:若UNDO_MANAGEMENT=AUTO且未指定UNDO TABLESPACE,Oracle自動創建SYS_UNDOTBS,名稱不可控、大小不可預期,生產環境務必顯式指定。
CREATE UNDO TABLESPACE undotbs2
DATAFILE '/u01/oradata/prod/undo02.dbf' SIZE 2G AUTOEXTEND ON MAXSIZE 8G;
使用ALTER TABLESPACE / ALTER DATABASE:
| 操作 | 語法示例 | 適用場景 |
|---|---|---|
| 增加數據文件 | ALTER TABLESPACE undotbs1 ADD DATAFILE '/u02/undo03.dbf' SIZE 1G; | 空間不足、磁盤擴容 |
| 重命名/遷移文件 | ALTER TABLESPACE undotbs1 RENAME DATAFILE '/old/undo01.dbf' TO '/new/undo01.dbf'; | 存儲重組、遷移ASM |
| 離線/上線 | ALTER TABLESPACE undotbs1 OFFLINE / ONLINE; | 維護窗口、文件遷移中轉 |
| 備份模式 | ALTER TABLESPACE undotbs1 BEGIN BACKUP; ... END BACKUP; | ARHIVELOG模式下OS級熱備份 |
熱切換,無需重啟,舊表空間等待活躍事務提交後自動PENDING OFFLINE:
ALTER SYSTEM SET UNDO_TABLESPACE = undotbs2 SCOPE=BOTH;
-- 監控切換進度
SELECT tablespace_name, status, contents
FROM dba_tablespaces
WHERE contents = 'UNDO';
狀態流轉:ONLINE → PENDING OFFLINE → OFFLINE。
前提:目標表空間非當前使用中(狀態OFFLINE)。
-- 1. 確認當前使用
SHOW PARAMETER undo_tablespace;
-- 2. 列出所有UNDO表空間
SELECT tablespace_name, status FROM dba_tablespaces WHERE contents = 'UNDO';
-- 3. 刪除(含數據文件)
DROP TABLESPACE undotbs1 INCLUDING CONTENTS AND DATAFILES;
高峰期收集V$UNDOSTAT,科學定容:
SELECT TO_CHAR(begin_time, 'HH24:MI') begin_time,
TO_CHAR(end_time, 'HH24:MI') end_time,
undoblks * 8 / 1024 undo_mb, -- 假設8K塊
txncount,
maxquerylen
FROM v$undostat
WHERE begin_time > SYSDATE - 7
ORDER BY begin_time;
UNDOBLKS:該10分鐘窗口消耗的UNDO塊數MAXQUERYLEN:最長查詢持續秒數(指導UNDO_RETENTION)TXNCOUNT:事務數(評估併發)UNDO_TABLESPACE指向不同表空間)UNDO_TABLESPACE=UNDOTBS_INST1、UNDO_TABLESPACE=UNDOTBS_INST2ORA-30013。PENDING OFFLINE轉OFFLINE。V$UNDOSTAT.MAXQUERYLEN > UNDO_RETENTION——預警ORA-01555風險。UNDO表空間管理三板斧:創建時顯式指定、運行中熱切換擴容、科學統計定容。掌握CREATE/ALTER/DROP UNDO TABLESPACE與ALTER SYSTEM SET UNDO_TABLESPACE,配合V$UNDOSTAT監控,即可駕馭核心一致性引擎的存儲後端。