[原創]從Oracle和Microsoft Sql Server遷移到PostgreSQL Plus Advanced Server

1、瞭解PPAS的遷移方式
一、在線遷移和離線遷移
使用Migration Studio或Migration Toolkit直接向PPAS數據庫進行對象定義和數據表中數據的遷移稱爲在線遷移,生成要遷移對象的腳本,在隨後的某一時刻在PPAS中執行這些腳本用來恢復對象定義稱爲離線遷移。

二、遷移過程
1)明確須要對哪些數據庫對象和數據進行遷移;
2)瞭解在遷移過程當中可能遇到的問題;
3)準備遷移環境,安裝必要的軟件,創建好服務器之間的鏈接;
4)遷移過程當中,若是有大量數據須要進行處理,那麼應在移動數據前先遷移模式中的對象定義(DDL),並驗證DDL的遷移結果,並解決全部出現的問題;
5)對數據進行遷移;
6)確認數據遷移結果,並解決在遷移結果概要中所報告的問題;
7)對應用程序進行轉換,使應用程序能夠在PPAS環境中運行;
8)進行系統性能測試,對新數據庫服務器進行性能調整

2、一個簡單的遷移實例
一、準備實驗環境
PPAS9.2,RHEL6.3 64bit,Oracle 10g 10.2.0.1/4

安裝Oracle
Oracle版本:10.2.0.1
全局數據庫名:oraedb SID:oraedb
IP:192.168.1.115
監聽端口:1521

安裝PPAS
PPAS版本:9.2.1.3
IP地址:192.168.1.221
其餘默認安裝

第三方驅動下載地址
http://www.enterprisedb.com/downloads/third-party-jdbc-drivers
二、準備jdbc驅動
掛載光盤或ISO鏡像文件做源mount -o loop -t iso9660 /home/rhel_6_3_64bit.iso /mnt/cdrom
在PPAS主機上配置好redhat的yum源以後安裝jdk
[root@rhel home]# yum install java-1.6.0-openjdk
[root@rhel home]# java -version
我安裝的Oracle版本是10.2.0.1,PPAS主機上的jdk版本是1.6.0_24,在Oracle官方網站下載對應的jdbc驅動。關於jdbc驅動驅動包的名稱和它們的做用:
classes12.jar  - JDK 1.2 和 JDK 1.3下使用
classes12_g.jar - 和classes12.jar相同, 可是包中的類使用"javac -g"命令編譯,包含調試信息.
classes12dms.jar - 和classes12.jar相同, 可是包含一些附加的代碼支持Oracle Dynamic Monitoring Service.
classes12dms_g.jar - 和 classes12dms.jar相同,可是包中的類使用"javac -g"編譯,包含調試信息.
ojdbc14.jar - JDK 1.4下使用
ojdbc14_g.jar - 和ojdbc14.jar相同,可是包中的類使用"javac -g"編譯,包含調試信息.
ocrs12.jar - 引入了javax.sql.rowset接口, 如CachedRowSet 和 WebRowSet. 能夠在 JDK 1.2, 1.3, 和 1.4下使用.
orai18n.jar - 使用在JDK 1.2, 1.3 和 1.4下的NLS(National Language Support,國家語言支持)類.這個jar包替換了老的nls_charset jar/zip 文件.
他們在Oracle安裝目錄中的具體地址:/oracle/product/10.2.0/db_1/jdbc,oracle的官方網站,sun官方站點都有。
Java是能夠向下兼容的,使用JDK1.6,用classes12.jar是可使用的,固然用ojdbc14.jar 更沒問題,可是若是JDK是1.3,那麼只能用classes12.jar。
將JDBC驅動複製到PPAS的如下目錄中:
[root@rhel ~]# cp ~/*.jar /opt/PostgresPlus/9.2AS/jre/lib/ext/
[root@rhel ~]# ls /opt/PostgresPlus/9.2AS/jre/lib/ext/

