資料庫和表空間資料移動

litterbaby發表於2007-04-01

[@more@]

跨平臺可傳輸表空間

在資料倉儲之間簡單的資料分佈

允許資料庫從一個平臺到另一個平臺的遷移

最小相容水平

源資料庫和目標資料庫必須相容到10.0.0或者更高

資料檔案頭是platform-aware

Oracle中有不同的endian的區別不同的平臺有不同的endian究竟什麼是endian在網上找到關於Big-endianLittle-endian的區別,其實Big-endianLittle-endian就是位元組排序。

Big-Endian Little-Endian 位元組排序

位元組排序

含義

Big-Endian

一個Word中的高位的Byte放在記憶體中這個Word區域的低地址處。

Little-Endian

一個Word中的低位的Byte放在記憶體中這個Word區域的低地址處。

必須注意的是:表中一個Word的長度是16位,一個Byte的長度是8位。如果一個數超過一個Word的長度,必須先按Word分成若干部分,然後每一部分(即每個Word內部)Big-Endian或者Little-Endian的不同操作來處理位元組。一個例子:如果我們將0x1234abcd寫入到以0x0000開始的記憶體中,則結果為
big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x34 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12
(
注意:0xab換算成2進位制是10101011,是個8位的數。我剛才居然當成4位了,自己把自己搞暈了,shit)

疑問:為什麼要以一個Word為基礎單位來分割而不是一個DoubleWord或者Byte?究竟就是這麼定義的還是跟具體的CPU有關,跟具體的模式(比如說16位模式、32位模式、64位模式的LEBE定義會不同)有關?我實在是不清楚,望知道的大俠不吝指點,也希望有這方面資料(文章、程式碼)的朋友貼一些上來。

網友“問題男”回覆:

目前的儲存器,多以byte為訪問的最小單元,於是endian的問題應運而生了,當一個邏輯上的整理必須分割為物理上的若干單元時就存在了先放誰後放誰的問題

存在“如果說"word或者說字長根本就沒關係",假設有一資料檔案裡面有N多數順序排布,如果想以Little-Endian format讀入記憶體某區域,那麼應該怎麼讀?怎麼排?”這樣的問題是由於對於endian的實質理解的偏差,endian指的是當物理上的最小單元比邏輯上的最小單元小時,邏輯到物理的單元排布關係。這裡的“有一資料檔案裡面有N多數順序排布”,這個“有一資料”顯然不是邏輯上的最小單元,而其中的“N多數”的一個才是邏輯最小單元,於是可應用樓主表格中的原則排列,而“N多數”之間的順序則是由這“N多數”的宿主決定的,比如是你寫的程式,這個順序由你決定

剛才談到了,endian指的是當物理上的最小單元比邏輯上的最小單元小時,邏輯到物理的單元排布關係。我們們接觸到的物理單元最小都是byte,在通訊領域中,這裡往往是bit,不過原理也是類似的。

實踐可以給你更多的經驗,比如在一個嵌入式系統的通訊協議中,從底層射頻驅動到上層的協議棧全部需要實現,那麼很可能遇到多個endian的問題,底層的bit序、協議層的byte序、應用層的byte序,這些都是不同的概念

網友“rovershen ”回覆:

沒記錯的話,除了moto68K系列和decsparcbig endian外,常見的cpu都是little endianARM同時支援biglittle,實際應用中通常使用little endian。我所說的指標轉換,實際上指編譯器的隱式處理。

假設有個32位的整數,地址是0x10000000,現在要將它作為16位整數處理,忽略高位,如果是little endian,則直接從0x10000000取得,而如果是big endian,則要從0x10000002取得。

網友“穿越無邊”回覆:

這兩個術語來自於 Jonathan Swift 的《《格利佛遊記》其中交戰的兩個派別無法就應該從哪一端--小端還是大端--開啟一個半熟的雞蛋達成一致。:)

在那個時代,Swift是在諷刺英國和法國之間的持續衝突,Danny Cohen,一位網路協議的早期開創者,第一次使用這兩個術語來指代位元組順序,後來這個術語被廣泛接納了

摘自《深入理解計算機系統》

很好的一本書:)

endian”這個詞出自《格列佛遊記》。小人國的內戰就源於吃雞蛋時是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開,由此曾發生過六次叛亂,其中一個皇帝送了命,另一個丟了王位。

我們一般將endian翻譯成“位元組序”,將big endianlittle endian稱作“大尾”和“小尾”。

可以透過查詢檢視v$transportable_platform來確定當前資料庫的endian。例如在Windows平臺上可以看到他的時litter

SQL> SELECT tp.endian_format

2 FROM v$transportable_platform tp,

3 v$database d

4 WHERE tp.platform_name = d.platform_name

5

SQL> /

ENDIAN_FORMAT

--------------

Little

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/222350/viewspace-907890/,如需轉載,請註明出處,否則將追究法律責任。

相關文章