中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作

發布時間:2020-08-12 16:59:21 來源:ITPUB博客 閱讀:150 作者:恩墨學院 欄目:關系型數據庫
從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作


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


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

 【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作


圖1 是否包含示例方案


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


 【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作

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


【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作

【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作


【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作



【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作

這個恢復完成之后,接下來最重要的部分就是通過傳輸表空間技術將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):


【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作


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


【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作


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


【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作


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


【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作


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

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腳本:


【恩墨學院】從數據庫創建深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作


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


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



向AI問一下細節

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

AI

迁西县| 寿光市| 河西区| 田阳县| 宾川县| 武陟县| 黔南| 新蔡县| 牙克石市| 连南| 新沂市| 冷水江市| 浙江省| 河源市| 宣汉县| 屏南县| 蕉岭县| 新巴尔虎右旗| 临江市| 荣成市| 奉新县| 乐昌市| 自治县| 会东县| 六盘水市| 巫溪县| 洪雅县| 临颍县| 建瓯市| 望都县| 武功县| 修文县| 乡宁县| 喀什市| 崇义县| 商都县| 双流县| 和林格尔县| 叶城县| 武陟县| 河源市|