zoukankan      html  css  js  c++  java
  • [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server

    一、了解PPAS的迁移方式
    1、在线迁移和离线迁移
    使用Migration Studio或Migration Toolkit直接向PPAS数据库进行对象定义和数据表中数据的迁移称为在线迁移,生成要迁移对象的脚本,在随后的某一时刻在PPAS中执行这些脚本用来恢复对象定义称为离线迁移。

    2、迁移过程
    1)明确需要对哪些数据库对象和数据进行迁移;
    2)了解在迁移过程中可能遇到的问题;
    3)准备迁移环境,安装必要的软件,建立好服务器之间的连接;
    4)迁移过程中,如果有大量数据需要进行处理,那么应在移动数据前先迁移模式中的对象定义(DDL),并验证DDL的迁移结果,并解决所有出现的问题;
    5)对数据进行迁移;
    6)确认数据迁移结果,并解决在迁移结果概要中所报告的问题;
    7)对应用程序进行转换,使应用程序可以在PPAS环境中运行;
    8)进行系统性能测试,对新数据库服务器进行性能调整

    二、一个简单的迁移实例
    1、准备实验环境
    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
    2、准备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/

    3、从Oracle10g迁移到PPAS-9.2
    Migration Tookit的可执行文件为安装目录下bin中的runMTK。
    4、编辑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
    5、给准备迁移的模式的用户赋予dba角色并执行迁移动作
    我这里测试是用scott用户,首先在Oracle中临时给scott用户赋予所有权限
    SQL> grant dba to scott;
    创建与准备迁移的Oracle模式所有者相同的用户,本例为scott;

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

    至此,oracle10g向PPAS9.2的迁移操作成功!

    三、PPAS与Oracle在dblink下的迁移
    1、环境准备:
    ppas9.2.1.3:
    ip:192.168.1.111

    oracle10g 10.2.0.1
    ip:192.168.1.115

    2、创建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数据库已经成功。

    3、编辑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

    4、使用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已经创建成功。

    5、测试dblink
    [root@edbserver ~]# psql -U enterprisedb  
    edb=# select * from dept@edblinkora;
     

    以上是PPAS与Oracle的DBLINK,下面准备迁移

    6、将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包。

    7、编辑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

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

    四、Microsoft SQL Server向PPAS的迁移
    (本次实验使用的是MS SQL Server2005与2008)
    1、编辑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

    2、准备驱动
    下载jtds驱动并放置在/opt/PostgresPlus/9.2AS/jre/lib/ext/目录中。
    下载地址:http://sourceforge.net/projects/jtds/
    这里使用的数据库是SQL Server2005,经过测试,使用jtds-1.2.6版本驱动可以正常迁移。

    3、迁移
    [root@RHEL bin]# ./runMTK.sh -sourcedbtype sqlserver -targetSchema enterprisedb dbo
    -targetSchema为ppas中的目标模式名称,但不能选择information_schema、dbo、sys 或 pg_catalog 作为目标架构。

    -sourcedbtype的值默认为oracle,这里使用sqlserver,所以需要显式的指定-sourcedbtype的值。

    4、对MS SQL Server的迁移的建议
    目前测试过程中发现MS SQL Server的数据类型有money建议修改为numeric(12,4)。

    五、迁移相关参数补充
    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》。


  • 相关阅读:
    7.2集训模拟赛(莫名其妙的比赛......)
    CF1042B Vitamins
    P1629 邮递员送信
    P1726 上白泽慧音
    P2341 [USACO03FALL][HAOI2006]受欢迎的牛 G
    最短路
    7.1集训模拟赛5(......)
    求最大公约数和最小共倍数的方法(除穷举)
    6.29集训模拟赛3(暴力骗分的一天,嘿嘿)
    爬虫认证ES用户,并访问api
  • 原文地址:https://www.cnblogs.com/ode/p/3249895.html
Copyright © 2011-2022 走看看