Oracle 迁移 PostgreSQL 中的OGG配置

需求场景:

将整个Oracle数据库迁移到PostgreSQL,要求Oracle停机时间不超过12小时,而Oracle的数据量为200G左右,全量导出再导入PostgreSQL超过12小时。

对于这种情况,应使用ora2pg做全量,配合OracleGoldenGate(OGG)做增量。方法是:导出全量数据之前,Oracle用OGG捕获增量数据,这样在导出全量数据的时间段内的增量数据也被捕获下来,然后向PG导入全量数据,再用OGG向PG同步增量数据。这个过程中,会有一部分增量数据和全量数据重叠,但OGG可以妥善处理,见HANDLECOLLISIONS参数的说明

HANDLECOLLISIONS | NOHANDLECOLLISIONS

正因为OGG有这个功能,这种全量加增量的迁移模式,既可用于Oracle到Oracle的迁移(使用数据泵做全量),也可以用于Oracle到PG。

这个过程是一个逻辑复制的过程。

对于有主键的表,这种迁移方式非常适用,不会出现重复或缺少(只要严格按照步骤进行)。

对于没有主键或唯一键的表,这种迁移方式会引入重复记录。

下面记录了在公司系统上测试时,Oracle端和PG端OGG的配置和经验:

Oracle端OGG配置:

使用OGG从Oracle向PG同步,需要在Oracle和PG所在机器上分别安装各自版本的OGG。

为了数据的一致性,在全量导出之前,就要配置好Oracle端OGG,并开始捕获变更数据,但是并不向PG端应用这些变更数据,只有在全量导入PG之后,才在PG端应用变更数据。

下图1->2->3->4->5->6->7->8->9是OGG增量同步过程:

源端(左):

Extract进程通过分析Oracle redo/archive日志,捕获数据变更,结果写到Trail文件,Data pump进程读取Trail文件发给目标端。

目标端(右):

collector进程接收Trail并写到目标端目录,Replicat进程读取Trail,转换为对PG的操作。除了图中的Extract进程、Data pump进程、collector进程、Replicat进程和Trail文件,在源端和目标端还需开启manager进程,它负责控制Extract、Data pump、collecor和Replicat。

安装OGG:

源端安装Oracle OGG:213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip

目标端安装PG OGG:213000_ggs_Linux_x64_PostgreSQL_64bit.zip

PG端,解压后即完成安装,只需将安装目录加入环境变量PATH,cd到安装目录下执行ggsci。

Oracle端,以oracle用户,解压213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip

unzip 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip -d ogg-for-oracle

cd ogg-for-oracle/fbo_ggs_Linux_x64_shiphome/Disk1/response

修改配置文件:
cp oggcore.rsp oggcore-setup.rsp
vim oggcore-setup.rsp

修改下面几项,例如:
INSTALL_OPTION=ora21c
SOFTWARE_LOCATION=/oracle/app/ogg21
START_MANAGER=false

然后执行:
cd ogg-for-oracle/fbo_ggs_Linux_x64_shiphome/Disk1
./runInstaller -silent -responseFile /home/oracle/ogg-for-oracle/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore-setup.rsp

OGG将安装在/oracle/app/ogg21目录下,配置环境变量:
export OGG_HOME=/oracle/app/ogg21
export LD_LIBRARY_PATH=/oracle/app/ogg21:$LD_LIBRARY_PATH
export PATH=/oracle/app/ogg21:$PATH

OGG增量同步需要Oracle端开启归档日志和补充日志,例如:
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER SYSTEM SET log_archive_dest='/mnt/disk01/oracle_archive_log';
ALTER DATABASE ARCHIVELOG;
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE;
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE OPEN;
ARCHIVE LOG LIST;
(对于FLASHBACK功能,我的设想是,开启FLASHBACK功能后,对于无主键表,全量导出时指定SCN,向PG应用变更时,指定同样的SCN,这样可以避免引入重复行。)

