SQL遷移到ORACLE執行個體

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   使用   ar   strong   檔案   

nohup ./command.sh > output 2>&1 &

  

SQL遷移到ORACLE執行個體

日常營運中,我們經常會有資料庫不同類型的遷移,比較多的就是從sql server遷移到oracle 的情況,前一階段正好有一個類似的項目進行,我將其中的一些注意事項記錄下來。

 

一、遷移的方案

之前也進行過sql -> oracle的遷移,使用過sql server的dts也單獨自己寫過sqlloader指令碼,但是兩種方案都不是很滿意,dts經常出錯,sqlldr的手工編輯很費勁,稍不注意就會寫錯。

這次參考了http://www.cnblogs.com/hiizsk/archive/2011/07/10/2102452.html

使用ORACLE SQL DEVELOPER進行了操作,效果不錯。

以下有幾個需要特別注意的事情,提前說,很重要的。

  1. ORACLE SQL DEVELOPER不是pl/sql developer,這個要注意啊
  2. ORACLE SQL DEVELOPER的版本問題,上面地址參考文檔或者從oracle官方網站下載的我都沒有實驗成功,反而到是一個比較老的版本3.0.04的版本實驗成功了,在文檔最後我提供了下載,這個版本是沒有jre的,對應的是6不是7啊,請自行安裝,在首次啟動並執行時候提示指定jre6的路徑,指定對了就可以正常運行了。
  3. 上面文檔中沒有提及怎麼匯入,這個是非常重要的,需要將匯出的文檔上傳到伺服器執行。
  4. 編碼,這個是折騰我最多的內容,因為sql server2008 R2不支援bcp的utf-8匯出,但是oracle 生產機現在基本都是al32utf8的,所以需要手工將匯出的data檔案夾的內容轉碼到utf-8.EditPlus有一個批量轉碼的功能,非常好用對小檔案大量操作很好,我的480多個檔案基本都是靠它完成的。對於大於100M以上的檔案editplus完全hang不住,只能使用ultraedit,我用它執行2G多的一個檔案,幾分鐘搞定。

二、實際步驟

此步驟很多參考絕殤 的內容啊,著作權是他的啊。我在其中補充和修正了一些內容。

  1.  第一部分:擷取工具

不建議去oracle官網下載,雖然支援到oracle 12C,反正我是沒用它弄好我的sql server 2008 R2到oracle 11G 的轉換,能使用的人如果成功告訴我下。

直接到文檔最後下載提供的內容即可,注意自行安裝jre6

    2.   下載SQL SERVER的驅動程式

     絕殤說的”點擊菜單協助,選擇檢查更新,彈出檢查更新嚮導視窗”我一直沒成功,我只好自己自行下載了jtds-1.2.2-dist,這個我也提供了下載。關聯方式如下

 啟動develop -----工具-----喜好設定-------資料庫-----第三方jdbc驅動程式,添加條目選中jtds的檔案,然後重啟develop即可。

  1. 串連oraclesql,建立賬戶

基本和文檔一樣(不清楚指令碼見http://www.cnblogs.com/hiizsk/archive/2011/07/10/2102452.html),這裡多說一句,預設新建立的使用者的預設資料表空間是user,我不建議這樣,建立立一個資料表空間,然後建立的MIGRATONS使用者的資料表空間使用建立的,盡量不要影響預設資料表空間。

另外後面指令碼執行完畢後,建立的表的預設空間也是user,這個時候匯入資料前建議在建立一個資料表空間,將這些表移動到新資料表空間如newtbs。

Select ‘alter table ‘||table_name||‘ move tablespace newtbs;‘ from user_all_tables;

 3. 資料庫移植嚮導等

完全可按照文檔執行,最後一步也是離線即可。

(1)SqlServer中的架構到Oracle中的模式,名稱的處理

這部分不用這麼處理,後面我有更好的辦法,跳過

(2)轉移資料

從這部分後,文檔語焉不詳,其實這才是執行匯入容易出錯的地方。首先匯出資料執行unload_script [server] [username] [password]

這個執行可以在本機使用cmd執行,注意看下產生的目錄結構如下

 

匯出資料可以在2014-09-28_17-02-42下執行unload_script.bat

我的項目匯出10G左右大概在十幾分鐘即可。

        接下來就是轉碼工作了,在的data目錄中,選中檔案使用editplus或者ultraedit就可以把檔案轉碼到utf8格式。

(3)匯入資料

把全部的檔案上傳到linux伺服器(你的oracle不會運行在windows下吧?)

 

(1) 修改shell檔案

修改dbo檔案下的oracle_ctl.sh檔案

增加

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

 

注意這裡的值是你目的oracle的nls值,可以自行查詢

如果您的檔案中有類似我的超過500M的大檔案,修改預設的sqlldr語句

預設:

sqlldr $1/$2 control=control/dbo_jzprod.uf_bud_payoutdetthird.ctl log=log/dbo_jzprod.uf_bud_payoutdetthird.log

 

在後面增加下面的語句採用平行append方式,跳過索引

 direct=true parallel=true skip_index_maintenance=true

 

(2) 修改control檔案

如果你使用了上面的direct=true的資料,那對應的control檔案也需要修改,如上面的dbo_jzprod.uf_bud_payoutdetthird,control檔案在control目錄下,如:

load datainfile ‘data/dbo_jzprod.CARDCOMBINATIONDETAIL.dat‘ "str ‘<EORD>‘"into table dbo_jzprod.CARDCOMBINATIONDETAILfields terminated by ‘<EOFD>‘trailing nullcols

需要在into 之前增加APPEND

(3) 執行

執行shell,可能大家覺得非常簡單,但是也需要有些注意事項

./**.sh 沒問題,但是我們需要注意,我們需要執行dbo目錄下的shell

因為預設的developer給我們產生了很多層的sh,我們需要執行最內層的sh

3.1:^M的問題:

 我們編輯的sh,執行會報錯,vi會發現內部的每行最後存在一個^M

 使用如下代碼即可。

 :1,$ s/^M//g

^M 輸入方法: ctrl+V ,ctrl+M

3.2:後台運行

 直接運行shell需要時間比較長,我們採用nohup後台進程啟動並執行方式

 

nohup ./command.sh > output 2>&1 &

注意這裡斷行符號exit一直到退出此進程,然後重新啟動一個新進程

Tail –f output觀測實際的進展即可。

3.3 最後匯出成功後,需要重建索引並且遷移到單獨的資料表空間,對lob欄位單獨資料表空間儲存等

 

oracle sql developer:http://pan.baidu.com/s/1hq7oIUg

jtds:http://pan.baidu.com/s/1sjO7vop

SQL遷移到ORACLE執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.