[原创]从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》。
[原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server的更多相关文章
- [原创]使用benchmarksql和pgbench对PostgreSQL Plus Advanced Server进行性能测试
一.测试环境 benchmarksql version:4.0.8 rhel 6.3 vmware esxi 二.理解benchmarksql性能测试原理TPC-C 1.理解TPC-C TPC-C模拟 ...
- [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制
一.系统环境 操作系统:Windows Server 2003/2008 两个节点分别为master与slave. 主节点master:172.27.19.28 备机点slave:172.27.19. ...
- [原创]PostgreSQL Plus Advanced Server配合crontab实现定时维护工作
本文要实现的目标1.PostgreSQL定时全备2.定时删除归档WAL文件3.定时删除全备文件4.删除n天之前的数据库日志文件 实验环境操作系统:RHEL 6.3数据库:PostgreSQL Plus ...
- Oracle、Microsoft SQL Server、Mysql
数据库对比.----1.Oracle:最贵,功能最多,安装最不方便,Oracle环境里的其他相关组件最多,支持平台数量一般,使用中等方便,开发中等方便,运维中等方便,不开源,速度最慢,最安全.---- ...
- [原创]PostgreSQL Plus Advanced Server监控工具PEM(四)
四.PEM管理工具 1.编辑配置 选择进行管理的目标服务器,点击菜单Tools->Server Configuration->postgresql.conf管理服务器配置,可以看到我们经常 ...
- [原创]PostgreSQL Plus Advanced Server监控工具PEM(一)
一.概述 PEM是为数据库管理员.系统架构师和性能分析师为管理.监控和优化 PostgreSQL 和 EnterpriseDB 数据库服务器设计的图形化管理工具.旨在解决大量数据库服务器跨地域.精细化 ...
- [原创]PostgreSQL Plus Advanced Server监控工具PEM(二)
2.安装PEM Client 简单两条命令,开始PEM Client的安装. 我们在SUSE 11sp2上安装PEM Client 安装结束,运行PEM Client后可以看到如下的界面: 目前我们并 ...
- [原创]PostgreSQL Plus Advanced Server批量创建分区表写入亿级别数据实例
当前情况:大表的数据量已接近2亿条我的解决思路:为它创建n*100个分区表,将各个分区表放在不同的tablespace上这样做的优点:1.首先是对这个级别的数据表的性能会有所提升2.数据管理更科学3. ...
- [原创]PostgreSQL Plus Advanced Server监控工具PEM(三)
三.使用PEM Client 在PEM Client中连接PEM Server 点击上图所示的按钮或点击菜单-> 第一次连接PEM Server,会有一次导入证书的操作,点击Yes按钮. 接下来 ...
随机推荐
- autoit UIA获取Listview的信息
#include "CUIAutomation2.au3" Opt( ) Global $oUIAutomation MainFunc() Func MainFunc() ; Be ...
- only one is important
今天早上还是去了图书馆,看了一早上的hello world(intel opencl),清楚了程序编写的基本流程,但是,仍和以前一样,貌似看懂了,其实什么也不会,没有发现什么问题.中午,回来取了我的笔 ...
- Error querying database. Cause: java.sql.SQLException: ORA-01745: 无效的主机/绑定变量名
今天调试程序是遇到了,下面的一个问题.我将对应的SQL语句拿到Toad下也能正常的执行,感觉有点莫名其妙,根据异常信息的提示查看对应的映射结果集也没发现错误,然后百度了一下,也有许多朋友也遇到过这样的 ...
- java基础回顾(二)——内部类
一.常规内部类 public class Outer { int count; void say(){ count++; System.out.println("我是外部类"); ...
- NSBundle 的使用
NSBundle 读取图片 plist text NSBundle *mainbundle=[NSBundle mainBundle]; //使mainBundle 对象获取图片的路径 NSStrin ...
- Java中函数的重载
函数的重载 1.同一个类 2.同名函数 3.参数个数不同或者参数类型不同 4.java是严谨性语言,如果函数出现的调用的不确定性,会编译失败. public static int add(int a, ...
- webGL 学习教程
====教程=================== webGL中文网:http://www.hewebgl.com/webGL API:https://developer.mozilla.org/en ...
- tcpdump抓包
名称(NAME)tcpdump-转储网络上的数据流总览(SYNOPSIS)tcpdump[-adeflnNOpqStvx][-ccount][-Ffile] [-iinterface][-rfile] ...
- Android knock code analysis
My colleague she forgot the knock code and ask me for help. I know her phone is LG G3 D855 with Andr ...
- CSS中属性position位置详解功能讲解与实例分析
position有五个值:static.relative.absolute.fixed.inherit. static 是默认值.就是按正常的布局流从上到下从左到右布局,平常我们做网页制作时,没有指定 ...