配置Oracle端OGG:
进入安装目录cd $OGG_HOME,执行ggsci启动终端。以后的配置操作,都在这个终端下进行。

第一步,创建子目录,这是初始化步骤,只需要第一次进入GGSCI执行:
GGSCI > create subdirs

第二步,配置manager,编辑manager配置文件:
GGSCI > edit param mgr
PORT 37809     --监听端口
AUTOSTART ER *
AUTORESTART ER *

第三步,启动manager:
GGSCI > start manager
可选,关闭manager
GGSCI > stop manager

第四步,用户登录:
GGSCI中的操作,需要用户连接到数据库,这个用户要有足够权限。

例如,用户oggtest,给他赋予如下权限:
GRANT CREATE SESSION, ALTER SESSION,RESOURCE, CONNECT,SELECT ANY DICTIONARY,SELECT ANY TRANSACTION TO OGGTEST;

在GGSCI中连接Oracle
GGSCI >DBLOGIN USERID OGGTEST@172.32.150.13:1521/nlpass01 PASSWORD 123456

第五步,配置、启动Extract:
编辑Extract配置文件,文件名随便取(这里是extora),与对应Extract组名相同,编辑完后,$OGG_HOME/dirprm目录下将创建名为extora.prm的文本文件:

GGSCI >edit param extora
EXTRACT extora -- Extract组名
-- 客户端的编码,如果oracle字符串编码不是UTF8会转为UTF8
SETENV (NLS_LANG="AMERICAN_AMERICA.UTF8")  
-- 连接Oracle服务器的信息,最好OGG与Oracle安装在同一台机器上
USERID oggtest@172.32.150.13:1521/nlpass01, PASSWORD 123456
-- discard文件,出错时可查看详细信息
DISCARDFILE ./dirrpt/extora.dsc, APPEND, MEGABYTES 1024
-- Trail文件路径,会生成多个Trail文件,文件名为前缀ex+文件编号
EXTTRAIL /mnt/disk03/ogg_trail/ex
--支持truncate
GETTRUNCATES
-- 捕获delete、update不使用压缩方式
NOCOMPRESSDELETES FETCHMISSINGCOLUMNS
NOCOMPRESSDELETES
NOCOMPRESSUPDATES
-- 需要捕获的表,每个表一行,全部列出,包含schema名
TABLE PAASTEST.ACT_EVT_LOG;
.....

更详细的命令和参数说明,参考:https://docs.oracle.com/goldengate/c1221/gg-winux/GWURF/summary-oracle-goldengate-commands.htm#GWURF884

创建Extract组:
一个Extract组代表逻辑上的Extract进程,执行add extract命令,创建Extract组,组名与前面配置文件里的EXTRACT参数相同:
GGSCI (dkapp12 as PAASTEST@nlpass01) >ADD EXTRACT extora,TRANLOG,BEGIN NOW
或者指定捕获时间点
GGSCI (dkapp12 as PAASTEST@nlpass01) >ADD EXTRACT extora,TRANLOG,BEGIN 2022-03-25 17:00

注册:
GGSCI (dkapp12 as PAASTEST@nlpass01) >register extract extora, database
(否则启动Extract时,会有ERROR OGG-02022 Logmining server does not exist on this Oracle database)

删除Extract组:
GGSCI >DELETE EXTRACT extora
GGSCI (dkapp12 as PAASTEST
@nlpass01) >unregister extract extora, database

创建Trail文件:
GGSCI >ADD EXTTRAIL /mnt/disk03/ogg_trail/ex, EXTRACT extora, MEGABYTES 200
增量数据缓存在Trail文件里,Trail文件会有多个,以ex开头,在目录/mnt/disk03/ogg_trail/下,确保目录所在磁盘足够大。EXTRACT extora 是将Trail文件和Extract组关联,MEGABYTES 200表示每个Trail文件最大200M。

删除Trail文件:
DELETE EXTTRAIL /mnt/disk03/ogg_trail/ex
rm /mnt/disk03/ogg_trail/ex*

启动:
GGSCI >start extract extora
停止:
GGSCI >stop extract extora
查看状态:
GGSCI >info extora
GGSCI >stats extora
GGSCI >status extora
如果成功运行,会在本地Trail路径下应该生成文件,如果出错,查看错误原因:
GGSCI >view report extora

第六步,配置、启动Data Pump:
编辑Data Pump配置文件,文件名随便取(这里是pumpora):
GGSCI >edit param pumpora
-- Data Pump组名称
EXTRACT pumpora
-- 不处理数据,直接转发给目标端
PASSTHRU
-- 目标端IP和manager监听端口
RMTHOST 172.32.148.154, MGRPORT 11357
-- 目标端Trail文件所在目录,可以用绝对目录或相对目录,相对于OGG安装目录
-- 注意,目标端的trail文件是re开头的
RMTTRAIL /mnt/disk01/ogg-for-pg-21/dirdat/re
-- 需要转发给目的端的表名,每个表一行,包括schema名称
TABLE PAASTEST.ACT_EVT_LOG;
......

执行add extract命令,创建Data Pump组,Data Pump进程也是一种Extract进程,只因配置不同而功能不同。
GGSCI >ADD EXTRACT pumpora, EXTTRAILSOURCE /mnt/disk03/ogg_trail/ex
前面Data Pump配置文件里的组名,要与这里的pumpora相同,EXTTRAILSOURCE指前面extora的Trail文件。

创建远程(目标端)Trail文件路径:
Data Pump从本地Trail文件提取的变更,保存到远程Trail文件路径的位置,一个本地(源端)Trail文件可以分成多个远程Trail文件,在远程用多个Replicat同步,以增大速度。
GGSCI >ADD RMTTRAIL /mnt/disk01/ogg-for-pg-21/dirdat/re, EXTRACT pumpora, MEGABYTES 200

删除Data Pump组:
DELETE EXTRACT pumpora
删除远程Trail文件:
DELETE RMTTRAIL /mnt/disk01/ogg-for-pg-21/dirdat/re
rm /mnt/disk01/ogg-for-pg-21/dirdat/re*

启动:
(注意:这一步要先启动PG端的manager)
GGSCI >start extract pumpora
查看状态:
GGSCI >stats pumpora
GGSCI >status pumpora
GGSCI >info pumpora
如果成功运行,在远程的Trail目录下应该生成文件,如果出错,查看错误内容:
GGSCI >view report pump

如果要重新从第一个Trail文件的头部开始pump,就要删除pump再重建。pump主要就是把Extract产生的Trail文件复制到目标端的指定目录下。

多个Extract进程和多个Replicat进程

实际测试发现,增量同步时,在源端和目标端,只用一个Extract进程和一个Replicat进程,速度太慢。根据文档,可以配置一个Extract对应多个Replicat或多个Extract对应多个Replicat,目标端使用多个Replicat可增加同步速度,参考:
https://docs.oracle.com/goldengate/c1221/gg-winux/GWUAD/tuning-performance-oracle-goldengate.htm#GWUAD1139

测试环境700多个表,总数据量200G,配置3个Extract,产生3个本地Trail。在Extract的配置文件中,将700多个表分配到3个本地Trail。每个Pump对应一个Extract和它的本地Trail,Pump再把一个本地Trail里的表,分为多个远程Trail,三个Pump总共分出了20个远程Trail。在PG端,每个远程Trail创建一个Replicat进程向PG应用同步。实测这样的同步速度很快,延时很小,还可以进一步对于变更较快的表,数据量较大的表,和无主键的表,单独建立Extract-Pump-Replicat。

下面记录一下配置:

