GoldenGate异构数据复制系列_SQLServer到Oracle (2)

2023-02-21 00:00:00 选择 数据 数据库 迁移 目标

背景介绍

本公众号前段时间曾经发表过一篇文章,介绍了在用GoldenGate进行从SQL ServerOracle数据库之间的异构数据复制时,采用SQL Server的导入/导出工具,实现数据的初始化。今天我们依然是用GoldenGate实现两个异构数据库之间的数据复制,但是我们将采用另外一种方法,使用Oracle SQL Developer工具来进行数据初始化。

 

Oracle SQL Developer可以通过集成第三方工具,来连接非Oracle数据库。首先我们先安装Oracle SQL Developer,从Oracle官方网站上下载,下面是下载链接:

http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

选择包含JDK的版本,如图:

 

 

Oracle SQL Developer需要安装第三方驱动 jTDS JDBC driver,才能访问Microsoft SQL Server,我们可以通过以下面的链接下载:

http://downloads.sourceforge.net/jtds/jtds-1.2-dist.zip?modtime=1131459277&big_mirror=0

把下载下来的压缩包解压,在后面的步骤中,我们将用到文件jtds.jar

 

安装jTDS Driver

启动Oracle SQL Developer,点开“Tools”菜单,选择“Preferences”,

 

 

 

在“Preferences ”窗口,选择“Database”下的选项“Third Party JDBC Drivers”

 

 

点击“Add Entry”按钮,在“Select Path Entry”窗口中,找到前面步骤中I啊在的jTDS JDBC驱动 jtds.jar 文件,选中该文件。

 


 

点击OK,完成安装。


 


 

现在我们可以用Oracle SQL Developer连接SQL Server数据库了。

 

连接到SQL Server

在开始后面的操作前,需要配置SQL Server数据库,使之能接受TPC连接,具体步骤参见SQL Server相关文档。

进入Oracle SQL Developer主界面,点开Connections按钮,选择“New Connections

 

 

在“ New/Select Database Connection”窗口中,选择“SQLServer”标签

填写SQL Server的相关信息:连接名、用户、口令、主机名、端口等

 

 

在“ Retrieve database”的下来菜单中选择我们需要复制的源数据库LJPTPC

 

 

点击Save按钮保存刚刚新建的连接,同时点击Connect按钮,连接到源库。

 

 

设置数据捕获和应用

在开始导入/导出前,需要将源库(SQL Server 2008)离线,确保在数据初始化过程中,源库的数据处于静止状态。等数据初始化完成后,在源库上线前(业务应用访问源SQL Server前),应先启动源端GG的数据抽取(Extract)和数据传递(Data Pump),开始捕获数据变化,并把产生的GoldenGate日志存放到目标端的GoldenGate实例中。后在目标端,采用Integrated Replicat模式将源端捕获的变化数据应用到目标Oracle数据库中。

 

GoldenGate配置文件示例如下:

源端设置:

//Classic Extract(抽取进程)

extract eljp

sourcedb mss08ljp, useridalias gg_db_alias

tranlogoptions managesecondarytruncationpoint

exttrail ./dirdat/ep

reportcount every 10 minutes, rate

table dbo.*;

 

//Extract Data Pump(传递进程)

extract pljp

rmthost ******.us.oracle.com, mgrport 7898, compress

rmttrail ./dirdat/rp

reportcount every 10 minutes, rate

table dbo.*;

 

在GGSCI中执行以下命令,创建抽取和传递进程,以及相应的Trail日志

 

GGSCI (******) 4> add extract eljp, tranlog, begin now

 EXTRACT added.

 

GGSCI (******) 5> add exttrail ./dirdat/ep, extract eljp, megabytes 500

 EXTTRAIL added.

 

GGSCI (******) 6> add extract pljp, exttrailsource ./dirdat/ep

 EXTRACT added.

 

GGSCI (******) 7> add rmttrail ./dirdat/rp, extract pljp

 RMTTRAIL added.

 

注意:暂时不要启动抽取进程。

 

 

数据初始化

再次强调:在进行数据初始化前,先设置源SQL Server数据库,确保在整个数据初始化过程中,源数据都处在静止状态。

 

