專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)昌吉免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
在很多Oracle文檔中,可能大家都注意過Oracle用來進行測試的一個表空間,這個表空間中有一系列預(yù)置的用戶和數(shù)據(jù),可以用于數(shù)據(jù)庫或BI的很多測試實驗。
這個表空間在使用模板建庫時是可以選擇的,在如下圖所示的這個界面中,可以選擇建庫時包含這個范例表空間(缺省是未選擇的)。
圖1 是否包含示例方案
在DBCA的的配置過程中,如果選擇了包含示例方案,則最后生成的 cloneDBCreation.sql 腳本將會與標準模式有所改變,主要增加了如下語句(在11g、12c等新版本中基本沒有變化):
看到這里,再次引用了模板目錄中的文件,通過 mkplug.sql 腳本執(zhí)行了 PlugIN 操作,如果我們看到Oracle 12c的Pluggable Database覺得有點陌生,那么其實Plugin這個操作Oracle已經(jīng)在默默的幫我們執(zhí)行了好多年:
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腳本來加載這個范例表空間,來看一下這個腳本的主要內(nèi)容。
同樣,最重要的是通過dbms_backup_restore包從example01.dfb文件中恢復(fù)數(shù)據(jù)文件:
這個恢復(fù)完成之后,接下來最重要的部分就是通過傳輸表空間技術(shù)將example表空間導(dǎo)入到當前的數(shù)據(jù)庫。
考慮一下這種情況,當進行跨數(shù)據(jù)庫遷移時,需要將一個用戶表空間中的數(shù)據(jù)遷移到另外一個數(shù)據(jù)庫,應(yīng)該使用什么樣的方法呢?
最常規(guī)的做法可能是通過EXP工具將數(shù)據(jù)全部導(dǎo)出,然后在目標數(shù)據(jù)庫上IMP導(dǎo)入,可是這種方法可能會比較緩慢。EXP工具同時還提供另外一種技術(shù)-可傳輸表空間技術(shù),可以用于加快這個過程。
在exp –help的幫助中,可以看到這樣一個參數(shù):
TRANSPORT_TABLESPACE 導(dǎo)出可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)
通過這個選項,我們可以對一組自包含、只讀的表空間只導(dǎo)出元數(shù)據(jù),然后在操作系統(tǒng)層將這些表空間的數(shù)據(jù)文件拷貝至目標平臺,并將元數(shù)據(jù)導(dǎo)入數(shù)據(jù)字典(這個過程稱為插入,plugging),即完成遷移。
注意
傳輸表空間技術(shù)不能應(yīng)用于SYSTEM表空間。
對于可傳輸表空間有一個重要概念:自包含(Self-Contained)。
在表空間傳輸?shù)闹校蟊砜臻g集為自包含的,自包含表示用于傳輸?shù)膬?nèi)部表空間集沒有引用指向外部表空間集。自包含分為兩種:一般自包含表空間集和完全(嚴格)自包含表空間集。
常見的以下情況是違反自包含原則的:
§ 索引在內(nèi)部表空間集,而表在外部表空間集(相反地,如果表在內(nèi)部表空間集,而索引在外部表空間集,則不違反自包含原則)。
§ 分區(qū)表一部分區(qū)在內(nèi)部表空間集,一部分在外部表空間集(對于分區(qū)表,要么全部包含在內(nèi)部表空間集中,要么全不包含)。
§ 如果在傳輸表空間時同時傳輸約束,則對于引用完整性約束,約束指向的表在外部表空間集,則違反自包含約束;如果不傳輸約束,則與約束指向無關(guān)。
§ 表在內(nèi)部表空間集,而lob列在外部表空間集,則違反自包含約束。
通常可以通過系統(tǒng)包DBMS_TTS來檢查表空間是否自包含,驗證可以以兩種方式執(zhí)行:非嚴格方式和嚴格方式。
以下是一個簡單的驗證過程,假定在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用戶執(zhí)行非嚴格自包含檢查(full_check=false):
執(zhí)行嚴格自包含檢查(full_check=true):
反過來對于USERS表空間來說,非嚴格檢查也是無法通過的:
但是可以對多個表空間同時傳輸,則一些自包含問題就可以得到解決:
表空間自包含確認之后,進行表空間傳輸就很方便了,一般包含如下幾個步驟。
1.將表空間設(shè)置為只讀:
alter tablespace users read only;
2.導(dǎo)出表空間。在操作系統(tǒng)提示符下執(zhí)行:
exp username/passwd tablespaces=users transport_tablespace=y file=exp_users.dmp
此處的導(dǎo)出文件只包含元數(shù)據(jù),所以導(dǎo)出文件很小,導(dǎo)出速度也會很快。
3.轉(zhuǎn)移。
將導(dǎo)出的元數(shù)據(jù)文件(此處是exp_users.dmp)和傳輸表空間的數(shù)據(jù)文件(此處是users表空間的數(shù)據(jù)文件user01.dbf)轉(zhuǎn)移至目標主機(轉(zhuǎn)移過程如果使用FTP方式,應(yīng)該注意使用二進制方式)。
4.傳輸。
在目標數(shù)據(jù)庫將表空間插入到數(shù)據(jù)庫中,完成表空間傳輸。在操作系統(tǒng)命令提示符下執(zhí)行下面的語句:
imp username/passwd tablespaces=users transport_tablespace=y file=exp_users.dmp datafiles='users01.dbf'
了解了Oracle的可傳輸表空間技術(shù)后,來看一下example表空間的插入,以下腳本仍然來自mkplug.sql腳本:
完成plugging之后,這個表空間就被包含在了新建的數(shù)據(jù)庫之中。
本文題目:【恩墨學(xué)院】從數(shù)據(jù)庫創(chuàng)建深入學(xué)習(xí)Oracle技術(shù):那些年mkplug偷偷執(zhí)行的Plugin操作
鏈接URL:http://www.chinadenli.net/article38/joipsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、域名注冊、云服務(wù)器、虛擬主機、用戶體驗、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)