Extract配置:
DBLOGIN USERID PAASAPP@10.33.249.93:1521/platdb PASSWORD Paas1015
ADD EXTRACT ext1,TRANLOG,BEGIN 2022-03-24 18:00
ADD EXTRACT ext2,TRANLOG,BEGIN 2022-03-24 18:00
ADD EXTRACT ext3,TRANLOG,BEGIN 2022-03-24 18:00
register extract ext1, database
register extract ext2, database
register extract ext3, database
ADD EXTTRAIL /data5/ogg_trail_1/ex, EXTRACT ext1, MEGABYTES 200
ADD EXTTRAIL /data5/ogg_trail_2/ex, EXTRACT ext2, MEGABYTES 200
ADD EXTTRAIL /data5/ogg_trail_3/ex, EXTRACT ext3, MEGABYTES 200

Extract配置文件示例:
EXTRACT ext1
SETENV (NLS_LANG="AMERICAN_AMERICA.UTF8")
USERID paasapp@10.33.249.93:1521/platdb, PASSWORD Paas1015
DISCARDFILE ./dirrpt/ext1.dsc, APPEND, MEGABYTES 1024
GETTRUNCATES
NOCOMPRESSDELETES FETCHMISSINGCOLUMNS
NOCOMPRESSDELETES
NOCOMPRESSUPDATES

EXTTRAIL /data5/ogg_trail_1/ex
TABLE PAASAPP.ACT_EVT_LOG;
TABLE PAASAPP.ACT_GE_BYTEARRAY;
TABLE PAASAPP.ACT_GE_PROPERTY;

。。。

Data Pump配置:
ADD EXTRACT pump1, EXTTRAILSOURCE /data5/ogg_trail_1/ex
ADD EXTRACT pump2, EXTTRAILSOURCE /data5/ogg_trail_2/ex
ADD EXTRACT pump3, EXTTRAILSOURCE /data5/ogg_trail_3/ex

ADD RMTTRAIL /data3/ogg_trail/01, EXTRACT pump1, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/02, EXTRACT pump1, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/03, EXTRACT pump1, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/04, EXTRACT pump1, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/05, EXTRACT pump1, MEGABYTES 200

ADD RMTTRAIL /data3/ogg_trail/06, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/07, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/08, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/09, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/10, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/11, EXTRACT pump2, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/12, EXTRACT pump2, MEGABYTES 200

ADD RMTTRAIL /data3/ogg_trail/13, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/14, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/15, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/16, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/17, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/18, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/19, EXTRACT pump3, MEGABYTES 200
ADD RMTTRAIL /data3/ogg_trail/20, EXTRACT pump3, MEGABYTES 200

Data Pump配置文件示例:
EXTRACT pump1
PASSTHRU
RMTHOST 10.33.249.91, MGRPORT 21357
RMTTRAIL /data3/ogg_trail/01
TABLE PAASAPP.ACT_EVT_LOG;
TABLE PAASAPP.ACT_GE_BYTEARRAY;
。。。
RMTTRAIL /data3/ogg_trail/02
TABLE PAASAPP.APM_AGG_QUERY_HISTORY;
TABLE PAASAPP.APM_ALARM_RECORD;

。。。

配置PostgreSQL端OGG:

目标端(PG)的OGG,包括manager、collector和replicat进程,和源端传来的Trail。
启动manager后,会自动启动collector,此时就可以接收Oracle端data pump发来的Trail文件。Oracle端的data pump进程,要在目标端启动manager后才可以启动。
manager是需要配置的,collector不需要配置。
Replicat读取Trail文件,转换为对PG的增删改,replicat使用ODBC连接PG,OGG PG端安装文件自带了PG ODBC相关库。
Replicat需要记录应用变更的进度,这个信息存储在一张PG表中,称为checkpoint表。