Oracle  SQL Developer提供两种方式,实现从第三方数据库到Oracle数据库的数据迁移。

种方式是“迁移向导”(Migration Wizard)可以将第三方数据库中的所有对象(表、索引、视图、触发器、表数据等等)都迁移到Oracle数据库中,这种方式支持的对象全面,但是迁移过程相对复制。

第二种方式是“数据拷贝”(Copy to Oracle)只能将第三方数据库中的表和表中的数据迁移到Oracle数据库中,这种方式虽然支持的对象很少,但胜在迁移过程简单灵活。

 

两种方式各有长短,适合不同的场景。本文将只介绍采用迁移向导的方式,来实现从SQL ServerOracle的数据初始化。

 

 

使用Oracle SQL Developer的迁移向导进行数据初始化

 

创建 Migration Repo用户

迁移向导需要一个单独的Oracle数据空间用于迁移资料库,需要在目标Oracle数据库创建一个单独的用户,并赋予相应的权限。

CREATE USER migr8repo IDENTIFIED BY Oracle1

  DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

 

GRANT CONNECT, RESOURCE, CREATE VIEW, CREATE PUBLIC SYNONYM

  TO migr8repo WITH ADMIN OPTION;

 

GRANT ALTER ANY ROLE, ALTER ANY SEQUENCE,

ALTER ANY TABLE, ALTER TABLESPACE, ALTER ANY TRIGGER,

COMMENT ANY TABLE, CREATE ANY SEQUENCE, CREATE ANY TABLE,

CREATE ANY TRIGGER, CREATE ROLE, CREATE TABLESPACE,

CREATE USER, DROP ANY SEQUENCE, DROP ANY TABLE,

DROP ANY TRIGGER, DROP TABLESPACE, DROP USER,

DROP ANY ROLE, GRANT ANY ROLE, INSERT ANY TABLE,

SELECT ANY TABLE, UPDATE ANY TABLE

  TO migr8repo;

 

alter user migr8repo quota unlimited on users;

grant dba to migr8repo;

 

 

创建数据库连接

Oracle SQL Developer中,创建一个目标Oracle数据库的连接,右键点击“Connections ”,选择“ New Connection”

 

 

 

填写目标Oracle数据库的相关信息:连接名、用户、口令、主机名、端口、数据库服务名等

 

 

目标端GoldenGate配置

// manager(管理进程)

port 7898

