【OGG】经典版21c在ORACLE数据库上的安装部署-1

环境介绍

虚拟机 192.168.56.50

操作系统: Oracle Linux7.9

数据库:Oracle19c

OGG:Oracle GoldenGate21.3

安装步骤

 参考文献

Performing an Interactive Installation with OUI

安装过程首先按照交互界面进行安装,再保存响应文件,最后简单描述通过响应文件静默安装。

1.        交互式安装

(1) 安装前准备

su - oracle
mkdir /home/oracle/ogg21  ##将作为安装时的主目录
mkdir /home/oracle/stage  ##临时目录
cd /home/oracle/stage
# 将安装包213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip传输到该目录,再解压
unzip 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip
cd /home/oracle/stage/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1

 (2)安装交互界面

# 启动交互安装界面
. runInstaller

选择安装选项页面上,选择要安装的 Oracle GoldenGate 版本,然后单击下一步继续

【OGG】经典版21c在ORACLE数据库上的安装部署-1_第1张图片

 软件位置选择一个新的目录/home/oracle/ogg21,管理端口默认即可

 【OGG】经典版21c在ORACLE数据库上的安装部署-1_第2张图片

 这里单独保存一下响应文件,后续可以用它作为静默安装的模板,响应文件主要内容参考如下:


######################################################################
## 这个可以用于OGG的静默安装
## IMPORTANT NOTE: 这个文件的读权限必须授予oracle用户或管理员用户
######################################################################

#这个参数不要改
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v21_1_0

#指定支持的数据库版本(及以下)
INSTALL_OPTION=ORA21c

#OGG主目录
SOFTWARE_LOCATION=/home/oracle/ogg21

#启动管理进程
START_MANAGER=true

#指定管理进程端口号
MANAGER_PORT=7809

#指定客户端安装位置,必须在SOFTWARE_LOCATION下,且开启管理进程
DATABASE_LOCATION=/home/oracle/ogg21/instantclient

# 以下是数据库相关的参数
INVENTORY_LOCATION=/u01/app/oraInventory
UNIX_GROUP_NAME=oinstall

 最后点击安装即可。

2.        静默安装(可选)

可以使用响应文件,进行静默安装,在完成安装准备后,如果要进行静默安装,可以用上述响应文件,启动静默模式,具体启动方式如下:

# 响应文件放到/home/oracle/stage
./runInstaller -silent -nowait -responseFile /home/oracle/stage/ogginstall.rsp

OGG配置

参考文献:Understanding What’s Supported

1.        数据库环境准备 

(1) 环境变量(oracle)

vi ~/.bash_profile
# 添加
export OGG_HOME=/home/oracle/ogg21
export PATH=$OGG_HOME:$ORACLE_HOME/bin:/usr/sbin:/usr/local/bin:$PATH
export LD_LIBRARY_PATH=$OGG_HOME:$ORACLE_HOME/lib:/lib:/usr/lib
export TNS_ADMIN=$ORACLE_HOME/network/admin

source ~/.bash_profile

(2) 创建OGG工作目录

cd $OGG_HOME
ggsci
CREATE SUBDIRS

如果安装时启用了START_MANAGER=true,则已经自动生成,为了确保工作目录执行一下也无妨。

(3)为OGG准备数据库

开启OGG复制(根容器)

show parameter GOLDENGATE
alter system set ENABLE_GOLDENGATE_REPLICATION=true scope=both;
alter system set streams_pool_size='100M' scope=both;

开启闪回查询(根容器)

show parameter undo_
alter system set UNDO_MANAGEMENT=AUTO scope=both;
# 单位:秒
alter system set UNDO_RETENTION=86400 scope=both;

提示:计算 undo_space= UNDO_RETENTION * UPS + overhead

(4)启用数据库归档和附加日志(根容器)

shutdown immediate
!mkdir /home/oracle/archive_log
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG;
startup
ALTER SYSTEM SET db_recovery_file_dest='/home/oracle/archive_log' scope=both;
SELECT supplemental_log_data_min, force_logging FROM v$database;

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE FORCE LOGGING;

ALTER SYSTEM SWITCH LOGFILE;

 (5)创建OGG专用数据库用户及表空间(PDB)

