第三章 裝載和卸載數據
目標
完成本課,您將會:
*在不同的平臺傳輸表空間
*理解數據泵的總體結構
*監控數據泵作業
*使用數據泵來進行導入和導出
*為數據的population創建外部表
*定義外表屬性
跨平臺可傳輸的表空間
在數據倉庫和數據超市之間簡化數據的分發.
容許數據庫從一個平臺移植到另一個平臺
支持的平臺(略)
跨平臺的可傳輸表空間
在Oracle以前的版本中,可傳輸的表空間的特性可以讓表空間在相同的體系結構和操作系統之間遷移.
oracle 10g進一步的讓你使用可傳輸的表空間的特性,在平臺之間進行傳輸.這樣簡化了從數據倉庫到數據超市之間的分發,超市通常是運行在較小的平臺上的.它也容許數據庫通過重新建立數據字典和傳輸用戶表空間來從一個平臺移植到另外一個平臺.
為了能夠從一個平臺到另外一個平臺傳輸數據文件,你需要保證源系統和目標系統運行在支持的平臺上.另外支持平臺的數目不是很多...
需要相同的字符集.
最小兼容性
源和目標數據庫都必須設置compatible為10.0.0或更高
數據文件頭是平臺相關的
在傳輸之前,確信所有的只讀和脫機文件是平臺相關的
兩個必須是10g數據庫;只讀和脫機的意思是文件頭無log號和checkpoint號
傳輸表空間的過程
要從一個平臺傳輸表空間到另外一個平臺,這個表空間的數據文件必須轉換到源和目標數據庫都能認的格式.盡管在10g,磁盤結構都符合公共格式,但是在源和目標數據庫用不同的高低位也是可以的.當要傳輸到不同的高低位的平臺的時候,你需要使用rman的convert命令來轉換高低位.這個操作既可以在源也可以在目標數據庫做.
假如平臺的高低位是相同的,那就沒有必要做轉換了.基本上過程更以前的一致,除非平臺使用不同的高低位.
查看平臺的高低位
select tp.endian_format
from v$transportable_platform tp,
v$database d
where tp.platform_name = d.platform_name;
數據文件轉換:例(略)
CLOB的例外
在轉換高低位的時候,clob列是跳過的.
當你select的時候,才轉換.
你可以使用create table as select 來進行轉換.
動態性能視圖的改變
v$database-------> PLATFORM_ID
PLATFORM_NAME
ENDIAN_FORMAT
v$transportable_platform
數據泵概覽
高速數據和元數據謙虛的服務器端工具
通過dbms_datapumb調用的結構
提供新一帶的eXPort和import工具:expdb,impdb,web頁面的接口
包含了原來的exp/imp的全功能
數據泵通用體系結構
DIRECT PATH API(DPAPI) :10g支持直接的path api接口,這樣就小化數據轉換和在轉載和卸載的解析時間.
外表服務:數據泵使用新的ORACLE_DATAPUMP訪問驅動這樣就讓外表了讀寫包含二進制流文件
DBMS_METADATA包被工作進程用來在所有的元數據的裝載和卸載.數據庫對象的定義存儲是用xml而不是sql.
DBMS_DATAPUMP包包含了為批數據和元數據遷移高速導入和導出工具的api.
Sql*loader客戶端已經集成到外表中,這樣為外表訪問參數提供了自動遷移loader控制文件.
expdp和impdp客戶端是瘦客戶端,通過調用dbms_datapump包來初始化和監控數據泵操作.今天他們引入了新的功能,
他們依然跟以前的exp和imp兼容.
像db control,復制,傳輸表空間和用戶應用程序都能從這樣的體系結構中受益.sqlplus也許可以為了對正在進行的操作進行簡單的狀態查詢提供了dbms_datapump客戶端
數據泵導出導入概覽
作為后臺作業提交,失敗了可以繼續,每個用戶只有一個進程,數據寫入master表.
數據泵導出導入工具是10g的新工具.盡管他們跟以前的exp/imp很像,但是他們是單獨的產品.
data pump export是為卸載數據和元數據到一套操作系統文件叫做dump文件集的工具.數據泵導入是用來把dump文件集的元數據和數據導入要目標系統中.
數據泵api在服務器端訪問它的文件而不是在客戶端.
這些工具也可以用來在遠程數據庫導出數據,或直接從源數據庫導入到目標數據庫.這就是網絡模式,這種模式一般在導入數據到只讀數據庫非凡的有用.
在每個數據泵操作的核心是主表(master table),用戶運行數據泵作業的時候創建的表.主表維護作業的所有的方便.
在基于文件的導出作業中,主表建立了,在最后一步寫到dump文件集中.相反的,把主表導入到當前用戶的schema中是基于文件導入操作的第一步,也用在順序創建所有要導入的對象.
當數據泵作業正常的完成的時候,主表被刪.
數據泵導入導出的益處
數據訪問方法
直接路徑
外表
分離和重新連接到運行長時間的作業
重新啟動數據泵作業
細度對象選擇
顯示的指定版本
并行操作(企業版)
估算導出作業空間消耗
在分步式環境中的網絡模式
在導入的時候重新計算承受力
數據泵自動決定數據訪問的方式.這些可以是直接路徑也可以是外表.
不影響作業可以分離或重新連接到長運行的作業可以讓你從多個地方來監控作業.所有停止的數據泵作業可以在不丟失數據的情況下重新啟動,盡管足夠的原信息仍然沒有受到影響.不管這個作業是自愿的還是由于錯誤不情意的停止都沒有關系.
exclude,include,content參數用在細度對象篩選上.
你可以為你要移動的對象知道版本參數來創建dump文件集,這樣就會更以前的oracle版本兼容來支持數據泵.這個參數用來保留在以后的版本中.
你也可以使用parallel參數在指定活動執行用來代表這個export的作業服務器進程的最大數.
你也可以使用estimate_only參數來估計導出作業將消耗多少空間.
網絡模式可以讓你從遠程數據庫中直接導出為dump文件集.這可以通過數據庫連接到源數據庫來完成.
在導入的適合,你可以改變目標數據文件的名稱,schema,和表空間.
總體實現概覽
客戶端進程對數據泵api進行調用.一旦作業啟動了,客戶端就不需要了.多個客戶端為了監控或公主作業可以連接或斷開這個作業.
當客戶端登錄到oracle數據庫的適合,就創建了shadow進程.它為數據泵api的請求服務.當受到dbms_datapump.open請求的適合,shadow創建作業,這個作業主要包括創建master表,創建為各種進程通訊的aq對象,創建主控制進程.一旦作業運行了,shadow的主要任務通常包括為客戶接受get_status請求.假如客戶端斷開,shadow也就沒有了.
主控制進程控制數據泵的執行和順序.它維護作業的狀態,作業的描述,主表的重新啟動和dump文件的信息.這個進程名稱為DMnn.
接受到start_job的請求之后,主進程就根據parallel參數的值來創建許多工作進程.工作進程執行mcp受到請求的工作,主頁是裝載和卸載元數據和數據.工作進程的名稱是DWnn.
假如外表的路徑是作為裝載和卸載數據的訪問方法,工作進程根據裝載和卸載的作業協調許多并行服務器進程.這樣使得分區內的裝載和卸載成為可能.
數據泵直接路徑需要考慮的事項
細度訪問控制的表在插入和選擇模式是可以用的
lob類有域索引
現在有clustered的表
分區表的全局索引有單一分區的裝載
bfile或不透明類型的列
引用完整性約束
有嵌入透明類型的varray列
數據泵支持對表的行數據的兩種訪問訪問
使用直接路徑api的直接路徑
外表
數據泵自動的為每個表選擇最合適的訪問方法
當一個表的結構容許它和期望最大的單流性能的時候數據泵就使用直接路徑裝載和卸載數據.
然后假如上面的條件出現了,或者表含有加密列,或導入的表在裝載和卸載的時候分區不一樣,數據泵就使用外表而不是直接路徑去移動數據.
數據泵文件位置
數據泵文件有三種類型
dump文件
日志文件
sql文件
絕對路徑是不支持的
必須使用oracle路徑對象
文件優先級
per-file路徑
Directory參數
data_pump_dir環境變量
dump文件包含要遷移的數據和元數據
log文件記錄這個操作相關的信息
sql文件記錄sqlfile操作的輸出
因為數據泵是基于服務器的而不是客戶端的,
數據泵文件訪問的是oracle的相對路徑.為了安全的考慮,是不支持絕對路徑的.
per-file路徑對象必須為每個dump文件,log文件,sql文件指定.他們是通過冒號分隔的.
數據泵導入導出客戶端通過directory參數來指定目錄對象.這些路徑對象描述了要訪問的文件的位置.
你可以定義環境變量data_pump_dir,指定目錄對象名而不用directory參數.數據泵