purgeoldextracts ./dirdat/*, usecheckpoints

ACCESSRULE, PROG *, IPADDR *, PRI 1, ALLOW

dynamicportlist 15000-15100

autorestart er *, retries 3, waitseconds 60, resetminutes 60

 

//Replicat(复制进程)

replicat rmssljp

useridalias gg_db_alias

reportcount every 10 minutes, rate

map dbo.categories, target ljptpc.categories;

map dbo.categories_description, target ljptpc.categories_description;

map dbo.customers, target ljptpc.customers;

map dbo.customers_info, target ljptpc.customers_info;

map dbo.customers_lookup, target ljptpc.customers_lookup;

map dbo.next_cust, target ljptpc.next_cust;

map dbo.next_order, target ljptpc.next_order;

map dbo.orders, target ljptpc.orders;

map dbo.orders_products, target ljptpc.orders_products;

map dbo.orders_status_history, target ljptpc.orders_status_history;

map dbo.orders_totals, target ljptpc.orders_totals;

map dbo.products, target ljptpc.products;

map dbo.products_description, target ljptpc.products_description;

map dbo.products_to_categories, target ljptpc.products_to_categories;

 

GGSCI中执行以下命令,创建集成式复制进程

GGSCI (******) 3> dblogin userid lpenton@oggpdb, password Oracle1

 Successfully logged into database OGGPDB.

  

GGSCI (****** as lpenton@a12101s/OGGPDB) 4> add replicat rmssljp, integrated, exttrail ./dirdat/rp

 REPLICAT (Integrated) added.

注意:此时不能启动复制进程!!!

 

 

创建迁移资料库

迁移向导需要一个迁移资料库,用来存放从SQL Server数据库中获取的信息。下面将使用Oracle SQL Developer来创建这个迁移资料库。在Tools菜单下,点击“Migration -Repository Management-Create Repository”。

 

在“Create Reposity”窗口中,在“Create Repository”的下来菜单中,选择前面步骤中创建的目标Oracle数据库的连接名“ORA_Migr8_Repo”,然后点击Create按钮,开始创建。

 

迁移资料库创建成功后,对话窗将关闭。

 


 

将创建好的迁移资料库关联到数据库连接上。右键单击目标Oracle数据库的连接名“ORA_Migr8_Repo”,在右键菜单中选择“Migration Repository”-“Associate Migration Repository”。

 

 

这样,就将迁移资料库与目标Oracle数据库连接关联在一起。点击OK继续下一步。

 

 

运行迁移向导

Oracle SQL Developer中,展开SQL Server数据库的连接名MSS2008_Migration,选择源数据库LJPTPC,右键单击,在右键菜单中选择“Migrate to Oracle”选项。

 

 

进入迁移向导界面,点击Next继续下一步。

 

 

Repository界面,在Connection下拉框中,选择目标Oracle数据库的连接名“ORA_Migr8_Repo,点击Next继续下一步。

 

 

Project界面,创建一个迁移project,给这个project起个名字migration0519170900,并添加以下对这个project的描述,后指定一个目录,用来存放日志。点击Next继续下一步。

 

 

选择需要迁移的源数据库,在Connection下拉菜单中,选择源SQL Server数据库的数据库连接名“MSS2008_Migration”,然后点击Next继续下一步。

 

 

从源数据库连接中,选择需要迁移的数据库“LJPTPC”,点击Next继续下一步。

 

 

指定数据类型转换。窗口中会列出缺省的数据类型转换,但是,我们经常需求根据实际情况来调整,比如本例中,我们希望将SQL Server DATETIME数据类型,转换成Oracle TIMESTAMP(6)。 在数据类型转换窗口,我们在Oracle中选择TIMESTAMP(6)对应SQL Server DATETIME类型和SMALLDATETIME类型,这个窗口允许我们修改缺省的数据类型转换规则。 定义后数据类型转换后,点击Next继续下一步。

 

从源SQL Server数据库中,选择需要迁移到Oracle数据库中的数据库对象。缺省情况下,该数据库下所有的对象都被选中,你也可以手工将不需要迁移的对象挑出来。 确定好需要迁移的数据库对象后,点击Next继续下一步。

 

Target Database界面,在Connection下拉菜单中,选择目标Oracle数据库的数据库连接名“ORA_Migr8_Repo”,点击Next继续下一步。

 

Move Data界面。核实源和目标数据库,确认无误后,点击Next继续。

 

 

检查迁移向导的汇总信息,确认无误后,点击Finish开始数据迁移。

 


 

查看迁移进度。

 

 

提示迁移操作完成,点击OK退出迁移向导。

 

 

验证迁移情况

数据迁移完成后,需要验证数据迁移的状态,我们可以通过Oracle SQL Developer查看目标Oracle数据库的情况。在Oracle SQL Developer上新建一个目标Oracle数据库的连接,直接连接到复制对象所在的schema上。

 


 

 

源端OGG操作

在源端启动GoldenGate的抽取和传递进程,开始捕获源库的数据变化,同时使用info等命令查看进程运行状态。

GGSCI (******) 17> alter eljp, begin now

 EXTRACT altered.

 

GGSCI (******) 18> info eljp

EXTRACT    ELJP      Initialized   2017-05-18 13:23   Status STOPPED

Checkpoint Lag       00:00:00 (updated 00:00:02 ago)

VAM Read Checkpoint  2017-05-18 13:23:32.994000

 

开启源端的GG抽取进程后,就可以让源SQL Server上线,业务可以正常运行了,这时源端的数据变化都会被GG捕获,并存入GGtrail日志中。

 

后面的步骤就简单了,业务已经起来了,源端的GoldenGate已经开始捕获数据变化。目标端启动Replicat进程前,先仔细检查目标Oracle数据库的情况,确保目标库的数据库对象与源库一致,所有对象都生效。然后就可以把目标端的Replicat进程启动,将源端捕获的数据,复制到目标库中。至此从SQL ServerOracle,异构数据库之间的数据实时复制链路已经建立。



本文来源https://www.modb.pro/db/70595

相关文章