首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 表結構變更實戰指南:增刪改欄位、重命名、截斷、註釋與刪除表

     編輯:Oracle 資料庫基礎

核心 DDL 語法與實戰陷阱

表結構變更屬 DDL,隱含 Commit、不可回滾,生產環境務必在維護窗口執行並先備份。

1. 新增欄位

ALTER TABLE tbl_name ADD (col_name VARCHAR2(20) DEFAULT 'unknown');
  • 11g+ 新增 DEFAULT ... NOT NULL 為純元資料操作(不更新既有列),秒級完成。
  • 舊版或無 NOT NULL 會全表更新,鎖表時間與資料量成正比。

2. 修改欄位定義

ALTER TABLE tbl_name MODIFY (col_name VARCHAR2(30) DEFAULT 'hebei');
  • 擴大長度/精度:隨時可執行。
  • 縮小長度:需確保現有資料皆符合新定義,否則報錯 ORA-01441。
  • 修改 DEFAULT:僅影響後續 INSERT,既有列數值不變(見範例)。
  • 資料型別變更:通常需建新欄位 → 遷移資料 → Drop 舊欄位 → Rename。

3. 刪除欄位(兩階段策略)

-- 階段1:標記為 UNUSED(極快,僅更新字典)
ALTER TABLE tbl_name SET UNUSED COLUMN col_name;

-- 階段2:實際釋放空間(離峰執行,會全表掃描重組)
ALTER TABLE tbl_name DROP UNUSED COLUMNS;
  • DROP COLUMN 直接執行等同於上述兩步合一,長表易導致長時間鎖表。
  • 12c+ 支援 DROP COLUMN ONLINE 降低鎖定影響。

4. 表重命名

RENAME old_tbl TO new_tbl;
  • 同義詞、View、PL/SQL 依賴會失效,需重新編譯。
  • 外鍵約束自動遷移,索引/權限/觸發器保留。

5. 截斷表

TRUNCATE TABLE tbl_name;
  • DDL、隱含 Commit、不可 Rollback。
  • 重置 HWM、釋放 Extents(保留 MINEXTENTS)、不產生 Redo(極少量)。
  • 不觸發 DELETE Trigger。
  • 12c+ TRUNCATE TABLE ... CASCADE 可級聯截斷參考表(需 FK 定義 ON DELETE CASCADE)。

6. 表註釋

COMMENT ON TABLE tbl_name IS '業務說明:存放訂單明細';
  • 查詢:SELECT * FROM user_tab_comments WHERE table_name='TBL_NAME';

7. 刪除表

DROP TABLE tbl_name [PURGE];
  • 預設移入 Recyclebin(FLASHBACK TABLE ... TO BEFORE DROP 可恢復)。
  • PURGE 直接永久刪除,釋放空間立即生效。

生產環境變更清單

  1. 評估鎖表時間與空間影響(DBMS_METADATA.GET_DDL 先導出結構)。
  2. 測試環境驗證應用相容性。
  3. 維護窗口執行,監控 V$SESSION_WAIT 鎖情況。
  4. 變更後收集統計資訊 (DBMS_STATS.GATHER_TABLE_STATS)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved