您好,登錄后才能下訂單哦!
在很多Oracle文檔中,可能大家都注意過Oracle用來進行測試的一個表空間,這個表空間中有一系列預置的用戶和數據,可以用于數據庫或BI的很多測試實驗。
這個表空間在使用模板建庫時是可以選擇的,在如下圖所示的這個界面中,可以選擇建庫時包含這個范例表空間(缺省是未選擇的)。
圖1 是否包含示例方案
在DBCA的的配置過程中,如果選擇了包含示例方案,則最后生成的 cloneDBCreation.sql 腳本將會與標準模式有所改變,主要增加了如下語句(在11g、12c等新版本中基本沒有變化):
看到這里,再次引用了模板目錄中的文件,通過 mkplug.sql 腳本執行了 PlugIN 操作,如果我們看到Oracle 12c的Pluggable Database覺得有點陌生,那么其實Plugin這個操作Oracle已經在默默的幫我們執行了好多年:
C:\>dir C:\oracle\10.2.0\assistants\dbca\templates\ex*
2005-09-07 13:02 983,040 example.dmp
2005-09-07 13:02 20,897,792 example01.dfb
通過mkplug.sql腳本來加載這個范例表空間,來看一下這個腳本的主要內容。
同樣,最重要的是通過dbms_backup_restore包從example01.dfb文件中恢復數據文件:
這個恢復完成之后,接下來最重要的部分就是通過傳輸表空間技術將example表空間導入到當前的數據庫。
考慮一下這種情況,當進行跨數據庫遷移時,需要將一個用戶表空間中的數據遷移到另外一個數據庫,應該使用什么樣的方法呢?
最常規的做法可能是通過EXP工具將數據全部導出,然后在目標數據庫上IMP導入,可是這種方法可能會比較緩慢。EXP工具同時還提供另外一種技術-可傳輸表空間技術,可以用于加快這個過程。
在exp –help的幫助中,可以看到這樣一個參數:
TRANSPORT_TABLESPACE 導出可傳輸的表空間元數據 (N)
通過這個選項,我們可以對一組自包含、只讀的表空間只導出元數據,然后在操作系統層將這些表空間的數據文件拷貝至目標平臺,并將元數據導入數據字典(這個過程稱為插入,plugging),即完成遷移。
注意
傳輸表空間技術不能應用于SYSTEM表空間。
對于可傳輸表空間有一個重要概念:自包含(Self-Contained)。
在表空間傳輸的中,要求表空間集為自包含的,自包含表示用于傳輸的內部表空間集沒有引用指向外部表空間集。自包含分為兩種:一般自包含表空間集和完全(嚴格)自包含表空間集。
常見的以下情況是違反自包含原則的:
§ 索引在內部表空間集,而表在外部表空間集(相反地,如果表在內部表空間集,而索引在外部表空間集,則不違反自包含原則)。
§ 分區表一部分區在內部表空間集,一部分在外部表空間集(對于分區表,要么全部包含在內部表空間集中,要么全不包含)。
§ 如果在傳輸表空間時同時傳輸約束,則對于引用完整性約束,約束指向的表在外部表空間集,則違反自包含約束;如果不傳輸約束,則與約束指向無關。
§ 表在內部表空間集,而lob列在外部表空間集,則違反自包含約束。
通常可以通過系統包DBMS_TTS來檢查表空間是否自包含,驗證可以以兩種方式執行:非嚴格方式和嚴格方式。
以下是一個簡單的驗證過程,假定在eygle表空間存在一個表eygle,其上存在索引存儲在USERS表空間:、
SQL> create table eygle as select rownum id ,username from dba_users;
SQL> create index ind_id on eygle(id) tablespace users;
以SYS用戶執行非嚴格自包含檢查(full_check=false):
執行嚴格自包含檢查(full_check=true):
反過來對于USERS表空間來說,非嚴格檢查也是無法通過的:
但是可以對多個表空間同時傳輸,則一些自包含問題就可以得到解決:
表空間自包含確認之后,進行表空間傳輸就很方便了,一般包含如下幾個步驟。
1.將表空間設置為只讀:
alter tablespace users read only;
2.導出表空間。在操作系統提示符下執行:
exp username/passwd tablespaces=users transport_tablespace=y file=exp_users.dmp
此處的導出文件只包含元數據,所以導出文件很小,導出速度也會很快。
3.轉移。
將導出的元數據文件(此處是exp_users.dmp)和傳輸表空間的數據文件(此處是users表空間的數據文件user01.dbf)轉移至目標主機(轉移過程如果使用FTP方式,應該注意使用二進制方式)。
4.傳輸。
在目標數據庫將表空間插入到數據庫中,完成表空間傳輸。在操作系統命令提示符下執行下面的語句:
imp username/passwd tablespaces=users transport_tablespace=y file=exp_users.dmp datafiles='users01.dbf'
了解了Oracle的可傳輸表空間技術后,來看一下example表空間的插入,以下腳本仍然來自mkplug.sql腳本:
完成plugging之后,這個表空間就被包含在了新建的數據庫之中。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。