三、從Oracle10g遷移到PPAS-9.2
Migration Tookit的可執行文件爲安裝目錄下bin中的runMTK。
四、編輯tookit.properties文件
[root@rhel ~]# vim /opt/PostgresPlus/9.2AS/etc/toolkit.properties
如下是文件內容:
SRC_DB_URL=jdbc:oracle:thin:@192.168.1.115:1521:oraedb
SRC_DB_USER=scott
SRC_DB_PASSWORD=TIGER

TARGET_DB_URL=jdbc:edb://localhost:5444/oraedb
TARGET_DB_USER=scott
TARGET_DB_PASSWORD=TIGER
五、給準備遷移的模式的用戶賦予dba角色並執行遷移動做
我這裏測試是用scott用戶,首先在Oracle中臨時給scott用戶賦予全部權限
SQL> grant dba to scott;
建立與準備遷移的Oracle模式全部者相同的用戶,本例爲scott;

六、遷移
[root@rhel bin]# ./runMTK.sh -users scott scott

至此,oracle10g向PPAS9.2的遷移操做成功!

3、PPAS與Oracle在dblink下的遷移
一、環境準備:
ppas9.2.1.3:
ip:192.168.1.111

oracle10g 10.2.0.1
ip:192.168.1.115

二、建立dblink
這裏要建立的是oci-dblink,首先配置PPAS的OCI庫。先從oracle官網下載instance client 11,解壓後放在/opt/目錄中。
修改目錄的全部者爲enterprisedb:
[root@edbserver opt]# chown -R enterprisedb.enterprisedb instantclient_11_2/
建名稱爲libclntsh.so的軟鏈接指向libclntsh.so.11.1
[root@edbserver opt]# ln -s /opt/instantclient_11_2/libclntsh.so.11.1 /opt/instantclient_11_2/libclntsh.so
在遷移時可能會遇到錯誤ERROR: unable to load OCI library: libnnz11.so: cannot open shared object file: No such file or directory,複製libnnz11.so到系統lib64目錄去即可以解決。
[root@edbserver bin]# cp /opt/instantclient_11_2/libnnz11.so /lib64/

從oracle數據庫服務器複製tnsnames.ora文件到instance client目錄
[root@edbserver ~]# scp root@192.168.1.115:/oracle/product/10.2/db_1/network/admin/tnsnames.ora /opt/instantclient_11_2/network/admin/
編輯root用戶的bashrc文件
[root@edbserver ~]# vim ~/.bashrc
加入Oracle相關的環境變量並使之生效
export ORACLE_HOME=/opt/instantclient_11_2  
export PATH=$PATH:$ORACLE_HOME
export TNS_ADMIN=$ORACLE_HOME/network/admin  
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
[root@edbserver ~]# source ~/.bashrc
[root@edbserver ~]# echo $ORACLE_HOME
運行sqlplus進行測試
[root@edbserver instantclient_11_2]# sqlplus scott/tiger@192.168.1.115:/oraedb
這時sqlplus鏈接Oracle數據庫已經成功。

三、編輯postgresql.conf文件
[root@edbserver ~]# vim /opt/PostgresPlus/9.2AS/data/postgresql.conf
修改oracle_home參數的值爲oci庫所在位置:/opt/instantclient_11_2,這個參數僅僅在使用oracle oci纔有用。
編輯完以後須要作一次重啓操做:
[root@edbserver opt]# /etc/init.d/ppas-9.2 restart

四、使用psql建立dblink
[root@edbserver ~]# psql -U enterprisedb
edb=# CREATE PUBLIC DATABASE LINK edblinkora CONNECT TO scott IDENTIFIED BY 'tiger' USING oci '//192.168.1.115/oraedb';
其中,edblinkora是dblink的名稱,oracle爲scott用戶,密碼tiger,使用oci,最後是鏈接oracle數據庫的鏈接字符串。提示「CREATE DATABASE LINK」代表dblink已經建立成功。

