官方文档连接
OGG微服务安装与使用教程
SQL> alter database archivelog;
alter database archivelog
*
第 1 行出现错误:
ORA-01126: 数据库必须已装载到此实例并且不在任何实例中打开
-- 原因:修改归档模式的操作只能在 mount 状态下进行,不能处于 open 状态。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 4999610368 bytes
Fixed Size 8803024 bytes
Variable Size 1124076848 bytes
Database Buffers 3858759680 bytes
Redo Buffers 7970816 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 /u01/app/oracle/product/12/db_1/dbs/arch
最早的联机日志序列 2
下一个存档日志序列 4
当前日志序列 4
SQL> alter database open;
--开启Force logging
SQL>Alter database force logging
--开启supplemental logging
SQL>Alter database add supplemental log data;
--设置数据库GoldenGate参数
SQL> show parameter enable_goldengate_replication;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
enable_goldengate_replication boolean FALSE
SQL> alter system set enable_goldengate_replication=true scope=both;
系统已更改。
1、 上传OGG安装包
2、解压到对应的文件夹中注意权限所属
3、修改配置文件
vim response/oggcore.rsp
#-------------------------------------------------------------------------------
# Specify the installation option.
# Specify ORA12c for installing Oracle GoldenGate for Oracle Database 12c and
# ORA11g for installing Oracle GoldenGate for Oracle Database 11g
#-------------------------------------------------------------------------------
INSTALL_OPTION=ORA12c
#-------------------------------------------------------------------------------
# Specify a location to install Oracle GoldenGate
#-------------------------------------------------------------------------------
SOFTWARE_LOCATION=/data/ogg
4、修改环境变量并生效
vim /home/oracle/.bash_profile
export ORACLE_HOME=/u01/app/oracle/product/12/db_1
export OGG_HOME=/data/ogg
export PATH=$PATH:$OGG_HOME:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$OGG_HOME:$ORACLE_HOME/lib:/usr/lib
5、执行安装命令
/data/ogg/runInstaller -silent -nowait -responseFile /data/ogg/response/oggcore.rsp
6、查看依赖是否正常
ldd ggsci
7、 创建OGG相关子目录
create subdirs
-- 容器管理
-- 连接数据库
sqlplus / as sysdba
sqlplus user/password@orcl
-- 查看当前容器
show con_name;
-- 查看所创建的PDB
show pdbs;
-- 创建一个新的PDB
create pluggable database pdb1 admin user test identified by test file_name_convert=('/u01/app/oracle/oradata/orcl/pdbseed/','/u01/app/oracle/oradata/orcl/pdb1/');
-- 启动一个创建好的PDB
alter pluggable database pdb1 open;
-- 切换当前会话
alter session set container=pdb1;
-- 创建表空间(可以先不建)
create tablespace users datafile '/u01/app/oracle/oradata/orcl/pdb1/users01.dbf' size 800M;
-- 传统命令启动停止PDB
-- 启动
startup
-- 停止
shutdown immediate;
-- 切换root
alter session set container=CDB$ROOT;
--配置tnsnames.ora
vi $ORACLE_HOME/network/admin/tnsnames.ora
PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.101.38)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1)
)
)
-- 修改服务名称
SHOW PARAMETER service_names
alter system set service_names=orcl,pdb1,pdborcl
-- 测试可用性
tnsping pdb1
-- 用户权限赋予
-- 登录数据库管理员
sqlplus C##oracle/oracle as sysdba
-- 切换当前会话到对应的PDB
alter session set container=PDB1;
-- 授权
grant create user,drop user,alter user,create any view,connect,resource,dba,create session,create any sequence to test;
GRANT CONNECT,RESOURCE TO c##oracle container=all;
1、 教程pre-setup:
## 前置环境已完成
PDB=>pdb1
PDB Schema =>test
PDB Schema Password => test
PDB service name => ‘PDB1’
2、使用OGG安装目录中的脚本创建源表并加载数据
%(unixserver1) sqlplus test/test_pass@pdb1
SQLPLUS> @demo_ora_create
SQLPLUS> @demo_ora_insert
SQLPLUS> exit
1、Extract和Replicat一起工作,通过增量事务保持数据库接近实时的同步复制。通过以下方式执行此功能
2、 一旦创建了目标数据库,就可以用Oracle源数据库中的数据加载它。要加载目标数据库通过OGG工具
3、初始同步后
4、一旦Extract和Replicat运行,更改将永久复制。此时,我们还将进行演示以下功能。
关于命令语法的说明:
本教程中的命令会对目录、文件名、检查点组名、开始时间等。除非另有说明,否则这些项目不必与您的环境完全对应;他们并举例说明具体的例子。
其中提示符是GGSCI {unixserver1}>该命令应该在源系统上执行。{unixserver2}表示目标系统。
要了解确切的语法,请参考Oracle GoldenGate参考指南。
5、多租户容器数据库的其他要求
以下是适用于在多租户容器数据库之间进行复制的特殊要求
多租户容器数据库中的所有可插入数据库必须具有相同的属性,例如字符集、语言环境和大小写敏感性。可插拔数据库的字符集必须相同CDB的字符集或CDB字符集的二进制子集。
提取必须在集成捕获模式下操作。
提取必须作为一个普通用户连接到根容器(cdb$root),以便与logmining服务器。要指定根容器,请为使用USERID或USERIDALIAS参数指定的数据库用户使用适当的SQL*Net连接字符串。例如:C # # GGADMIN@FINANCE。更多关于“普通用户”的信息,请参考Oracle数据库12.1文档。
一个提取支持从多个pdb提取数据,但是一个副本只支持应用数据到1 PDB。因此,如果从多个pdb提取数据,就需要创建多个副本来应用所有这些数据的数据。
dbms_goldengate_auth.grant_admin_privilege包为捕获并应用于多租户容器数据库中。这包括容器参数,它对于extract用户,必须设置为ALL,如下例所示:
exec dbms_goldengate_auth.grant_admin_privilege('C##GGADMIN',container=>'all')
6、收集关于多租户容器数据库的信息
下面是如何确定环境信息的示例。
sqlplus / as sysdba
-- 下面的查询应该为容器数据库返回“YES”。
SQL> select cdb from v$database;
CDB
---
YES
-- 下面的查询将列出所有的pdb。
select name, open_mode from v$pdbs;
-- 下面的命令将打开一个特定的PDB。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=PDBORCL;
Session altered.
SQL> show con_name <==== Current session container.
CON_NAME
------------------------------
PDBORCL
SQL> alter database PDBORCL open;
Database altered.
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
--------------------------------------
PDBORCL READ WRITE
--下面的查询将列出所有的pdb(包括CDB)
SQL> connect /as sysdba
Connected.
SQL> select NAME,CON_ID,PDB from v$services;
NAME CON_ID PDB
---------------------------- ------ ------------------------------
pdb1 4 PDB1
pdborcl 3 PDBORCL
orclXDB 1 CDB$ROOT
orcl 1 CDB$ROOT
SYS$BACKGROUND 1 CDB$ROOT
SYS$USERS 1 CDB$ROOT
--Note: the read only PDB$SEED is not listed here. Please refer to Oracle Database 12.1 documentation for more information on PDB$SEED.
-- 这个SQL是从PDB中发出的,它将只列出与该PDB相关的数据
SQL> alter session set container=PDBORCL;
Session altered.
SQL> select NAME,CON_ID,PDB from v$services;
NAME CON_ID PDB
---------------------------- ------ ------------------------------
pdborcl 3 PDBORCL
-- 不需要“alter session set container”直接连接到PDB。您必须通过PDB网络服务进行连接。
$ sqlplus pdb1_u1/pdb1_u1@pdb1
SQL*Plus: Release 12.1.0.1.0 Production on Thu Dec 19 12:03:14 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Last Successful login time: Thu Dec 19 2013 12:02:49 -08:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing
options
SQL> show con_name
CON_NAME
------------------------------
PDB1
在启动初始加载之前,需要启用补充日志记录并启动实时提取。所有对源表发生的更改由Extract自动检测,然后格式化并在附近传输实时到Unix文件系统上的临时文件。完成初始加载后,将从这些文件中读取数据并由副本复制到目标数据库。
执行以下任务以实现提取和复制。
1、在源系统上
创建一个OGG用户
为更新操作添加补充的日志数据。
在源Unix系统上创建一个提取参数文件。
在数据库中提取寄存器
在源Unix系统上设置初始提取检查点。
创建远程跟踪文件
开始提取
2、在目标系统上
创建一个OGG用户
在目标Unix系统上创建一个副本参数文件。
在目标Unix系统的检查点设置初始副本。
多租户环境的提取用户必须是一个普通用户,并且必须登录到根容器。在下面的示例,提取userid为c##ggadmin,使用密码ggadmin。以下命令是中执行CDB$ROOT.
$(unixserver1) sqlplus / as sysdba
SQL> create user C##GGADMIN identified by ggadmin
User created.
SQL> exec dbms_goldengate_auth.grant_admin_privilege('C##GGADMIN',container=>'ALL');
PL/SQL procedure successfully completed.
SQL> grant dba to c##ggadmin container=all;
Grant succeeded.
Please note the password may be case sensitive
(check sec_case_sensitive_logon):
SQL> connect C##GGADMIN/GGADMIN
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> connect C##GGADMIN/ggadmin
Connected.
SQL> connect c##ggadmin/ggadmin
Connected.
--用户id和密码提取中的参数也应该是正确的。
默认情况下,Oracle只为更新操作更改了列。通常,这意味着主键在更新操作期间不会记录列。但是,Replicat需要主键列以便在目标系统上应用更新。GGSCI中的ADD TRANDATA或ADD SCHEMATRANDATA命令是用于使Oracle记录表中所有更新的主键列。 minimal supplemental logging需要在数据库级别启用。
要在PDB级别启用最小的补充日志记录,在源Unix系统上发出以下命令。
$(unixserver1) sqlplus / as sysdba
SQL> alter session set container=pdb1
SQL> ALTER PLUGGABLE DATABASE ADD SUPPLEMENTAL LOG DATA;
Pluggable Database altered.
要在表级添加补充日志数据,在源Unix系统上发出以下命令。为DDL复制在本教程中启用,使用ADD SCHEMATRANDATA确保补充日志记录自动启用已更改或新表。将添加TRANDATA演示为单个表的选项您只想为其复制DML。
$(unixserver1) cd /ggs
$(unixserver1) ggsci
GGSCI (unixserver1) > DBLOGIN USERID test@pdb1, PASSWORD test_pass
Successfully logged into database PDB1.
GGSCI (unixserver1) > ADD SCHEMATRANDATA pdb1.test
2014-10-17 13:23:47 INFO OGG-01788 SCHEMATRANDATA has been added on
schematest.
2014-10-17 13:23:47 INFO OGG-01976 SCHEMATRANDATA for scheduling columns
hs been added on schema test.
Or
GGSCI (unixserver1) 2> DBLOGIN USERID test@pdb1, PASSWORD test_pass
Successfully logged into database PDB1.
GGSCI (unixserver1) 3> ADD TRANDATA pdb1.test.tcustmer
Logging of supplemental redo data enabled for table PDB1.TEST.TCUSTMER.
TRANDATA for scheduling columns has been added on table 'PDB1.TEST.TCUSTMER'.
GGSCI (unixserver1) 4> ADD TRANDATA pdb1.test.tcustord
Logging of supplemental redo data enabled for table PDB1.TEST.TCUSTORD.
TRANDATA for scheduling columns has been added on table 'PDB1.TEST.TCUSTORD'.
## DBLOGIN命令为指定的用户建立数据库连接。系统会提示用户输入密码。
ADD TRANDATA或ADD SCHEMATRANDATA命令使Oracle记录所有更新的主键列对指定表的操作。对于多租户,必须指定模式和PDB。添加SCHEMATRANDATA在启用DDL复制时,应该使用。
准备环境来绘制和收集数据
在执行数据提取(在Unix环境中将数据从Oracle移动到Oracle)之前,执行以下任务。
服务器收集器程序通过TCP/IP连接从源Unix上的Extract接收传入数据然后将增量更改输出到目标Unix系统上的临时存储。服务器收集器在移动时由Manager进程根据提取程序的请求自动启动系统间的数据。
管理程序提供了许多重要的功能,包括监视关键的系统组件开始GoldenGate过程。在Unix上运行任何其他GoldenGate程序之前,必须先启动管理器。
在启动管理器之前,您必须编辑管理器的启动参数文件(称为/ggs/dirprm/mgr.prm)并添加端口参数。您可以使用Unix编辑器手动完成此操作,也可以使用GGSCI启动程序这些命令:
GGSCI (unixserver1) > EDIT PARAMS MGR
在这两种情况下,将以下文本添加到经理。PRM文件,然后保存文件并退出。
PORT 7809
使用以下命令通过GGSCI启动Manager。
GGSCI (unixserver1) > START MANAGER
如果目标Oracle数据库位于另一个系统上,则在目标系统上重复上述步骤。启动目标
管理器进程与启动管理器命令。
GGSCI (unixserver2) > EDIT PARAMS MGR
PORT 7809
GGSCI (unixserver2) > START MANAGER
扩展:
MANAGER进程参数配置说明:
PORT:指定服务监听端口,默认为7809。
DYNAMICPORTLIST:动态端口,可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标端的Collector、Replicat、GGSCI进程通信也会使用这些端口。
COMMENT:注释行,也可以用–来代替。
AUTOSTART:指定在管理进程启动时自动启动哪些进程。
AUTORESTART:自动重启参数设置。本处设置表示每3分钟尝试重新启动所有EXTRACT进程,共尝试5次;
PURGEOLDEXTRACTS:定期清理trail文件设置。本处设置表示对于超过3天的trail文件进行删除。
LAGREPORTHOURS、LAGINFOMINUTES、LAGCRITICALMINUTES:定义数据延迟的预警机制。本处设置表示MGR进程每隔1小时检查EXTRACT的延迟情况,如果超过了30分钟就把延迟作为信息记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。
原文解释连接
大多数提取参数被输入到参数文件中。您可以使用vi或手动创建参数文件Unix上的另一个编辑器。参数文件名与组的名称相同。在源系统上发出以下命令,从GGSCI启动:
GGSCI (unixserver1) > EDIT PARAMS EXTORA
You can also edit the file /ggs/dirprm/extora.prm directly from any other text editor.
在EXTORA中输入以下参数。注意,参数的顺序很重要。
--
-- Extract parameter file to capture TCUSTORD
-- and TCUSTMER changes
--
EXTRACT EXTORA
USERID c##ggadmin, PASSWORD ggadmin
RMTHOST unixserver2, MGRPORT 7809
RMTTRAIL ./dirdat/rt
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
LOGALLSUPCOLS
UPDATERECORDFORMAT COMPACT
TABLE pdb1.test.TCUSTMER;
TABLE pdb1.test.TCUSTORD;
下述解释原文
EXTRACT进程参数配置说明:
SETENV:配置系统环境变量。
USERID/PASSWORD: 指定OGG连接数据库的用户名和密码,连接的是源端的数据库。例如:userid ogg@source, password gg。source是连接源库的tnsname。
COMMENT:注释行,也可以用–来代替。
TABLE:定义需复制的表,后面需以;结尾
TABLEEXCLUDE:定义需要排除的表,如果在TABLE参数中使用了通配符,可以使用该参数指定排除掉的表。
GETUPDATEAFTERS|IGNOREUPDATEAFTERS:是否在队列中写入后影像,缺省复制。
GETUPDATEBEFORES| IGNOREUPDATEBEFORES:是否在队列中写入前影像,缺省不复制。
GETUPDATES|IGNOREUPDATES:是否复制UPDATE操作,缺省复制。
GETDELETES|IGNOREDELETES:是否复制DELETE操作,缺省复制。
GETINSERTS|IGNOREINSERTS:是否复制INSERT操作,缺省复制。
GETTRUNCATES|IGNORETRUNDATES:是否复制TRUNCATE操作,缺省不复制。
RMTHOST:指定目标系统及其Goldengate Manager进程的端口号,还用于定义是否使用压缩进行传输。
RMTTRAIL:指定写入到目标端的哪个队列。
EXTTRAIL:指定写入到本地的哪个队列。
SQLEXEC:在extract进程运行时首先运行一个SQL语句。
PASSTHRU:禁止extract进程与数据库交互,适用于Data Pump传输进程。
REPORT:定义自动定时报告。
STATOPTIONS:定义每次使用stat时统计数字是否需要重置。
REPORTCOUNT:报告已经处理的记录条数统计数字。
TLTRACE:打开对于数据库日志的跟踪日志。
DISCARDFILE:定义discardfile文件位置,如果处理中有记录出错会写入到此文件中。
DBOPTIONS:指定对于某种特定数据库所需要的特殊参数。此处ALLOWUNUSEDCOLUMN参数表示,当抽取进程遇到一个没有使用的字段时只生成一个警告,进程会继续执行而不会被异常终止(abend)。
TRANLOGOPTIONS:指定在解析数据库日志时所需要的特殊参数。本处配置参数CONVERTUCS2CLOBS只用在extract端UTF字符类型,并且OGG11.1.1版本之前处理CLOB才需要。
WARNLONGTRANS:指定对于超过一定时间的长交易可以在gsserr.log里面写入警告信息,本处配置为每隔5分钟检查一次长交易,对于超过2小时的进行警告。
DYNAMICRESOLUTION:有时候开启OGG进程的时候较慢,可能是因为需要同步的表太多,OGG在开启进程之前会将需要同步的表建立一个记录并且存入到磁盘中,这样就需要耗费大量的时间。使用该参数来解决此问题。
FETCHOPTIONS:参数NOUSESNAPSHOT表示不会从闪回日志中获取数据。
1、为了启用集成提取模式,必须在数据库中注册提取。
要将Extract 注册到数据库以进行集成Extract ,请在源Unix系统上发出以下命令。
$(unixserver1) cd /ggs
$(unixserver1) ggsci
GGSCI (unixserver1) > dblogin userid c##ggadmin, password ggadmin
Successfully logged into database CDB$ROOT.
GGSCI (unixserver1) > REGISTER EXTRACT EXTORA DATABASE CONTAINER(PDB1)
Extract EXTORA successfully registered with database at SCN 13317219.
带有数据库选项的REGISTER命令为提取组启用了集成捕获模式。在这种模式下,Extract与数据库logmining服务器集成,以逻辑更改记录(LCR)的形式接收更改数据。提取不读取重做日志。Extract执行捕获处理、过滤、转换和其他需求。容器选项允许用户指定一个特定的PDB或一系列的PDBs。
2、设置Extract 检查点
检查点使Extract和Replicat能够从一次运行持续地处理数据。检查点允许重新启动Extract和Replicat,同时确保所有记录复制一次且仅复制一次。
Extract需要两个检查点:一个是到Oracle重做(所有数据库更改的源),另一个是到远程提取路径。远程提取路径是在目标Unix系统上创建的一系列临时文件,其中包含提取的更改。
要在源系统上设置这些检查点,在Unix上发出以下命令。
$(unixserver1) cd /ggs
$(unixserver1) ggsci
GGSCI (unixserver1) > ADD EXTRACT EXTORA, INTEGRATED TRANLOG, BEGIN NOW
ADD EXTRACT命令建立一个提取检查点组名称。集成的TRANLOG子句在集成捕获模式下添加这个摘录。在这种模式下,Extract与数据库logmining服务器集成,后者直接将逻辑更改记录(LCR)传递给Extract。提取不读取重做日志。BEGIN now子句使Extract处理在添加提取组时或之后发生的数据库操作。或者,您可以指定日期和时间,而不是现在的关键字。
定义提取远程跟踪文件
要在源系统上定义提取远程跟踪,在Unix上发出以下命令
GGSCI (unixserver1) > ADD RMTTRAIL ./dirdat/rt, EXTRACT EXTORA, MEGABYTES 10
ADD RMTTRAIL命令在远程提取跟踪中建立一个检查点。在此跟踪中的每个文件达到大约10兆字节后,Extract按顺序创建下一个文件。10兆字节仅用于培训目的。对于生产实现来说,这个值太小了。文件将命名为rt000000、rt000001、rt000002等。这些文件是复制程序的输入源。注意,可以指定任何两个字符的前缀,而不是’ rt '。
选择适合您的环境的组名称、目标文件和大小。
关于远程提取路径的注释:
远程提取跟踪文件只是临时的。Manager可以配置(使用purgeoldextract)在提取和副本都完成处理后删除跟踪文件。因此,中间存储的需求实际上是相当小的。通过EXTRACTROLLOVER参数,还可以通过一天中的时间而不是文件大小来控制从一个文件到下一个文件的翻转。
3、 Running Real-time Extract
捕获数据库更改的提取程序是从源Unix系统上的GGSCI启动的。
$(unixserver1) /ggs/ggsci
GGSCI (unixserver1) > START EXTRACT EXTORA
提取将继续运行,直到通过GGSCI显式地停止。
1、集成的副本无法连接到根容器。replicat用户必须直接连接到特定的PDB。因此必须创建特定的用户。
$(unixserver2) sqlplus / as sysdba
Connect to the specific PDB :
SQL> alter session set container = pdb1 ;
Session altered.
Create the User:
SQL> create user repuser identified by rep_pass container=current ;
User created.
Grant Permissions:
SQL> grant dba to repuser ;
Grant succeeded.
SQL> exec dbms_goldengate_auth.grant_admin_privilege('REPUSER',container=>'PDB1');
PL/SQL procedure successfully completed.
Check Connection with new user:
SQL> disconnect
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 -
64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage
Management, OLAP, Advanced Analytics and Real Application Testing options
SQL> connect repuser/rep_pass@pdb1
Connected.
2、配置Replicat参数文件
与Extract一样,必须创建一个Replicat参数文件。在这里,您可以在Unix上手动使用vi或其他编辑器。在本例中,我们为此创建了以下文件(称为/ggs/dirprm/ report.prm)。确保文件以文本格式保存。注意,参数的顺序很重要。或者,您可以在目标Unix系统上的GGSCI中启动vi程序。
$(unixserver2) cd /ggs
$(unixserver2) ggsci
GGSCI (unixserver2) > EDIT PARAMS REPORA
--
-- REPLICAT parameter file to replicate changes
-- for TCUSTORD and TCUSTMER.
--
REPLICAT REPORA
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/repora.dsc, PURGE, MEGABYTES 100
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
DBOPTIONS INTEGRATEDPARAMS(parallelism 6)
USERID repuser@pdb1, PASSWORD rep_pass
MAP pdb1.test.*, TARGET pdb1.test.*;
3、 参数释义:
**REPLICAT REPORA *GGSCI建立的REPORA检查点关联。这也隐式地将提取trail /ggs/dirdat/rt作为要复制的数据源。
**ASSUMETARGETDEFS:**允许Replicat假设源Oracle表的结构与目标表相同。这样就不需要从源系统检索表定义。如果源表的结构与目标不同,则必须使用DEFGEN生成源定义。
**DISCARDFILE:**确定复制期间失败的操作的记录的输出位置。丢弃文件为用于在复制过程中调试问题。该文件将包含所有被拒绝的行以及相关的原因。在启动时指定清除时(可以指定追加)清除任何现有内容。MEGABYTES指定了最大的文件大小。
**DDL INCLUDE MAPPED:**为映射对象启用应用到目标数据库的DDL更改。
**DDLOPTIONS REPORT:**允许将DDL处理信息写入报表文件。
**DBOPTIONS INTEGRATEDPARAMS:**传递控制数据库入站服务器的参数设置在目标Oracle数据库中。并行性设置进程的数量。
**USERID、PASSWORD:**用户id和密码必须与Oracle数据库中的现有帐户匹配。活动的PDB由@pdb1表示。在本例中,密码是明文的。最佳实践是加密密码。
**MAP:**每个映射条目在源Oracle表和目标Oracle表之间建立一种关系
**注意:**没有指定结束参数。END的省略意味着Replicat将继续运行,直到用户显式地停止(或发生致命错误)。END是在批处理模式和在线模式下运行副本时指定的
此外,任何复制错误都将导致副本中止(例如,重复记录条件)。请参阅关于以下复制参数的文档来定制错误响应:handlecollizations、OVERRIDEDUPS、INSERTMISSINGUPDATES和REPERROR。注意,本教程稍后将讨论重启问。
4、设置检查点副本
Replicat检查点在由extract创建的提取路径中建立一个初始位置。默认情况下,这总是提取的第一个记录。检查点在每个事务之后更新,确保所有数据在运行期间得到处理。
要设置Replicat检查点,在目标Unix系统上发出以下命令。
GGSCI (unixserver2)> ADD REPLICAT REPORA, INTEGRATED, EXTTRAIL ./dirdat/rt
ADD REPLICAT命令将extract创建的提取跟踪(EXTTRAIL)作为要复制的信息源。REPORA是这个检查点组的名称。集成T子句以集成应用模式添加此副本。
本节演示了GoldenGate的Oracle到Oracle初始加载工具的基本特性。
此时,可以直接从Oracle表中提取数据,进行转换,然后加载到Oracle表中。从Oracle到Oracle的初始加载包括以下任务。
收集当前的SCN是为了确定应该在何时启动实时副本,并确保目标表的加载状态一致。这个输出将在两个地方使用:1)初始加载提取和2)启动实时复制的选项。这样就避免了使用可能产生问题的手柄。
$(unixserver1) sqlplus / as sysdba
Connect to the specific PDB :
SQL> alter session set container = pdb1 ;
Session altered.
Determine Current SCN (Save this information):
SQL> SELECT current_scn from v$database ;
CURRENT_SCN
-----------
75578010
指定提取参数将提取参数输入到您通过源系统上的任何文本编辑器创建的提取参数文件中。下面的文件(名为/ggs/dirprm/initext.prm)就是为此目的创建的一个文件示例。注意,参数的顺序非常关键。请用执行上述命令时在系统上捕获的SCN替换突出显示的SCN
GGSCI (unixserver1) > EDIT PARAMS INITEXT
--
-- Extract parameter file to capture TCUSTORD
-- and TCUSTMER initial data for Replicat
--
EXTRACT INITEXT
USERID c##ggadmin, PASSWORD ggadmin
RMTHOST unixserver2, MGRPORT 7809
RMTTASK REPLICAT, GROUP INITREP
TABLE pdb1.test.*, SQLPREDICATE ‘AS OF SCN 75578010’ ;
参数解释:
行首的两个破折号(——)表示注释。
EXTRACT是此批处理任务使用的组名,它直接从表而不是重做日志中检索数据,并将数据发送到RMTTASK复制组。
用户id和密码必须与Oracle数据库中的现有帐户匹配。活动Oracle数据库由用户的ORACLE_SID环境变量指示。在本例中,密码是明文的。最佳实践是加密密码。
RMTHOST参数指定数据移动到的目标Unix系统的TCP/IP地址。MGRPORT指定已配置Manager侦听提取服务器收集器请求的众所周知的端口号。RMTHOST也可以指定为标准的TCP/IP主机名。
RMTTASK条目决定将提取的数据输出到目标(在本例中是一个名为INITREP的复制组)的何处。
每个表条目指定要从中提取数据的表和数据的目标结构。如果源列名和目标列名相同,则不需要其他参数。如果您的列有不同的名称,请参考COLMAP语句,了解如何显式地映射每一列。确保您更改了模式以匹配表的所有者。SQLPREDICATE确保初始加载数据与指定的SCN一致
还要注意,在表条目的末尾需要一个分号(。
从表中提取列和行的子集
通常,目标平台需要源表列的一个子集,而不是每列。
例如,目标应用程序可能只使用源表中70个列中的10个。在这种情况下,
COLMAP子句可以将映射限制为这10列。
作为另一种选择,可以通过指定WHERE子句来限制要传输的行集。例如,参数条目表TCUSTORD (CUST_CODE = " ABC "或CUST_CODE = " XYZ ")将排除任何不符合条件的行。
GGSCI (unixserver2) > EDIT PARAMS INITREP
--
-- REPLICAT parameter file to replicate initial changes
-- for TCUSTMER.
--
REPLICAT INITREP
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/tcustmer.dsc, APPEND
USERID repuser@pdb1, PASSWORD rep_pass
MAP pdb1.test.*, TARGET pdb1.test.*;
参数解释:
REPLICAT是批处理任务组的名称,必须与源提取参数文件中指定的名称匹配。
ASSUMETARGETDEFS告诉Replicat假设源Oracle表的结构类似于目标表。这样就不需要从源系统检索表定义。如果源表的结构与目标不同,则必须使用DEFGEN生成源定义。
DISCARDFILE确定将复制期间失败的操作输出到何处。丢弃文件对于在复制过程中调试问题非常有用。它将包含任何被拒绝的行和相关的原因。当指定清除时,将在启动时清除现有内容,或改为指定追加内容。
用户id和密码必须与Oracle数据库中的现有帐户匹配。活动Oracle数据库由用户的ORACLE_SID环境变量指示。在本例中,密码是明文的。最佳实践是加密密码。
每个映射条目在源Oracle表和目标Oracle表之间建立一种关系。在本例中,我们使用了一个通配符映射。
此外,任何复制错误都将导致副本中止(例如,重复记录条件)。请参阅关于以下复制参数的文档来定制错误响应:handlecollizations、OVERRIDEDUPS、INSERTMISSINGUPDATES和REPERROR。注意,本教程稍后将讨论重启问题。
GGSCI (unixserver1) > ADD EXTRACT INITEXT, SOURCEISTABLE
在启动副本之前,必须将其定义为GGSCI中的批处理任务。使用GGSCI在目标系统上使用以下命令配置Replicat任务。
GGSCI (unixserver2) > ADD REPLICAT INITREP, SPECIALRUN
Running Initial Load
在源系统上使用以下命令以在线模式(使用GGSCI)或以批处理模式(使用Unix shell)启动提取程序。当为初始加载运行Extract时,以批处理模式运行它,如下所示
GGSCI (unixserver1) > START EXTRACT INITEXT
可以使用INFO或STATUS命令监视进程。注意,输出将被发送到提取和副本的报告文件。
GGSCI (unixserver1) > INFO EXTRACT INITEXT
要查看报告文件,请使用以下GGSCI命令。
GSCI (unixserver1) > VIEW REPORT INITEXT
GGSCI (unixserver2) > VIEW REPORT INITREP
提取完成后,您将看到统计信息,指示有多少记录被输出到目标表中。
此时,您将需要应用在执行初始加载时源系统上发生的更改
在源数据库保持联机状态时初始化目标
本教程使用了OGG初始加载工具。当源数据库处于活动状态并且使用OGG工具执行初始加载时,使用在初始加载步骤中捕获的SCN来确保Replicat只处理加载SCN之后的操作。AFTERCSN选项将避免重复和/或丢失记录条件,而当副本仅在初始加载SCN后处理数据而与源同步时。关于文档中描述的从Oracle源实例化的最佳实践,请参考Oracle GoldenGate最佳实践:从Oracle源数据库实例化(Doc ID 1276058.1)。
Running Replicat
从目标Unix命令提示符启动副本,如下所示。确保使用在初始加载步骤中捕获的SCN。在我们的示例中,75578010是在初始加载步骤中捕获的SCN。只有在SCN 75578010之后捕获的数据将被应用。
$(unixserver2) cd /ggs
$(unixserver2) ggsci
$GGSCI (unixserver2) > START REPLICAT REPORA, AFTERCSN 75578010