表空間管理得到了重大的改進
這可以歸因於一個 sparser SYSTEM
為用戶定義一個默認表空間的支持
新的 SYSAUX
甚至重命名
您曾經多少次因用戶在 SYSTEM 表空間中創建了非 SYS 和 SYSTEM 的段而傷透腦筋?
在 Oracle
i Database 之前
如果在創建用戶時沒有指定默認表空間
那麼它將默認為 SYSTEM 表空間
如果用戶在創建一個段時沒有顯式地指定一個表空間
那麼這個段將在 SYSTEM 中創建—前提是用戶在 SYSTEM 表空間中擁有配額(要麼顯式地授予
要麼通過系統權限 UNLIMITED TABLESPACE 來授予)
Oracle
i 允許 DBA 為所有未用顯式的臨時表空間子句創建的用戶指定一個默認的臨時表空間
從而減少了這個問題
在 Oracle Database
g 中
您可以類似地為用戶指定一個默認表空間
在數據庫創建期間
CREATE DATABASE 命令可以包含子句 DEFAULT TABLESPACE
在創建之後
您可以通過發出以下命令來使一個表空間變成默認表空間
ALTER DATABASE DEFAULT TABLESPACE <tsname>;
未用 DEFAULT TABLESPACE 子句創建的所有用戶將以 作為它們的默認表空間
您可以在任何時候通過這個 ALTER 命令來改變默認表空間
從而允許您在不同的節點上將不同的表空間指定為默認表空間
重要注意事項
擁有舊的表空間的所有用戶的默認表空間都被修改為
即使有些表空間是為某些用戶顯式指定的
例如
假定用戶 USER
和 USER
的表空間分別是 TS
和 TS
— 它們是在用戶創建期間顯式指定的
數據庫當前的默認表空間是 TS
但之後
數據庫的默認表空間變為 TS
即使 USER
的默認表空間是顯式指定為 TS
的
它也將變為 TS
小心這種邊界效應!
如果在數據庫創建期間沒有指定默認表空間
它將默認為 SYSTEM
但您如何才能知道現有的數據庫的默認表空間是哪一個?發出以下查詢
SELECT PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME =
DEFAULT_PERMANENT_TABLESPACE
;
DATABASE_PROPERTIES 視圖顯示默認表空間之外
還顯示一些非常重要的信息 — 例如默認臨時表空間
全局數據庫名
時區等
非必要模式的默認表空間 幾種模式(如智能代理用戶 DBSNMP
數據挖掘用戶 ODM)與用戶操作不直接相關
但對數據庫完整性仍很重要
這些模式中的一些曾經用 SYSTEM 作為它們的默認表空間 — 這是在 SYSTEM 表空間內對象增殖的又一個原因
Oracle Database
g 引進了一個新的稱為 SYSAUX 的表空間
它用來保存這些模式的對象
這個表空間是在數據庫創建期間自動創建的
並在本地進行管理
唯一允許修改的是數據文件的名稱
這種方法在 SYSTEM 損壞需要完整的數據庫恢復時
為恢復提供支持
SYSAUX 中的對象可以被恢復為任意正常的用戶對象
同時數據庫本身保持運行
但如果您想將 SYSAUX 中的這些模式中的一些轉移到一個不同的表空間中時
該怎麼辦?例如
考慮 LogMiner 使用的對象
這些對象的大小經常增長
直到最終填滿表空間
出於可管理性的原因
您可能考慮將它們轉移到它們自己的表空間中
但實現這一目的的最好的方法是什麼?
作為一個數據庫管理員
了解轉移這些特殊對象的正確過程對您而言是很重要的
幸運的是
Oracle Database
g 提供了一個新的視圖使要憑猜測來做的工作形象化
這個視圖
V$SYSAUX_OCCUPANTS
列出了表空間 SYSAUX 中的模式的名稱
它們的說明
當前使用的空間
以及如何轉移它們
(參見表
)
注意 LogMiner 如何被清楚地顯示為占用
KB 的空間
它歸模式 SYSTEM 所有
而要轉移對象
您需要執行打包的過程 SYS
DBMS_LOGMNR_D
SET_TABLESPACE
不過
對於 STATSPACK 對象
這個視圖推薦使用導入/導出方法
而對於流
沒有轉移過程 — 因而您不能容易地將它們從 SYSAUX 表空間中轉移出來
列 MOVE_PROCEDURE 默認顯示 SYSAUX 中存在的幾乎所有工具的正確的轉移過程
也可以逆向使用轉移過程來使對象回到 SYSAUX 表空間中
重命名一個表空間 在數據倉庫環境中(典型地
對於數據中心體系結構)
在數據庫之間傳輸表空間是很常見的
但源數據庫和目標數據庫必須不存在擁有相同名稱的表空間
如果存在兩個擁有相同名稱的表空間
則目標表空間中的段必須轉移到一個不同的表空間中
然後重新創建這個表空間— 這個任務說起來容易做起來難
Oracle Database
g 提供了一個方便的解決方案
您可以用以下命令來簡單地重命名一個現有的表空間(SYSTEM 和 SYSAUX 除外) — 無論是永久表空間還是臨時表空間
ALTER TABLESPACE <oldname> RENAME TO <newname>;
這個功能還將應用在存檔過程中
假定您有一個按范圍分區的表
用於記錄銷售歷史數據
每個月的這個分區位於按這個月份命名的一個表空間中 — 例如
月份的分區命名為 JAN
並位於一個名稱為 JAN 的表空間中
這樣您就擁有了一個將信息保留
個月的策略
在
年
月
您將能夠存檔
年
月的數據
大致的操作流程類似於以下操作
利用 ALTER TABLE EXCHANGE PARTITION 從分區 JAN 中創建一個獨立的表 JAN
將表空間重命名為 JAN
為表空間 JAN
創建一個可傳輸表空間集
將表空間 JAN
重新命名為 JAN
將空的分區交換回表中
第
和
步很簡單
並且不會過度地消耗資源(如重做和撤消空間)
第
步只是拷貝文件並只為 JAN
輸出數據字典信息
這也是個非常輕松的過程
如果您需要恢復之前存檔的分區
這個過程也非常簡單
您只需要將相同的過程反過來就行了
Oracle Database
g 在處理這些重命名的方式上相當智能化
如果您重命名作為 UNDO 或默認臨時表空間的表空間
這可能產生混淆
但數據庫將自動調整必要的記錄來反映這種變化
例如
將默認表空間的名稱從 USERS 修改為 USER_DATA 將自動修改視圖 DATABASE_PROPERTIES
在修改之前
查詢
select property_value from database_properties
where property_name =
DEFAULT_PERMANENT_TABLESPACE
;
返回 USERS
在運行下面的語句之後
alter tablespace users rename to user_data;
上述查詢返回 USER_DATA
因為所有對 USERS 的引用都被修改為到 USER_DATA
修改默認臨時表空間的情況一樣
甚至修改 UNDO 表空間的名稱也將觸發 SPFILE 中的變化
如下所示
SQL> select value from v$spparameter where name =
undo_tablespace
;
VALUE
UNDOTBS
SQL> alter tablespace undotbs
rename to undotbs;
Tablespace altered
SQL> select value from v$spparameter where name =
undo_tablespace
;
VALUE
UNDOTBS
結論 在最近的幾個 Oracle 版本演變的過程中
對象處理得到了穩定的增強
Oracle
i 引進了表從一個表空間到另一個表空間的轉移
Oracle
i Database R
引進了列重命名
現在 — 在最新的版本中 — 表空間自身的重命名成為可能
這些增強顯著地減輕了數據庫管理員的任務 — 特別是在數據倉庫或數據中心環境中
From:http://tw.wingwit.com/Article/program/Oracle/201311/18085.html