五、測試dblink
[root@edbserver ~]# psql -U enterprisedb  
edb=# select * from dept@edblinkora;
 

以上是PPAS與Oracle的DBLINK,下面準備遷移

六、將jdbc驅動copy到PPAS的驅動目錄
[oracle@oraserver lib]$ scp /oracle/product/10.2/db_1/jdbc/lib/ojdbc14.jar root@192.168.1.111:/opt/PostgresPlus/9.2AS/jre/lib/ext/
這裏須要注意一點:在複製oracle的jdbc驅動時,不要用*.*所有複製,應該須要哪個就複製哪個,不然會有錯誤Exception in thread "main" java.lang.NoClassDefFoundError: oracle/dms/instrument/ExecutionContextForJDBC。在這裏我只須要ojdbc14.jar這一個jar包。

七、編輯toolkit.properties文件
[root@rhel ~]# vim /opt/PostgresPlus/9.2AS/etc/toolkit.properties
如下是文件內容:
SRC_DB_URL=jdbc:oracle:thin:@192.168.1.115:1521:oraedb
SRC_DB_USER=scott
SRC_DB_PASSWORD=tiger

TARGET_DB_URL=jdbc:edb://localhost:5444/oraedb
TARGET_DB_USER=enterprisedb
TARGET_DB_PASSWORD=000000

八、開始遷移
[root@edbserver ~]# cd /opt/PostgresPlus/9.2AS/bin
[root@edbserver bin]# ./runMTK.sh -users scott -copyViaDBLinkOra scott

4、Microsoft SQL Server向PPAS的遷移
(本次實驗使用的是MS SQL Server2005與2008)
一、編輯tookit.properties文件
[root@rhel ~]# vi /opt/PostgresPlus/9.2AS/etc/toolkit.properties
SRC_DB_URL=jdbc:jtds:sqlserver://192.168.1.65:53024/bookmanage
SRC_DB_USER=sa
SRC_DB_PASSWORD=111111

TARGET_DB_URL=jdbc:edb://localhost:5444/bookmanage
TARGET_DB_USER=enterprisedb
TARGET_DB_PASSWORD=111111

二、準備驅動
下載jtds驅動並放置在/opt/PostgresPlus/9.2AS/jre/lib/ext/目錄中。
下載地址:http://sourceforge.net/projects/jtds/
這裏使用的數據庫是SQL Server2005,通過測試,使用jtds-1.2.6版本驅動能夠正常遷移。

三、遷移
[root@RHEL bin]# ./runMTK.sh -sourcedbtype sqlserver -targetSchema enterprisedb dbo
-targetSchema爲ppas中的目標模式名稱,但不能選擇information_schema、dbo、sys 或 pg_catalog 做爲目標架構。

-sourcedbtype的值默認爲oracle,這裏使用sqlserver,因此須要顯式的指定-sourcedbtype的值。

四、對MS SQL Server的遷移的建議
目前測試過程當中發現MS SQL Server的數據類型有money建議修改成numeric(12,4)。

5、遷移相關參數補充
linux下./runMTK.sh的基本參數
./runMTK.sh schema_name
schema_name參數是在源數據庫中須要遷移的模式名稱,在runMTK命令中必須至少包含一個schema_name的參數

-sourcedbtype db_type
指定源數據庫類型,db_type的值:mysql,oracle,sqlserver,sybase

-offlineMigration
離線遷移
[root@rhel ~]# mkdir /opt/mtk/
[root@rhel ~]# ./runMTK.sh -users scott -offlineMigration /opt/mtk scott

-schemaOnly和-dataOnly
在缺省狀況下,當遷移模式時,Migration tookit同時導入數據和對象定義(DDL),若是想只導入數據或對象定義(DDL),可使用這兩個參數。

還有其餘的遷移選項開關,能夠參考PPAS官方文檔《Postgres_Plus_Migration_Guide_9_2.pdf》。


java

相關文章
相關標籤/搜索