213000_ggs_Linux_x64_PostgreSQL_64bit.zip 解压到目录/mnt/disk01/ogg-for-pg-21,加入下面的环境变量:
export OGG_HOME=/mnt/disk01/ogg-for-pg-21
export PATH=/mnt/disk01/ogg-for-pg-21:$PATH
export LD_LIBRARY_PATH=/mnt/disk01/ogg-for-pg-21:/mnt/disk01/ogg-for-pg-21/lib:$LD_LIBRARY_PATH

配置PG ODBC:
213000_ggs_Linux_x64_PostgreSQL_64bit.zip里面包含了ODBC库,在lib目录下,编辑ODBC配置文件odbc.ini,将环境变量ODBCINI指向odbc.ini:
export ODBCINI=/mnt/disk01/ogg-for-pg-21/odbc.ini
odbc.ini内容如下:
[ODBC]
# 106代表UTF-8
IANAAppCodePage=106
[pg] # ODBC数据源名称,可以随意起名,OGG配置中使用这个名称
Driver=/mnt/disk01/ogg-for-pg-21/lib/GGpsql25.so
Description=DataDirect 12.6 PostgreSQL Wire Protocol
Database=postgres
HostName=172.32.148.155
PortNumber=1921
LogonID=oggtest
Password=123456

到$OGG_HOME下执行ggsci,进入命令行,以后的命令都在命令行里执行。

GGSCI>dblogin sourcedb pg

 表示ODBC配置正确。

Trail中包含了表定义,在同步之前,应该已经在PG上创建了与Oracle相同的表结构定义,表名、列名、顺序、主键都应该相同,并且已经完成的全量迁移,这样同步的表和数据就能够正确对应。


第一步,创建子目录:
GGSCI > create subdirs
(不要有分号)

第二步,配置、启动manager:
GGSCI > edit param mgr
PORT 1357
AUTOSTART ER *
AUTORESTART ER *
ACCESSRULE, PROG *, IPADDR *, ALLOW

设置全局参数ALLOWOUTPUTDIR,这样manager可以在RMTTRAIL目录下创建文件,否则会有报错:OGG-01223  Output file /data3/ogg_trail/re000000 is not in any allowed output directories

参考:OGG-01031 Output file is not in any allowed output directories - ORACLE-SCN

GGSCI > edit param ./GLOBALS
ALLOWOUTPUTDIR /data3/ogg_trail

启动manager
GGSCI > start manager
关闭manager
GGSCI > stop manager

第四步,在GGSCI中登录PG
GGSCI >dblogin sourcedb pg
GGSCI中许多操作,都要求登入数据,其中pg是前面ODBC配置的数据源名称,不是数据库名。

第三步,创建checkpoint表
checkpoint表就是一个普通的PG表,目标端Replicat从Trail文件提取变更,应用到PG,进度保存到checkpoint表里。

GGSCI >add checkpointtable chkpt.checkpointtab
这个命令会在chkpt schema下,创建名为checkpointtab的checkpoint表。

如果要Replicat从头再次应用Trail文件,可以删除或清空checkpoint表,然后调整Replicat进程读取Trail的指针:
alter repg, extseqno 0, extrba 0
repg是Replicat组名(也可以理解成Replicat进程名)。
extseqno是Trail文件的编号,就是文件名的数字部分。
extrba 是记录(事务?)在Trail文件内的偏移,rba表示relative byte address。
再start repg

删除checkopint表
delete checkpointtable chkpt.checkpointtab

第四步,swap分区
实践中发现Replicat需要有swap分区,如果没有swap分区,创建一个文件作为swap分区,例如,创建一个16G的文件/mnt/disk01/swapfile作为swap分区以root用户执行:
dd if=/dev/zero of=/mnt/disk01/swapfile bs=1M count=16K
chmod -R 0600 /mnt/disk01/swapfile
mkswap /mnt/disk01/swapfile
swapon /mnt/disk01/swapfile
# 开机启动swap分区
vim /etc/fstab
/mnt/disk01/swapfile swap swap defaults 0 0
swapon -s

第五步,配置、启动Replicat
编辑Replicat配置文件
GGSCI >edit param repg
-- Replicat组名
REPLICAT repg
-- 连接PG数据库的信息,pgdb是ODBC数据源名称
TARGETDB pgdb userid oggtest, password 123456
DISCARDFILE ./dirrpt/repg.dsc, APPEND
GETTRUNCATES
ALLOWNOOPUPDATES
INSERTMISSINGUPDATES
RESTARTCOLLISIONS
HANDLECOLLISIONS
BATCHSQL BATCHERRORMODE
-- 将Oracle oggtest下的表映射为PG oggtest下的表。
MAP oggtest.*, TARGET oggtest.*;

创建Replicat组:
GGSCI > add replicat repg, exttrail /mnt/disk01/ogg-for-pg-21/dirdat/re, begin
2022-03-25 17:00, checkpointtable chkpt.checkpointtab
repg需要与配置文件中REPLICAT参数相同
exttrail 是源端data pump发来的Trail文件的路径,需要与源端data pump配置文件的远程Trail路径相对应。begin 
2022-03-25 17:00的时间应该是源端add extract 命令里指定的时间,或者至少比开始全量导出的时间早,数据才不会有丢失。
删除Replicat组
delete replicat repg

启动Replicat:
GGSCI >start replicat repg

查看状态:
GGSCI >stats repg
GGSCI >info repg


多个Extract进程和多个Replicat进程

与Oracle端对应的PG端多Replicat进程配置:

dblogin sourcedb pg

Replicat配置文件示例
GGSCI>edit param repl20:
REPLICAT repl20
TARGETDB pg
DISCARDFILE ./dirrpt/repl20.dsc, APPEND
GETTRUNCATES
ALLOWNOOPUPDATES
INSERTMISSINGUPDATES
RESTARTCOLLISIONS
HANDLECOLLISIONS
BATCHSQL BATCHERRORMODE
MAP oggtest.*, TARGET oggtest.*;

