SQL遷移到ORACLE實例

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

  

SQL遷移到ORACLE實例php

平常運維中,咱們常常會有數據庫不一樣類型的遷移,比較多的就是從sql server遷移到oracle 的狀況,前一階段正好有一個相似的項目進行,我將其中的一些注意事項記錄下來。html

 

1、遷移的方案linux

以前也進行過sql -> oracle的遷移,使用過sql server的dts也單獨本身寫過sqlloader腳本,可是兩種方案都不是很滿意,dts常常出錯,sqlldr的手工編輯很費勁,稍不注意就會寫錯。sql

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

使用ORACLE SQL DEVELOPER進行了操做,效果不錯。數據庫

如下有幾個須要特別注意的事情,提早說,很重要的。windows

  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多的一個文件,幾分鐘搞定。

2、實際步驟服務器

此步驟不少參考絕殤 的內容啊,版權是他的啊。我在其中補充和修正了一些內容。架構

  1.  第一部分:獲取工具

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

直接到文檔最後下載提供的內容便可,注意自行安裝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

相關文章
相關標籤/搜索