CREATE DATABASE 後 DB_BLOCK_SIZE 永久不可變更。 Oracle 以 Block 為最小 I/O 單位,任何儲存元素至少佔用 1 個 Block,修改 Block Size 會導致現有 Block 結構失效。
-- SQL
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'db_block_size';
-- SQL*Plus
SHOW PARAMETER BLOCK;
若單次交易寫入 32KB,DB_BLOCK_SIZE=8KB → 需 4 次 I/O (32/8=4)。Block 越大,單次 I/O 承載越多資料,但也可能增加讀放大。
2^22 - 1 = 4,194,303 (ROWID 22 bits)。ORA-01144: file size (4194304 blocks) exceeds maximum 4194303 blocks。| 方案 | 原理 | 單檔上限 (8K Block) | 適用性/缺點 |
|---|---|---|---|
| 1. 多資料檔 | 單表空間加多個 <32GB 檔 | 無上限 (靠檔案數) | 全版本相容、管理複雜度升高 |
| 2. 擴大 Block Size (建庫時) | 16K→64GB, 32K→128GB | 128 GB (32K) | **建庫後不可改**、32 位 OS 可能不支援 32K、大 Block 可能浪費空間 |
| 3. Bigfile 表空間 (11g+ 主流) | 64 bits 定址 (32 bits File# + 32 bits Block#) | **32 TB** (8K) / **128 TB** (32K) | **一表空間僅一檔**、無法加檔擴容、需搭配 ASM/LVM/雲端磁碟彈性擴容 |
CREATE BIGFILE TABLESPACE BIG_TBS
DATAFILE '+DATA/big_tbs01.dbf' SIZE 100G
AUTOEXTEND ON NEXT 10G MAXSIZE 32T;
-- 擴容只能 RESIZE 底層檔案 (ASM 磁碟組擴容後)
ALTER DATABASE DATAFILE '+DATA/big_tbs01.dbf' RESIZE 200G;
建議:大數據量、簡化管理場景首選 Bigfile + ASM;中小型、需精細檔案控制場景用多檔案 Smallfile。