创建Replicat:
add replicat repl01, exttrail /data3/chkpt_trail/01, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl02, exttrail /data3/chkpt_trail/02, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl03, exttrail /data3/chkpt_trail/03, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl04, exttrail /data3/chkpt_trail/04, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl05, exttrail /data3/chkpt_trail/05, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl06, exttrail /data3/chkpt_trail/06, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl07, exttrail /data3/chkpt_trail/07, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl08, exttrail /data3/chkpt_trail/08, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl09, exttrail /data3/chkpt_trail/09, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl10, exttrail /data3/chkpt_trail/10, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl11, exttrail /data3/chkpt_trail/11, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl12, exttrail /data3/chkpt_trail/12, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl13, exttrail /data3/chkpt_trail/13, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl14, exttrail /data3/chkpt_trail/14, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl15, exttrail /data3/chkpt_trail/15, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl16, exttrail /data3/chkpt_trail/16, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl17, exttrail /data3/chkpt_trail/17, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl18, exttrail /data3/chkpt_trail/18, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl19, exttrail /data3/chkpt_trail/19, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
add replicat repl20, exttrail /data3/chkpt_trail/20, begin 2022-03-25 17:00, checkpointtable chkpt.checkpointtab
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 将Oracle数据库迁移PostgreSQL需要以下步骤: 1. 确定迁移的目标和范围,包括数据库大小、数据类型、表结构、索引、触发器、存储过程等。 2. 在PostgreSQL创建相应的数据库和表结构,确保与Oracle数据库的结构一致。 3. 将Oracle数据库的数据导出为SQL文件,然后将其导入到PostgreSQL数据库。 4. 对于Oracle数据库的存储过程和触发器,需要将其转换为PostgreSQL的语法,并重新创建。 5. 对于Oracle数据库的索引和约束,需要根据PostgreSQL的语法进行调整和重新创建。 6. 对于Oracle数据库的特殊数据类型,如BLOB和CLOB,需要将其转换为PostgreSQL支持的数据类型。 7. 对于Oracle数据库的特殊功能,如分区表和分布式数据库,需要根据PostgreSQL的功能进行调整和重新实现。 8. 迁移完成后,需要进行测试和验证,确保数据的完整性和正确性。 总之,将Oracle数据库迁移PostgreSQL需要仔细的规划和准备,以确保迁移的顺利和成功。 ### 回答2: Oracle是大型关系数据库管理系统,在企业应用广泛。然而,随着开源数据库(例如PostgreSQL)的发展,越来越多的企业开始考虑将其数据库迁移到开源数据库上。PostgreSQL是一个强大的、支持高级数据类型的开源数据库,具有高度可扩展性和良好的安全性。 当企业考虑将它们的Oracle数据库迁移PostgreSQL时,需要考虑以下因素: 1. 数据的转换:OraclePostgreSQL之间存在差异,例如,它们的数据类型、架构等有所不同。因此,在将数据从Oracle迁移PostgreSQL时,需要进行适当的数据转换。 2. 应用程序的兼容性:迁移数据库还需要检查现有的应用程序是否与PostgreSQL兼容,以确保它们可以正确地访问新数据库。 3. 业务功能和需求:企业需要根据其业务功能和需求来选择适当的数据库。在进行这种类型的迁移时,需要考虑企业的长期业务规划。 4. 数据库管理员技能:OraclePostgreSQL的管理方式有所不同,因此,企业需要评估其当前的数据库管理员技能,并考虑是否需要培训他们以管理重构后的PostgreSQL数据库。 5. 外部支持和服务:在迁移过程,企业需要明确了解可用的支持和服务,并考虑与供应商签订合同。 在考虑Oracle数据库迁移PostgreSQL时,需要评估各种因素,并进行适当的规划和准备。正确的数据库迁移可以提高企业的效率和生产力,并为企业拓展未来提供了更多的可能性。 ### 回答3: Oracle是一款常用的关系型数据库,而PostgreSQL则是在开源社区很受欢迎的关系型数据库管理系统(RDBMS)。在某些情况下,企业可能需要考虑将其Oracle数据库迁移PostgreSQL上。 1. 性能和可扩展性 PostgreSQLOracle在某些方面表现得更好。例如,PostgreSQL在存储和同步数据方面表现更出色并且能够更好地处理高并发请求。此外,与Oracle相比,PostgreSQL的可扩展性更强,这对于需要大规模处理的大型企业来说是非常有益的。 2. 开源 PostgreSQL是一个开源项目,这意味着它拥有很多社区支持,可以获得更高级别的技术支持,从而提高了可靠性和稳定性。但是,Oracle是一个商业产品,需要额外的付费才能获得更好的支持。因此,从成本角度来讲,PostgreSQL是一个更好的选择。 3. 数据迁移 数据库迁移需要快速且高效地完成,如果不小心,就可能导致数据遗失或无法恢复。数据迁移需要先对应用程序和数据库进行访问控制的修改。然后,对于表,索引和视图等所有对象,需要在PostgreSQL进行重建。标准迁移方式通常涉及导出Oracle数据,将其转换为PostgreSQL可用的格式,然后导入PostgreSQL。 4. 兼容性和转换 OraclePostgreSQL之间的语法和特性是不同的,所以需要进行转换。PostgreSQL的一些功能,例如数组和枚举,在Oracle是不存在的。需要将数据库转换后再进行使用。除此之外,PostgreSQL有一个更强大的命令行界面,可在迁移过程缩短学习曲线和响应时间。 总体来说,Oracle迁移PostgreSQL不是一项容易的任务,需要企业在决定迁移之前进行彻底的考虑和规划。但是,一旦完成迁移,就可以获得更好的性能和更具成本效益的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值