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

2023-02-21 00:00:00 数据 数据库 导入 目标 导出

背景介绍

异构数据库之间的数据复制和迁移,对于所有IT人员来说都是一个挑战,大多数方案中麻烦,也是复杂的部分在于数据类型的转换,以及目标数据库的初始化。针对这个问题,本公众号将推出系列文章,向大家介绍从Microsoft SQL Server数据库迁移到Oracle数据库的几种方法,希望对大家有所帮助。

篇:我们将使用Microsoft的导入/导出工具,先将SQL Server数据库的数据导出,然后将这些数据导入目标的Oracle数据库,实现数据的初始化,后使用Oracle GoldenGate实现异构数据复制。

第二篇:我们将使用OracleSQL Developer工具将数据从SQL Server数据库中导入到Oracle数据库中,然后使用Oracle GoldenGate使用异构数据复制。

 

SQL Server的导入/导出工具可以实现将SQL Server的数据导入到其他目标数据库的功能,同时,这个工具还有另外一个用途:我们可以利用它来连接Oracle数据库。首先,我们必须安装在SQL Server服务器上,安装一个Oracle Data Access Client软件,然后进行网络配置(设置好Oracle*Net)。

我们的目标数据库是Oracle 12c,从Oracle的官方网站上下载相应版本的ODAC:

http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html

 


安装Oracle Data Access Client

下载软件压缩包后,解压,点击setup.exe,启动Oracle Universal Installer,进入图形化安装界面:

 

 

OUI中选择产品语言

 

 

在“指定Oracle主目录用户”界面,选择缺省的“Use WindowsBuilt-in Account

指定软件安装目录

 

 

在选择产品组件界面,直接接受缺省选择即可

 

 

ODP.NET设置界面,勾选多选框,在系统层面设置ODP.NET

 

 

在数据库连接配置界面,设置目标Oracle数据库的连接方式,设置数据库连接别名oggpdb,端口1521,数据库服务器名slc08ggk,数据库服务名是oggpdb,目标库是一个PDB,数据库名就叫oggpdb,对外都是通过服务名连接。

 

安装前先决条件检查,是否满足小安装需求。

 

 

先决条件检查没有问题,安装前确认

开始安装

 

安装成功!

 

使用Microsoft Data Link进行Oracle数据库连接测试,在Windows桌面上创建一个文本文件,名字叫“TestOraLink.udl”

 

双击刚刚创建的文件,进入Data Link Properties界面,选择“Oracle Provider for OLE DB”

 

在“Data Link Properties Connection”设置界面填写:Data Source填入在ODAC安装过程设置的目标数据库别名oggpdb,在数据库登录信息部分填写目标数据库的用户名和口令。

 

点击“Test Connection”按钮测试数据库连接,在弹出窗口中会显示连接成功或失败的信息。

连接测试成功后,在“Data Link Propertie”窗口点击OK,关闭窗口。

 

在继续后面步骤前,先确保SQL Server数据库已经按照Oracle GoldenGate复制要求配置好,另外GoldenGate软件按照复制SQL Server的要求安装并配置好。

 

设置数据捕获和应用

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

 

GoldenGate配置文件示例如下:

源端设置:

 

//Classic Extract(抽取进程)

extract eljp

sourcedb mss08ljp, userid ggadmin, password Oracle1

tranlogoptions managesecondarytruncationpoint

exttrail ./dirdat/ep

reportcount every 10 minutes, rate

table dbo.*;

 

//Extract Data Pump(传递进程)

extract pljp

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

rmttrail ./dirdat/rp

reportcount every 10 minutes, rate

table dbo.*;

 

在源库的GoldenGate实例中执行以下命令,添加抽取进程和传递进程,以及相应的trail日志

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

EXTRACT added.

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

EXTTRAIL added.

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

EXTRACT added.

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

RMTTRAIL added.

 

在目标端,修改GoldenGate manager进程的参数:

 

//Manager(管理进程)

port 7898

purgeoldextracts ./dirdat/*, usecheckpoints

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

dynamicportlist 15000-15100

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

 

注意:在manager进程的参数中,设置了autorestart参数,这个参数的作用是,当抽取或复制进程失败时,manager进程会自动尝试重启这些失败的进程。

 

在目标端,创建Replicat进程

//Replicat(复制进程)

replicat rmssljp

userid lpenton@oggpdb, password Oracle1

reportcount every 10 minutes, rate

map dbo.categories, target lpenton.categories;

map dbo.categories_description, target lpenton.categories_description;

map dbo.customers, target lpenton.customers;

map dbo.customers_info, target lpenton.customers_info;

map dbo.customers_lookup, target lpenton.customers_lookup;

map dbo.next_cust, target lpenton.next_cust;

map dbo.next_order, target lpenton.next_order;

map dbo.orders, target lpenton.orders;

map dbo.orders_products, target lpenton.orders_products;

map dbo.orders_status_history, target lpenton.orders_status_history;

map dbo.orders_totals, target lpenton.orders_totals;

map dbo.products, target lpenton.products;

map dbo.products_description, target lpenton.products_description;

map dbo.products_to_categories, target lpenton.products_to_categories;

 

 

GGSCI中执行以下命令,添加复制进程和相应的trail日志

 

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

Successfully logged into database OGGPDB.

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

REPLICAT (Integrated) added.

 

SQL Server导入/导出工具

本例中采取的数据初始化方式需要中断业务,将源SQL Server数据库离线,确保在使用SQL Server导入/导出工具进行数据初始化时,源库的数据是静止数据。

 

将源SQL Server数据库离线后,就可以使用SQL Server导入/导出工具来实现目标Oracle数据库的初始化。

 

注意:必须在CMD或者PowerShell命令行窗口中调用SQL Server导入/导出工具。 在本例中,我们在PowerShell中执行DTSWizard.exe命令

 

进入SQL Server导入/导出工具的启动界面

在选择“SQL Server数据源”界面,选择服务器、SQL Server数据库认证方式和数据库

选择“Oracle Provider for OLE DB”作为目标,然后点开“Properties”按钮,进入目标Oracle数据库的配置界面

在“Data Link Properties Connection ”界面填写目标Oracle数据库的相关连接信息:数据源(前面已经设置好的数据库别名)oggpdb,数据库的用户名和口令,

点击“Test Connection”按钮测试数据库连接

 

连接测试成功后,点击OK,OK,然后下一步,进入“Specify Table Copy or Query”,选择“Copy data from one or more tables or views”

在源SQL Server数据库中,选择需要复制的表和视图

源表选择后,在目标表名将会出现,保持目标表名称与源表一致

如果不想导出所有表,CTRL加右键点击每一张需要导出的表,选择“Edit Mappings”按钮,选择目标Oracle数据库中的要导入数据的schema。如果这些表已经存在,则勾选“Drop and recreate new destination tables”或“Delete rows in existing destination tables”。本例为数据迁移,目标表不存在,所以不需要勾选这两个选项。

双击每一张目标表,设置映射字段和数据类型转换

 

在示例中,字段“categories_id”在SQL Server的定义类型是bigint,但是Oracle数据库不能识别bigint类型,所以必须要将数据类型转换成Oracle可以识别的类型。示例中Oracle的数据类型NUMBER(19)等同于SQL ServerBIGINT。点击“Edit SQL”按钮,进入创建表的SQL语句界面,手工编辑字段的数据类型。

对其他表做相同的操作。

 

注意:在表和字段命名上,Oracle是区分大小写的。虽然在创建表和字段时,Oracle会自动把表和字段的名称转成大写,并以大写的方式保存,但是在创建SQL语句中,如果用双引号(“”)把表和字段名称包含进去,就会强制Oracle存放语句中指定的格式,比如双引号中有小写字符,Oracle就会强行把这些格式存放进去,那么在使用这个表或字段时,必须通过用双引号包含指定字符(小写字符)的方式调用,否则Oracle会自动转换成大写。

 

转换工具存在一个问题,就是在自动生成目标库表脚本的时候,表名和字段名都是用双引号括起来的小写字母,如果不修改,那么在Oracle数据库中生成的表和字段会强制以小写形式存储,后期在操作Oracle的表和字段时,都需要用小写,而且要用双引号括起来。

 

因此在用SQL Server导入/导出工具的方式向Oracle数据库,做数据复制初始化时,有几种方式处理:种方法,把系统自动生成的SQL建表脚本拷贝出来,用一些文本处理工具,比如editplus或者ultraedit,把所有字母一块转成大写,然后再拷贝到导入/导出工具中,这样创建的表和字段名都是大写;另一种方法,把所有系统自动生成的SQL脚本都拷贝出来,一次全转成大写,然后把脚本在目标Oracle数据库中执行,那么在前面的步骤中,选择源表和目标表时,就可以手工选择目标库中已经创建好的表。

 

在本例中,我们采用种方法,在导入/导出工具中,把所有表的SQL脚本都修改一遍,通过导入/导出工具来创建目标库表。

 

但表定义调整工作完成后,点击Next,继续后面的步骤。

 


SSIS允许你是用XML文件的方式提供数据类型转换映射,本例中不打算采用这种方式,直接进入下一步。

 

选择Finish,开始导出数据。

 

在导出界面可以看到整个数据导出过程,每一张对象的导出进度和状态。

 

数据导出结束,点击Close按钮,退出SQL Server导入/导出工具界面。

 


 

 

源端OGG操作

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

GGSCI (den01eln) 10> start er *

Sending START request to MANAGER …

EXTRACT ELJP starting

Sending START request to MANAGER …

EXTRACT PLJP starting

GGSCI (den01eln) 11> info er *

EXTRACT    ELJP      Last Started 2017-04-20 09:58   Status RUNNING

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

Process ID           6300

VAM Read Checkpoint  2017-04-20 09:54:11.730000

LSN: 0x0000005b:000000de:0029, Tran: 0000:00002e80

EXTRACT    PLJP      Last Started 2017-04-20 09:58   Status RUNNING

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

Process ID           4676

Log Read Checkpoint  File ./dirdat/ep000000000

First Record  RBA 1280

 

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

 

目标端OGG操作

此时目标端OGG Replicate进程还没启动,源端的数据变化只是在GGTrail日志中。在开启目标端Replicate进程前,需要对目标端Oracle数据库进行一些调整。

有一点需要重点关注:在使用SQL Server导入/导出工具进行数据初始化时,使用导入导出工具创建的目标库表,是不包含主键和索引的,所以,在数据导入结束后,需要人工在目标库上创建主键和索引。所以在启动目标端OGG时,应先参照源库结构,创建目标库表的主键和索引。

 

启动目标GGReplicate进程

GGSCI (slc08ggk as lpenton@a12101s/OGGPDB) 5> start rmssljp

Sending START request to MANAGER …

REPLICAT RMSSLJP starting

 

GGSCI接口执行info命令,查看集成式Replicate进程的状态。

GGSCI (slc08ggk) 6> info rmssljp

REPLICAT   RMSSLJP   Last Started 2017-04-20 13:22   Status RUNNING

INTEGRATED

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

Process ID           3072

Log Read Checkpoint  File ./dirdat/rp000000000

First Record  RBA 0

 

查看Replicate进程状态

 

GGSCI (slc08ggk) 84> info rmssljp

REPLICAT   RMSSLJP   Last Started 2017-04-20 13:25   Status RUNNING

INTEGRATED

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

Process ID           23950

Log Read Checkpoint  File ./dirdat/rp000000000

2017-04-20 13:27:17.977679  RBA 1340850

 

总结

在本文中,我们介绍了使用SQL Server的导入/导出工具来完成SQL ServerOracle PDB的数据初始化工具,后续,我们还将发布其他文章来介绍GoldenGate的其他功能。

下次,我们还将跟大家分享使用Oracle SQL Developer,来捕获并转换SQL Server的数据到Oracle数据库中,实现异构数据复制的数据初始化。




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

相关文章