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
2、實際步驟服務器
此步驟不少參考絕殤 的內容啊,版權是他的啊。我在其中補充和修正了一些內容。架構
不建議去oracle官網下載,雖然支持到oracle 12C,反正我是沒用它弄好個人sql server 2008 R2到oracle 11G 的轉換,能使用的人若是成功告訴我下。oracle
直接到文檔最後下載提供的內容便可,注意自行安裝jre6
2. 下載SQL SERVER的驅動程序
絕殤說的」點擊菜單幫助,選擇檢查更新,彈出檢查更新嚮導窗口」我一直沒成功,我只好本身自行下載了jtds-1.2.2-dist,這個我也提供了下載。關聯方式以下
啓動develop -----工具-----首選項-------數據庫-----第三方jdbc驅動程序,添加條目選中jtds的文件,而後重啓develop便可。
基本和文檔同樣(不清楚腳本見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