--# 在根容器中创建指定用户和表空间
alter session set container=cdb$root;
select name from v$datafile;
# 表空间必须在所有pdb中单独创建
create tablespace ggtbs datafile'/u01/app/oracle/oradata/PRODCDB/datafile/ggtbs01.dbf' size 50m autoextend on;
alter session set container=pdbprod1;
select name from v$datafile;
create tablespace ggtbs datafile'/u01/app/oracle/oradata/PRODCDB/E89D97CFEB1F66DEE055688B8B725DDD/datafile/ggtbs01.dbf' size 50m autoextend on;
alter session set container=cdb$root;
create user c##gguser identified by Cloud_4u default tablespace ggtbs quota unlimited on ggtbs container=all;
--# 授权
GRANT FLASHBACK ANY TABLE TO c##gguser container=all;
--GRANT FLASHBACK ON schema.table TO c##gguser container=all;
--3. 给gguser授权 
GRANT RESOURCE,CONNECT ,SELECT_CATALOG_ROLE ,dba TO c##gguser container=all;
ALTER USER c##gguser DEFAULT ROLE ALL container=all;
GRANT CREATE SESSION TO c##gguser container=all;
GRANT ALTER SESSION TO c##gguser container=all;
GRANT SELECT ANY TRANSACTION TO c##gguser container=all;
GRANT SELECT ANY DICTIONARY TO c##gguser container=all;
GRANT FLASHBACK ANY TABLE TO c##gguser container=all;
GRANT SELECT ANY TABLE TO c##gguser container=all;
GRANT UNLIMITED TABLESPACE TO c##gguser container=all;
-- ggts表空间配额不限制
ALTER USER c##gguser QUOTA UNLIMITED ON ggtbs container=all;
-- 闪回对象操作权限 
GRANT EXECUTE ON SYS.DBMS_FLASHBACK TO c##gguser container=all;
GRANT FLASHBACK ON SYS.USER_SOURCE TO c##gguser container=all;
--4. ogg管理员权限(在根容器和所有pdb中分别执行)
exec dbms_goldengate_auth.grant_admin_privilege('c##gguser');
alter session set container=pdbprod1;
exec dbms_goldengate_auth.grant_admin_privilege('c##gguser');

(6)创建登录凭证

cd $OGG_HOME
ggsci
add credentialstore
alter credentialstore add user c##gguser@PRODCDB,password Cloud_4u alias ggprod1 domain ogg

## 补充:要删除凭证
delete credentialstore

提示1:oracle数据库的连接字符串在tnsnames.ora中设置,ggsci要使用必须先设置TNS_ADMIN环境变量,指明tnsnames.ora所在目录 

提示2:在后面抽取进程注册时如果是容器数据库,则必须连接到跟容器才能注册

测试ggsci
cd $OGG_HOME
ggsci
# 登录方式1
dblogin userid gguser@pdbprod1,password Cloud_4u
------##出现以下信息表示能连通--------
Successfully logged into database PDBPROD1.

# 登录方式2
DBLOGIN USERIDALIAS ggprod1 domain ogg
------##出现以下信息表示能连通--------
Successfully logged into database PDBPROD1.

后续服务进程的配置启动关闭都要先连接到目标库才能操作。

(7)创建测试表

alter session set container=pdbprod1;
create tablespace testtbs datafile'/u01/app/oracle/oradata/PRODCDB/E89D97CFEB1F66DEE055688B8B725DDD/datafile/testtbs01.dbf' size 50m autoextend on;
create user test identified by Cloud_4u default tablespace testtbs quota unlimited on testtbs;
grant connect,resource to test;
create table test.demo (id number constraint PK_DEMO primary KEY,cname varchar(30));

2. 配置启动管理进程

这一步在安装时我们已经选择启用管理进程。如果没有启用管理进程,则按如下步骤配置

cd $OGG_HOME
ggsci
edit params mgr
# 添加如下内容
port 7809
DYNAMICPORTLIST 7840-7850
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints,minkeepdays 7

# 启动进程
start mgr
# 查看状态
info mgr
---------
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING
MANAGER     STOPPED                                           
#如果是stop状态可以去dirrpt文件夹下找到相应的MGR.rpt为最近一次启动的状态报告,一般检查参数关键词是否拼写错误。
# 查看报告
view report mgr

MANAGER进程参数说明:
     port:指定服务监听端口,默认端口7809。
     DYNAMICPORTLIST:动态端口列表,最大可指定256个动态端口,当指定port不可用时,管理进程会从列表中选择一个可用的端口。
     AUTORESTART:由于网络等原因造成抽取进程中止,每3分钟尝试重启所有extract进程,共尝试5次,建议配置。
     PURGEOLDEXTRACTS:自动删除过期队列,凡超过7天且已完成同步的所有./dirdat文件下的文件将被删除,建议配置。

3. 配置抽取进程 

edit params e1
# 添加
EXTRACT e1
SETENV (NLS_LANG="AMERICAN_AMERICA.UTF8")
USERIDALIAS ggprod1 domain ogg
DISCARDFILE ./dirrpt/e1.dsc, APPEND, MEGABYTES 1024
EXTTRAIL ./dirdat/e1
GETTRUNCATES
NOCOMPRESSDELETES FETCHMISSINGCOLUMNS
NOCOMPRESSDELETES
NOCOMPRESSUPDATES
SOURCECATALOG pdbprod1
TABLE TEST.DEMO;

参数简单说明 

EXTRACT extora -- Extract组名
-- 客户端的编码,如果oracle字符串编码不是UTF8会转为UTF8
SETENV (NLS_LANG="AMERICAN_AMERICA.UTF8")  
-- 连接Oracle服务器的信息,最好OGG与Oracle安装在同一台机器上
USERID [email protected]:1521/nlpass01, PASSWORD 123456
-- discard文件,出错时可查看详细信息
DISCARDFILE ./dirrpt/extora.dsc, APPEND, MEGABYTES 1024
-- Trail文件路径,会生成多个Trail文件,文件名为前缀e1+文件编号,前缀不能超过2个字符
EXTTRAIL ./dirdat/e1
--支持truncate
GETTRUNCATES
-- 捕获delete、update不使用压缩方式
NOCOMPRESSDELETES FETCHMISSINGCOLUMNS
NOCOMPRESSDELETES
NOCOMPRESSUPDATES

--如果是pdb数据库,需要指定源的pdb名称

SOURCECATALOG pdbprod1
-- 需要捕获的表,每个表一行,全部列出,包含schema名
TABLE PAASTEST.ACT_EVT_LOG;

创建抽取组

ADD EXTRACT e1,TRANLOG,BEGIN NOW

 注册抽取组

register extract e1, database CONTAINER (pdbprod1)

补充1:要删除抽取组的步骤如下

删除Extract组:
GGSCI >DELETE EXTRACT e1
GGSCI >unregister extract e1, database

创建跟踪文件

ADD EXTTRAIL ./dirdat/e1, EXTRACT e1, MEGABYTES 200

 提示:跟踪文件的前缀名不能超过2个字符(英文或数字)

 补充2:要删除跟踪文件步骤如下

DELETE EXTTRAIL ./dirdat/e1
rm $OGG_HOME/dirdat/e1*

 启动或停止抽取进程

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

4. 配置PUMP进程

(1)创建参数文件

DBLOGIN USERIDALIAS ggprod1 domain ogg
edit param p1
# 添加
EXTRACT p1
PASSTHRU
RMTHOST 192.168.56.52, MGRPORT 7089, COMPRESS
RMTTRAIL ./dirdat/r1
SOURCECATALOG pdbprod1
TABLE test.*;

提示:RMTTRAIL(跟踪文件)名前缀不能超过2个字符(英文或数字) 

(2)创建pump组和跟踪文件

ADD EXTRACT p1, EXTTRAILSOURCE ./dirdat/e1
ADD RMTTRAIL ./dirdat/r1, EXTRACT p1, MEGABYTES 200

提示: EXTTRAILSOURCE是抽取进程中定义的抽取跟踪文件(确保一致)

Pump进程本质上也是一个EXTRACT进程,只是通过参数配置实现不同的功能,所以它的配置流程和抽取进程是一样的。 为了便于管理,抽取进程和pump进程采用数字结对命名,即抽取进程如果是序号1,那么其对应的pump进程也采用序号1,比如这里的抽取进程e1对应的pump进程是p1

(3)先启动目标端的管理进程

(4)启动和停止

start extract p1
#查看状态:
stats p1
status p1
info p1
#如果成功运行,在远程的Trail目录下应该生成文件,如果出错,查看错误内容:
view report p1

最后用info all命令检查所有进程是否正常,如下图

