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

釐清 Oracle 用戶與表空間關係:多對多邏輯、預設表空間變更與資料移動實戰

     編輯:Oracle 資料庫基礎

核心觀念:用戶 ≠ 表空間

  • 一個用戶可使用多個表空間(預設 + 指定)。
  • 一個表空間可服務多個用戶(配額授予)。
  • 用戶屬於資料庫實例,同實例下用戶名唯一;不同實例可同名,互不干擾。
  • 表空間屬邏輯概念,管理資料檔(物理),一表空間可含多資料檔,一資料檔隸屬一表空間。

查詢用戶與表空間關聯

-- 查某表空間下所有段(含擁有者=用戶)
SELECT owner, segment_name, segment_type
FROM dba_segments
WHERE tablespace_name = 'TSA';

常見情境 FAQ

情境:用戶 UB 預設表空間從 TSA 改為 TSB,資料去哪了?

  • 變更前建立的物件存放在 TSA。
  • 變更後新建物件預設存放在 TSB。
  • 舊資料不會自動遷移。

如何將舊表移至新表空間?

ALTER TABLE b MOVE TABLESPACE tsb;
-- 索引會變 UNUSABLE,需重建
ALTER INDEX idx_b REBUILD;

如何查詢表所在表空間?

SELECT table_name, tablespace_name FROM user_tables;

EXP 匯出用戶 UB 能導出所有資料嗎?

可以。EXP 按用戶導出其擁有的所有物件與資料,跨表空間無影響。

實務建議

  1. 建立用戶時明確指定 DEFAULT TABLESPACE 与 TEMPORARY TABLESPACE,避免落入 SYSTEM。
  2. 使用 QUOTA 限制用戶於各表空間用量,防止單一用戶耗盡資源。
  3. 定期監控 DBA_FREE_SPACE 與 DBA_TS_QUOTAS,及早擴充或清理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved