在很多Oracle文檔中,可能大家都注意過(guò)Oracle用來(lái)進(jìn)行測(cè)試的一個(gè)表空間,這個(gè)表空間中有一系列預(yù)置的用戶和數(shù)據(jù),可以用于數(shù)據(jù)庫(kù)或BI的很多測(cè)試實(shí)驗(yàn)。 這個(gè)表空間在使用模板建庫(kù)時(shí)是可以選擇的,在如下圖所示的這個(gè)界面中,可以選擇建庫(kù)時(shí)包含這個(gè)范例表空間(缺省是未選擇的)。 圖1 是否包含示例方案 在DBCA的的配置過(guò)程中,如果選擇了包含示例方案,則最后生成的 cloneDBCreation.sql 腳本將會(huì)與標(biāo)準(zhǔn)模式有所改變,主要增加了如下語(yǔ)句(在11g、12c等新版本中基本沒(méi)有變化): 看到這里,再次引用了模板目錄中的文件,通過(guò) mkplug.sql 腳本執(zhí)行了 PlugIN 操作,如果我們看到Oracle 12c的Pluggable Database覺(jué)得有點(diǎn)陌生,那么其實(shí)Plugin這個(gè)操作Oracle已經(jīng)在墨墨的幫我們執(zhí)行了好多年:
通過(guò)mkplug.sql腳本來(lái)加載這個(gè)范例表空間,來(lái)看一下這個(gè)腳本的主要內(nèi)容。 同樣,最重要的是通過(guò)dbms_backup_restore包從example01.dfb文件中恢復(fù)數(shù)據(jù)文件: 這個(gè)恢復(fù)完成之后,接下來(lái)最重要的部分就是通過(guò)傳輸表空間技術(shù)將example表空間導(dǎo)入到當(dāng)前的數(shù)據(jù)庫(kù)。 考慮一下這種情況,當(dāng)進(jìn)行跨數(shù)據(jù)庫(kù)遷移時(shí),需要將一個(gè)用戶表空間中的數(shù)據(jù)遷移到另外一個(gè)數(shù)據(jù)庫(kù),應(yīng)該使用什么樣的方法呢? 最常規(guī)的做法可能是通過(guò)EXP工具將數(shù)據(jù)全部導(dǎo)出,然后在目標(biāo)數(shù)據(jù)庫(kù)上IMP導(dǎo)入,可是這種方法可能會(huì)比較緩慢。EXP工具同時(shí)還提供另外一種技術(shù)-可傳輸表空間技術(shù),可以用于加快這個(gè)過(guò)程。 在exp –help的幫助中,可以看到這樣一個(gè)參數(shù):
通過(guò)這個(gè)選項(xiàng),我們可以對(duì)一組自包含、只讀的表空間只導(dǎo)出元數(shù)據(jù),然后在操作系統(tǒng)層將這些表空間的數(shù)據(jù)文件拷貝至目標(biāo)平臺(tái),并將元數(shù)據(jù)導(dǎo)入數(shù)據(jù)字典(這個(gè)過(guò)程稱為插入,plugging),即完成遷移。 傳輸表空間技術(shù)不能應(yīng)用于SYSTEM表空間。 對(duì)于可傳輸表空間有一個(gè)重要概念:自包含(Self-Contained)。 在表空間傳輸?shù)闹校蟊砜臻g集為自包含的,自包含表示用于傳輸?shù)膬?nèi)部表空間集沒(méi)有引用指向外部表空間集。自包含分為兩種:一般自包含表空間集和完全(嚴(yán)格)自包含表空間集。 常見(jiàn)的以下情況是違反自包含原則的:
通??梢酝ㄟ^(guò)系統(tǒng)包DBMS_TTS來(lái)檢查表空間是否自包含,驗(yàn)證可以以兩種方式執(zhí)行:非嚴(yán)格方式和嚴(yán)格方式。 以下是一個(gè)簡(jiǎn)單的驗(yàn)證過(guò)程,假定在eygle表空間存在一個(gè)表eygle,其上存在索引存儲(chǔ)在USERS表空間:、
以SYS用戶執(zhí)行非嚴(yán)格自包含檢查(full_check=false): 執(zhí)行嚴(yán)格自包含檢查(full_check=true): 反過(guò)來(lái)對(duì)于USERS表空間來(lái)說(shuō),非嚴(yán)格檢查也是無(wú)法通過(guò)的: 但是可以對(duì)多個(gè)表空間同時(shí)傳輸,則一些自包含問(wèn)題就可以得到解決: 表空間自包含確認(rèn)之后,進(jìn)行表空間傳輸就很方便了,一般包含如下幾個(gè)步驟。 1.將表空間設(shè)置為只讀:
2.導(dǎo)出表空間。在操作系統(tǒng)提示符下執(zhí)行:
此處的導(dǎo)出文件只包含元數(shù)據(jù),所以導(dǎo)出文件很小,導(dǎo)出速度也會(huì)很快。 3.轉(zhuǎn)移。 將導(dǎo)出的元數(shù)據(jù)文件(此處是exp_users.dmp)和傳輸表空間的數(shù)據(jù)文件(此處是users表空間的數(shù)據(jù)文件user01.dbf)轉(zhuǎn)移至目標(biāo)主機(jī)(轉(zhuǎn)移過(guò)程如果使用FTP方式,應(yīng)該注意使用二進(jìn)制方式)。 4.傳輸。 在目標(biāo)數(shù)據(jù)庫(kù)將表空間插入到數(shù)據(jù)庫(kù)中,完成表空間傳輸。在操作系統(tǒng)命令提示符下執(zhí)行下面的語(yǔ)句:
了解了Oracle的可傳輸表空間技術(shù)后,來(lái)看一下example表空間的插入,以下腳本仍然來(lái)自mkplug.sql腳本: 完成plugging之后,這個(gè)表空間就被包含在了新建的數(shù)據(jù)庫(kù)之中。 加入"云和恩墨大講堂",參與討論學(xué)習(xí) |
|
來(lái)自: 數(shù)據(jù)和云 > 《待分類》