熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle 10G 最佳20位新特性:改善的表空間管理

2013-11-13 16:17:04  來源: Oracle 

  表空間管理得到了重大的改進這可以歸因於一個 sparser SYSTEM為用戶定義一個默認表空間的支持新的 SYSAUX甚至重命名
  
  您曾經多少次因用戶在 SYSTEM 表空間中創建了非 SYS 和 SYSTEM 的段而傷透腦筋?
  
  在 Oraclei Database 之前如果在創建用戶時沒有指定默認表空間那麼它將默認為 SYSTEM 表空間如果用戶在創建一個段時沒有顯式地指定一個表空間那麼這個段將在 SYSTEM 中創建—前提是用戶在 SYSTEM 表空間中擁有配額(要麼顯式地授予要麼通過系統權限 UNLIMITED TABLESPACE 來授予)Oraclei 允許 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 所有而要轉移對象您需要執行打包的過程 SYSDBMS_LOGMNR_DSET_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 版本演變的過程中對象處理得到了穩定的增強Oraclei 引進了表從一個表空間到另一個表空間的轉移Oracle i Database R 引進了列重命名現在 — 在最新的版本中 — 表空間自身的重命名成為可能這些增強顯著地減輕了數據庫管理員的任務 — 特別是在數據倉庫或數據中心環境中
From:http://tw.wingwit.com/Article/program/Oracle/201311/18085.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.