oracle數據庫遷移---windows環境下


以前在學校只是聽過oracle,但是從來沒有接觸過。最近公司突然給了我一個任務,讓我將某個大型商場的網站遷移到與服務器上面。

當時也覺得,遷移個網站也就是個很簡單的事情,將文件復制,拷貝下就可以了撒。。。誰知說起來容易做起來難。

 

一、概況

  整體的環境狀況:

  源服務器:32位的win2003  tomcat6.0.20  oracle10g

  目標服務器:64位的win2012R2  tomcat6.0.20 oracle11g

 

  第一次做遷移動作,有點無從下手,而且對oracle了解不多,也是邊在網上找資料學習oracle邊在機器上面操作。

二、oracle的備份還原

  oracle備份有邏輯備份和物理備份。

  邏輯備份也就是導入導出命令。即:imp/exp和impdp/expdp

  物理備份又包含了熱備份和冷備份。

  冷備份可以在數據關閉的情況下直接進行文件的拷貝,包括數據文件,日志文件,控制文件等等。

  熱備份可以使用rman備份,也可以在sqlplus中更改表的屬性位只讀,然后進行拷貝。

三、遷移前的准備。

  首先確定的就是數據庫的遷移方式。由於兩台服務器的字長不一樣,本來想使用rman來進行遷移的,然后就詢問了老總,是否可以將雲服務器上面的64位操作系統改為32位的,這樣遷移起來也比較簡單。結果老總否決了。

 在網上查詢點資料,也在群里詢問了一下專業的大牛,最后決定用數據泵來進行數據庫的遷移。 

  數據泵的備份方式包括整庫,用戶,表

  由於對oracle的不熟悉決定使用整庫的方式。

 

  網站的遷移,網站是跑在tomcat上面的,總共3個tomcat,一個用來跑前台,一個用來跑后台,一個用來測試。

  由於不同的tomcat版本性能可能出現不兼容等狀況,所以新的機器上面同樣使用的是tomcat6.0.20

  不過由於這個版本的tomcat不區分32位和64位,(反正我在官網找了半天只找到一個tomcat-6.0.2.zip的包沒有看到有32位和64位之分的包。)

 但是這個版本的tomcat在64位上面安裝好后,只能在命令行里面啟動tomcat,在service服務里面,啟動tomcat服務,會顯示啟動不起來。

四、遷移。

  1.網站的遷移。

    (1)安裝jdk,使用的jdk應和源服務器上面的版本一樣,因為不同的jdk版本可能會出現不同的兼容。

    (2)安裝tomcat,因為要在同一台服務器上面運行好幾個tomcat,所以在命令行里面進行tomcat的安裝。修改catalina里面的catalina_base和catalina_home,然后使用service install  [服務名]來進行tomcat的安裝。服務名設置的不同。

    (3)由於tomcat6.0.20在64位上面安裝好后只能在命令行里面啟動,在服務里面啟動不起來,(報一個錯誤,記不得了)。。通過在網上的大量查詢,終於讓我找到了一個解決方式  64位win系統tomcat6啟動不了

    (4)tomcat安裝完成后,接着就是文件的拷貝,由於在源服務器上面安裝有ftp服務(使用的是serv-u軟件),所以就使用ftp來拷貝文件,應該會比較快,最開始的時候是直接在dos下面使用ftp來拷貝的(如果你覺得沒有進度條看着不舒服,可以在ftp下使用hash命令,屏幕上會打印出##號來。)。。還有一款ftp軟件,拷貝起來速度快的飛起--flashFXP,(記得好像是這個)

    (5)配置tomcat的server.xml

  2.數據庫的遷移。

    (1)由於對oracle的不了解,所以為了不出錯就使用了整庫的導入到處 expdp scott/123123123@orcl  directory=dumpdir datafile=expdp.dmp logfile=exp.log full=y

  使用數據泵導入導出,需要建立目錄,create directory  dumpdir as ‘c:\zz’。然后expdp導出來的文件將會放置到這個目錄下面即c:\zz下面。

  由於在兩個數據庫版本不一樣,其中的某些系統用戶可能有些改變,因此,在目標數據庫上impdp的時候,可能會出現很多的對象找不到,或者無效對象等等的,其實這些有的可以忽略的,不影響數據的,但是有的會影響。

  遷移的時候在使用數據泵導入導出時出現了很多錯誤,而且到了某一步就會停止,經過在網上的查詢是數據泵oracle10g在全庫導出導入的一個bug,這個bug在oracle10g的4版本后面修補了。補丁需要在官網上面下載,由於這個版本比較老了,所以官網上面找不到,需要有許可證登陸才能進行下載,所以在這個遷移項目進行到一半的時候,這個整庫遷移的方式失敗了。於是決定使用用戶的方式來遷移。

 

  之前之所以不用用戶的方式來遷移,是因為我在數據庫中發現了好多用戶,而且用戶和表空間以及數據文件對應關系有點混亂,總是對不上號。后來在詢問了老總以及這個大型商場的負責這塊的人后,決定其他的用戶都拋棄,只需要遷移兩個用戶,一個是前台的用戶A,一個是后台的用戶B。

  按照用戶的導出方式可以使用exp或者expdp都可以,expdp在用戶遷移上面沒有bug。按照用戶A,B導出數據。

  由於之前是按照整庫的導入,可能有些用戶已經導入進去了,為了避免沖突,將數據庫刪除掉重新建立一個數據庫。

  步驟:      為前台用戶單獨建立一個表空間,(如果不建立的話,將使用默認的表空間USER),臨時表空間使用默認的設置。

           create tablespace tp1 datafile ‘c:\aa\tp1.dbf’ size 300m autoextend on next 200m maxsize 20480m                (這里的單位只支持KB和MB)

           創建相應的用戶

           create user qt1 default tablespace tp1 identified by 123123123;

           給用戶授權

           grant connect,resource,dba to qt1

        

同樣的步驟,創建后台用戶ht1.

        然后進行數據的導入,在導入的時候會報一個錯誤,ora-******用戶tp1已存在,這個錯誤可以忽略,不影響數據的導入。

        這是因為數據泵會自動創建用戶,所在在導入的過程中,發現已存在這個用戶,就會報錯,導入的時候可以使用覆蓋選項,記不住了。。這個選項。

    

 

五、測試

    進行相關功能的測試,測試網站是否可以正常運行。

六、遷移完成,但是項目在跑了一天后,后台就崩潰了,tomcat報錯永久帶溢出,增加相應的permsize和maxpermsize大小,由於tomcat是以服務的形式在運行,所以修改catalina等文件沒有作用,因為以服務方式啟動的tomcat不會去讀這些文件,只會去讀注冊表,所以需要在注冊表里的java選項中更改option的值,添加上上面的兩個選項,重啟tomcat。

  但是有的時候還會出現這個問題,所以更改jdk位32位的jdk,原因可能是代碼里的他們給類型的值分配的大小位最大值,而32位和64位的最大值不同,int的最大值差好多,所以可能也是這個原因導致了這個問題。

修改后,網站重啟,現在正常運行中。。


免責聲明!

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



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