溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作

發(fā)布時間:2020-08-12 16:59:21 來源:ITPUB博客 閱讀:141 作者:恩墨學院 欄目:關系型數(shù)據(jù)庫
從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作


在很多Oracle文檔中,可能大家都注意過Oracle用來進行測試的一個表空間,這個表空間中有一系列預置的用戶和數(shù)據(jù),可以用于數(shù)據(jù)庫或BI的很多測試實驗。


這個表空間在使用模板建庫時是可以選擇的,在如下圖所示的這個界面中,可以選擇建庫時包含這個范例表空間(缺省是未選擇的)。

 【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作


圖1 是否包含示例方案


在DBCA的的配置過程中,如果選擇了包含示例方案,則最后生成的 cloneDBCreation.sql 腳本將會與標準模式有所改變,主要增加了如下語句(在11g、12c等新版本中基本沒有變化):


 【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作

看到這里,再次引用了模板目錄中的文件,通過 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文件中恢復數(shù)據(jù)文件:


【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作

【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作


【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作



【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作

這個恢復完成之后,接下來最重要的部分就是通過傳輸表空間技術將example表空間導入到當前的數(shù)據(jù)庫。


考慮一下這種情況,當進行跨數(shù)據(jù)庫遷移時,需要將一個用戶表空間中的數(shù)據(jù)遷移到另外一個數(shù)據(jù)庫,應該使用什么樣的方法呢?


最常規(guī)的做法可能是通過EXP工具將數(shù)據(jù)全部導出,然后在目標數(shù)據(jù)庫上IMP導入,可是這種方法可能會比較緩慢。EXP工具同時還提供另外一種技術-可傳輸表空間技術,可以用于加快這個過程。


在exp –help的幫助中,可以看到這樣一個參數(shù):


TRANSPORT_TABLESPACE 導出可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)


通過這個選項,我們可以對一組自包含、只讀的表空間只導出元數(shù)據(jù),然后在操作系統(tǒng)層將這些表空間的數(shù)據(jù)文件拷貝至目標平臺,并將元數(shù)據(jù)導入數(shù)據(jù)字典(這個過程稱為插入,plugging),即完成遷移。


注意

傳輸表空間技術不能應用于SYSTEM表空間。

對于可傳輸表空間有一個重要概念:自包含(Self-Contained)

在表空間傳輸?shù)闹?,要求表空間集為自包含的,自包含表示用于傳輸?shù)膬?nèi)部表空間集沒有引用指向外部表空間集。自包含分為兩種:一般自包含表空間集和完全(嚴格)自包含表空間集。


常見的以下情況是違反自包含原則的:

§  索引在內(nèi)部表空間集,而表在外部表空間集(相反地,如果表在內(nèi)部表空間集,而索引在外部表空間集,則不違反自包含原則)。

§  分區(qū)表一部分區(qū)在內(nèi)部表空間集,一部分在外部表空間集(對于分區(qū)表,要么全部包含在內(nèi)部表空間集中,要么全不包含)。

§  如果在傳輸表空間時同時傳輸約束,則對于引用完整性約束,約束指向的表在外部表空間集,則違反自包含約束;如果不傳輸約束,則與約束指向無關。

§  表在內(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):


【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作


執(zhí)行嚴格自包含檢查(full_check=true):


【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作


反過來對于USERS表空間來說,非嚴格檢查也是無法通過的:


【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作


但是可以對多個表空間同時傳輸,則一些自包含問題就可以得到解決:


【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作


表空間自包含確認之后,進行表空間傳輸就很方便了,一般包含如下幾個步驟。

1.將表空間設置為只讀:

alter tablespace users read only;

2.導出表空間。在操作系統(tǒng)提示符下執(zhí)行:

exp username/passwd tablespaces=users transport_tablespace=y file=exp_users.dmp

此處的導出文件只包含元數(shù)據(jù),所以導出文件很小,導出速度也會很快。

3.轉移。

將導出的元數(shù)據(jù)文件(此處是exp_users.dmp)和傳輸表空間的數(shù)據(jù)文件(此處是users表空間的數(shù)據(jù)文件user01.dbf)轉移至目標主機(轉移過程如果使用FTP方式,應該注意使用二進制方式)。

4.傳輸。

在目標數(shù)據(jù)庫將表空間插入到數(shù)據(jù)庫中,完成表空間傳輸。在操作系統(tǒng)命令提示符下執(zhí)行下面的語句:

imp username/passwd tablespaces=users transport_tablespace=y file=exp_users.dmp datafiles='users01.dbf'

了解了Oracle的可傳輸表空間技術后,來看一下example表空間的插入,以下腳本仍然來自mkplug.sql腳本:


【恩墨學院】從數(shù)據(jù)庫創(chuàng)建深入學習Oracle技術:那些年 mkplug 偷偷執(zhí)行的Plugin操作


完成plugging之后,這個表空間就被包含在了新建的數(shù)據(jù)庫之中。


恩墨學院隸屬于云和恩墨(北京)信息技術有限公司,致力于提供專業(yè)高水準的oracle數(shù)據(jù)庫與大數(shù)據(jù)培訓服務,挖掘培養(yǎng)大數(shù)據(jù)與數(shù)據(jù)庫人才。恩墨學院提供包括個人實戰(zhàn)技能培訓、個人認證培訓、企業(yè)內(nèi)訓在內(nèi)的全方位大數(shù)據(jù)和數(shù)據(jù)庫技術培訓。ACE級別超強師資,配備專業(yè)實驗室,沉浸式學習與訓練,專業(yè)實驗室、配備專業(yè)助教指導訓練。能迅速融入專家圈子,業(yè)內(nèi)資源豐富,迅速積累職場人脈。oracle數(shù)據(jù)庫課程包括:Oracle DBA實戰(zhàn)班、Oracle OCM考試、Oracle OCP考試等。



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI