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

Oracle表空間創建實戰討論:雙表空間架構、圖形界面與腳本化雙軌交付

     編輯:Oracle 資料庫基礎

為什麼要分離數據與索引表空間

  • I/O隔離:數據文件與索引文件置於不同物理磁盤/ASM磁盤組,減少磁頭爭用。
  • 備份策略差異:索引可重建,備份頻率可低於數據(或僅備份數據表空間)。
  • 恢復靈活性:索引損壞僅需REBUILD,無需介質恢復。
  • 存儲分級:數據放高可用存儲,索引放高性能存儲。

創建方式雙軌制

軌道一:企業管理器/圖形界面(可視化驗證)

  1. EM Cloud Control / Database Express → Storage → Tablespaces → Create
  2. 填寫:名稱、類型(Permanent/Temporary/Undo)、數據文件路徑/大小/自動擴展、區管理(AUTOALLOCATE/UNIFORM)、段空間管理(AUTO)
  3. 提交 → 顯示創建DDL → 確認執行
  4. 優勢:直觀、自動生成標準DDL、可預覽影響

軌道二:腳本化DDL(版本控制、自動化交付)

標準數據表空間

CREATE TABLESPACE "APP_DATA"
  LOGGING
  DATAFILE '+DATA/PROD/DATAFILE/app_data_01.dbf' SIZE 500M
  AUTOEXTEND ON NEXT 100M MAXSIZE 50G
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE
  SEGMENT SPACE MANAGEMENT AUTO;

標準索引表空間

CREATE TABLESPACE "APP_INDEX"
  LOGGING
  DATAFILE '+DATA/PROD/DATAFILE/app_index_01.dbf' SIZE 200M
  AUTOEXTEND ON NEXT 50M MAXSIZE 20G
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE
  SEGMENT SPACE MANAGEMENT AUTO;

擴容操作(圖形/腳本通用)

-- 修改文件大小
ALTER DATABASE DATAFILE '+DATA/PROD/DATAFILE/app_data_01.dbf' RESIZE 1024M;

-- 或新增文件
ALTER TABLESPACE APP_DATA ADD DATAFILE 
  '+DATA/PROD/DATAFILE/app_data_02.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 50G;

用戶創建與權限綁定(配套標準)

CREATE USER app_owner IDENTIFIED BY "AppOwn3r_Str0ngP@ss"
  DEFAULT TABLESPACE APP_DATA
  TEMPORARY TABLESPACE TEMP
  QUOTA UNLIMITED ON APP_DATA
  QUOTA UNLIMITED ON APP_INDEX
  PROFILE APP_PROFILE;

GRANT CREATE SESSION TO app_owner;
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE, CREATE TRIGGER, CREATE SYNONYM TO app_owner;
-- 按需:GRANT UNLIMITED TABLESPACE TO app_owner; (慎用)

-- 開發唯讀用戶
CREATE USER app_readonly IDENTIFIED BY "ReadOnly_P@ss"
  DEFAULT TABLESPACE APP_DATA
  TEMPORARY TABLESPACE TEMP;
GRANT CREATE SESSION TO app_readonly;
GRANT SELECT ON app_owner.core_table TO app_readonly; -- 逐表授予或角色聚合

建表時顯式指定表空間(強制分離)

CREATE TABLE app_owner.orders (
  order_id NUMBER PRIMARY KEY,
  cust_id  NUMBER,
  order_dt DATE,
  amount   NUMBER(12,2)
) TABLESPACE APP_DATA
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE (INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED);

CREATE INDEX app_owner.orders_cust_idx ON app_owner.orders(cust_id)
  TABLESPACE APP_INDEX
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE (INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED);

避坑與最佳實踐

  1. 字符集統一:創建腳本編碼與數據庫NLS_CHARACTERSET一致(UTF8/AL32UTF8),避免中文表空間名亂碼。
  2. ASM路徑規範:+DG_NAME/DB_UNIQUE_NAME/DATAFILE/ts_name_##.dbf,便於自動化解析。
  3. 版本控制:所有DDL入Git,標簽v1.0_tablespaces,變更走PR審批。
  4. 驗證腳本:創建後執行SELECT * FROM DBA_TABLESPACES WHERE TABLESPACE_NAME IN ('APP_DATA','APP_INDEX'); 確認屬性。
  5. 監控告警:DBA_FREE_SPACE 閾值<20%告警,AUTOEXTEND 觸發記錄審計。

總結

表空間創建雙軌制:圖形界面驗證設計 → 腳本化交付落地。核心架構:數據/索引分離 + 專用臨時/UNDO + 業務用戶綁定配額 + 版本控制。將上述模板封裝為create_tablespaces.sql.j2 Jinja2模板,配合Ansible實現多環境一鍵佈署。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved