Oracle 不支援直接 ALTER TABLE ... MODIFY PRIMARY KEY 變更主鍵欄位,標準流程是 先刪除舊主鍵約束,再新增新主鍵約束。本文提供完整腳本範例,含索引儲存參數設定,可直接套用於生產環境變更。
user_constraints)。-- 1. 刪除舊主鍵
ALTER TABLE T_SF_SUPPLIER DROP CONSTRAINT PK_T_SF_SUPPLIER;
-- 2. 新增新主鍵(含完整儲存參數)
ALTER TABLE T_SF_SUPPLIER
ADD CONSTRAINT PK_T_SF_SUPPLIER PRIMARY KEY (sp_id)
USING INDEX
TABLESPACE SYSTEM
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
);
| 參數 | 用途 | 建議值 |
|---|---|---|
| TABLESPACE | 索引存放表空間 | 依規劃,避免放 SYSTEM |
| PCTFREE | 區塊預留更新空間 % | 10(頻繁更新調高) |
| INITRANS | 初始交易槽數 | 2~4(高併發調大) |
| MAXTRANS | 最大交易槽數 | 255(預設) |
| STORAGE INITIAL | 初始程度 | 視資料量,64K~1M |
| MINEXTENTS / MAXEXTENTS | 擴展控制 | 1 / UNLIMITED |
DISABLE 或 DROP 子表 FK,變更完再 ENABLE / CREATE 回來。SELECT constraint_name, table_name
FROM user_constraints
WHERE constraint_type = 'P'
AND table_name = 'T_SF_SUPPLIER';
遵循「Drop 再 Add」標準流程,搭配完整儲存參數,即可安全、可控地完成 Oracle 表主鍵變更。