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