GGSCI (host50 as c##gguser@PRODCDB/CDB$ROOT) 23> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     RUNNING     E1          01:03:56      00:00:02    
EXTRACT     RUNNING     P1          00:00:00      00:00:02  

则说明基本配置没有问题,进程已经处于运行状态。

5.  ORACLE目标端的复制进程

先决条件,目标端参照上面的步骤完成OGG的安装部署(可不需要抽取和pump进程)和数据库准备。 如果目标端是多租户数据库,需要添加pdb的登录凭证,复制进程参数文件中必须指定目标库非根容器

alter credentialstore add user c##gguser@PDBPROD1,password Cloud_4u alias ggpdb1 domain ogg

(1)创建参数文件

DBLOGIN USERIDALIAS ggprod1 domain ogg
edit params r1
# 添加

REPLICAT r1
USERIDALIAS ggpdb1 domain ogg
discardfile ./dirrpt/r1.dsc,purge
ASSUMETARGETDEFS
MAP pdbprod1.test.demo, TARGET test.demo,KEYCOL(ID);

(2)添加检查点表

ADD CHECKPOINTTABLE pdbprod1.c##gguser.oggcheck

 (3)添加复制进程组

ADD REPLICAT r1, EXTTRAIL ./dirdat/r1, CHECKPOINTTABLE pdbprod1.c##gguser.oggcheck

重要提示:这里./dirdat/r1不是随便写的,要与源端pump进程参数文件中的RMTTRAIL参数后面的配置一致,否则目标端进程起来后不会因为找不到目标日志而报错,但是数据却无法同步到目标库的表。

(4)启动进程

start r1

# 查看状态
state r1
status r1
view r1
view report r1

附件1:目标端为PG异构数据库的同步配置

下面为同步到postgresql数据库,在目标端的复制进程配置

数据库准备,由于OGG不支持oracle之外的数据的DDL,所以目标端需手工建好目标表

psql -d test_db -U postgres
create table test_schema.demo_ora (id bigint,cname text,
    CONSTRAINT pk_demo_ora PRIMARY KEY (id));
# 在目标端操作,假设目标端已经完成oGG的安装和管理进程的配置,参见PG篇的部署
cd $OGG_HOME
ggsci

DBLOGIN SOURCEDB pg_tgt USERIDALIAS ggpg
ADD CHECKPOINTTABLE ggsch.oggcheck_forora
# 提示删除检查点表:delete checkpointtable <...>
edit params repora
# 添加
REPLICAT repora
SETENV (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
TARGETDB pg_tgt USERIDALIAS ggpg
discardfile ./dirrpt/repora.dsc,purge
ALLOWNOOPUPDATES
INSERTMISSINGUPDATES
RESTARTCOLLISIONS
HANDLECOLLISIONS
BATCHSQL BATCHERRORMODE
MAP test.demo, TARGET test_schema.demo_ora,KEYCOLS(ID);
#保存退出
# 添加REPLICAT
ADD REPLICAT repora, EXTTRAIL ./dirdat/re, CHECKPOINTTABLE ggsch.oggcheck_forora

# 启动replicat(前提是目标端的管理进程已启动)
start repora

附件2:问题回顾

通过这一轮的实践,总结自己遇到的几个问题点:

(1)源端如果是多租户数据库,那么在源端进行抽取,pump进程参数文件配置的时候要加入SOURCECATALOG 参数,用来指明针对的pdb名称,例如本例:SOURCECATALOG pdbprod1;

(2)数据库准备中,如果是多租户数据库,则要在根容器中创建通用账户即C##开头的用户,并在所有pdb中生效;

(3)目标端如果是多租户数据库,那么在复制进程参数配置时要指定连接到目标pdb,所以在准备的时候要添加一个连接到pdb的用户凭证方便使用;

(4)oracle版创建连接凭证的时候最好指定域(domain),使用凭证时也要指定到域,某些情况下默认域会找不到连接凭证

(5)在创建复制进程组的时候(ADD REPLICAT ..., EXTTRAIL ...)REPLICAT后的名称必须和复制进程参数文件中的REPLICAT参数后的定义名称一致,EXTTRAIL后的内容必须和源端pump进程参数文件中的RMTTRAIL 参数定义的内容一致

(6)最容易出错的地方还是这几个参数文件的参数的配置,了解这些参数的含义还是很有必要的,熟悉以后才能对排查各类故障有的放矢。

你可能感兴趣的:(oracle管理,oracle,数据库,java)