【恩墨學院】從資料庫建立深入學習Oracle技術:那些年 mkplug 偷偷執行的Plugin操作
在很多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之後,這個表空間就被包含在了新建的資料庫之中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28530558/viewspace-2150068/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【恩墨學院】恩墨學院獲得Oracle WDP全國授權Oracle
- 【恩墨學院】深入剖析 Group Replication核心的引擎特性
- 【恩墨學院】深入剖析 - Oracle SCN機制詳細解讀Oracle
- 【恩墨學院】原來銀行都在用這些資料庫資料庫
- 【恩墨學院】基於裸資料的異地資料庫效能診斷與最佳化資料庫
- 【恩墨學院】美團點評資料庫高可用架構的演進與設想資料庫架構
- 【恩墨學院】賴瑞·艾利森親自支招,資料庫自動化之後,DBA何去何從?資料庫
- 【恩墨學院】Oracle Redo的產生場景及最佳化Oracle Redo
- DC學院學習筆記(九):利用Python進行資料庫操作筆記Python資料庫
- 【恩墨學院】5分鐘速成Oracle 12.2 RAC 專家Oracle
- 【恩墨學院】資料架構:從AT&T到青海移動的多租戶資料整合實踐架構
- 【恩墨學院】深入解讀Oracle 18c對於DBA的影響及應對措施Oracle
- 【恩墨學院】資料架構:中國電信的Oracle Sharding架構應用案例分析架構Oracle
- 【恩墨學院】5 分鐘帶你看懂 DockerDocker
- 【恩墨學院】阿里雲資料庫CloudDBA的自動運維與智慧最佳化探索阿里資料庫Cloud運維
- 大資料學習開發技術:MapReduce執行原理大資料
- 【恩墨學院】 Oracle 資料庫版本釋出計劃變更:下一版本將是 18Oracle資料庫
- 【恩墨學院】深度學習在美團點評推薦平臺排序中的運用深度學習排序
- 【恩墨學院】如何理解並正確使用MySql索引MySql索引
- 【雲和恩墨】內外兼修:Oracle ACED熊軍談Oracle學習Oracle
- oracle 學習總結篇一: 資料庫的建立Oracle資料庫
- 【恩墨學院】深入剖析:關於cache buffers chains的經典案例處理詳解?AI
- 資料庫週刊17│OceanBase上雲;Oracle 的歷史;恩墨學院PG初、中級認證培訓開啟...資料庫Oracle
- 【恩墨學院】從商用到開源:DB2遷移至MySQL的最佳實踐DB2MySql
- 墨者學院-SQL手工注入漏洞測試(MySQL資料庫)MySql資料庫
- 【恩墨學院】Oracle DG測試failover和後續恢復報告OracleAI
- 對執行中的Mysql資料庫建立從庫MySql資料庫
- 【恩墨學院】Bad Rabbit病毒引發的企業資料安全的思考與應對方案
- 【恩墨學院】深入解析:一主多備DG環境,failover的實現過程詳解AI
- 【恩墨學院】空與非空 EMPTY_LOB和NULL的區別Null
- 深入學習redis 的執行緒模型Redis執行緒模型
- 從 Oracle 日誌解析學習資料庫核心原理Oracle資料庫
- 【從零開始學習Oracle資料庫】(4)建立表與增刪改和資料庫事務Oracle資料庫
- 學習大資料需要掌握的知識,需要學習的資料技術大資料
- 【深入學習JVM 01】執行時資料區域劃分JVM
- 【恩墨學院】 盤點 Oracle 11g 中新特性帶來的10大效能影響(下)Oracle
- 【恩墨學院】走在專家的路上,每天一條SQL最佳化SQL
- 【恩墨學院】運維經驗:回滾段異常的特殊救急方法運維