SQL遷移到ORACLE實例


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 data

infile 'data/dbo_jzprod.CARDCOMBINATIONDETAIL.dat'

 "str '<EORD>'"

into table dbo_jzprod.CARDCOMBINATIONDETAIL

fields 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM