博文结构图如下:
一、环境描述以及注意事项1.1 环境简介
同步用户为:hr。
1.2 OGG网络带宽规划GoldenGate数据同步所需的网络带宽是目前各种技术中最低的,复制全库数据时,通常GoldenGate队列文件大小与数据库日志大小的比例为1:4,GoldenGate网络传输压缩比例为1:8,TCP/IP网络传输效率最高为0.7; –根据以上数据估算,以业务高峰期每小时产生50GB数据库日志为例,GoldenGate维持秒级数据 同步延迟的带宽要求为: 50 * 1024 (MB/小时) * 8 (每字节8位) / 3600 (秒/小时) / 4 (队列/日志比例) / 8 (传输压缩比例) / 0.7 (网络传输效率) = 5.08 Mbps
1.3 OGG安装注意事项1、尽量避免OGG 双向同步,ogg双活安装需要业务避免更改同一行记录。 2、配置Extract,为了避免数据丢失,在启动extract 之前,必须确保所有open 的事务都已经完成。(或者在配置时,停止所有中间件以及监听业务) 3、特别大的表,或者操作太频繁的表,建议单独拆成多组抽取,还原进程。 4、TRAIL是否压缩,以及到期时间,字符集设置,ogg管理密码是否加密。 5、自动过滤重复时段的数据冲突,用于不能停机执行初始化,打开该参数后不会将数据错误报到discard文件中。 6、rac ogg 需要安装到共享目录上。 7、源库和目标库设置参数ENABLE_GOLDENGATE_REPLICATION 为true (In Oracle 11.2.0.4 you will need to set ENABLE_GOLDENGATE_REPLICATION to TRUE in the init.ora parameter file for any source or target database)。 8、安装的所有主机尽量时间保持一直。 9、使用TRANLOGOPTIONS参数与DBLOGREADER选项参数文件如果RDBMS是Oracle 11.1.0.7或Oracle 11.2.0.2或更高版本11g R2版本。 10、DDL 数据库版本高于10G,不需要关闭回收站。
1.4 关于经典抽取模式在经典捕获模式下,Oracle GoldenGate Extract进程从源库上的Oracle重做或归档日志文件或备库上的归档日志中捕获数据更改。
经典捕捉完全支持大多数Oracle数据类型,对复杂数据类型提供有限的支持。经典捕获是最初的Oracle GoldenGate捕获方法。对于Oracle GoldenGate支持的任何源Oracle RDBMS,您可以使用经典捕获,但多租户容器数据库除外。 经典捕获来支持以下内容:
1.5 关于集成抽取模式在集成捕获模式下,Oracle GoldenGate Extract进程直接与数据库登录服务器进行交互,以逻辑更改记录(LCR)的形式接收数据更改。图显示了集成捕获模式下的提取配置。
与经典捕捉相比,集成捕捉支持更多的数据和存储类型,支持更加透明。 以下是集成捕获的一些额外好处:
集成捕获支持的数据库版本
完全支持:为了支持所有Oracle数据和存储类型,源数据库的兼容性设置必须至少为11.2.0.3,集成解压缩11.2.x(My Oracle Support文档ID 1557031.1Opens a new window)的11.2.0.3数据库特定捆绑软件修补程序。
要在不安装DDL支持对象的情况下支持DDL捕获,源数据库必须至少为Oracle 11.2.0.4或更高版本。对于较早的数据库版本,需要DDL支持对象。 有限的支持:可以在11.2.0.3下挖掘数据库上对兼容性小于11.2.0.3的源数据库使用集成捕获,但在此模式下,SECUREFILELOB,XML列,透明数据加密和UDT基于数据库版本和兼容性。数据库必须具有适用于集成提取11.2.x(Doc ID 1557031.1Opens a new window)的11.2.0.3数据库特定捆绑软件修补程序。数据库必须与源数据库版本相同(或更高)的数据库版本(最低为11.2.0.3)。
Integrated Replicat异步应用事务。不具有相互依赖性的事务可以安全地执行并按顺序执行,以实现快速吞吐量。具有依赖关系的事务保证以与源上相同的顺序应用。 入站服务器中的读取器进程根据目标数据库中定义的约束(主键,唯一外键)计算工作负载中事务之间的依赖关系。障碍事务和DDL操作也是自动管理的。协调员进程协调多个事务并在应用服务器之间维护订单。 如果入站服务器不支持配置的功能或列类型,则Replicat与入站服务器分离,等待入站服务器在其队列中完成事务,然后通过OCI 以直接应用模式将事务应用于数据库。应用直接事务后,复制器在集成模式下恢复处理。 Replicat在直接模式下应用以下功能:
集成复制要求要使用集成的Replicat:
1.6 关于非整合复制在非集成模式下,Replicat进程使用标准SQL将数据直接应用到目标表。在这种模式下,Replicat的操作如下:
阅读Oracle GoldenGate跟踪。 执行数据过滤,映射和转换。 构造代表源数据库DML或DDL事务的SQL语句(按提交顺序)。 通过Oracle调用接口(OCI)将SQL应用于目标。
1.7 决定使用哪种应用方法使用不同的捕获和应用模式,可以一起使用以下捕捉和应用模式:
经典捕获(Oracle或非Oracle源)和非集成的Replicat 经典捕捉(Oracle或非Oracle源)和集成的Replicat 集成捕获和非集成复制 集成捕获和集成Replicat
您可以在同一个源Oracle GoldenGate实例内同时使用集成的捕获和经典捕获,并且可以在同一个目标Oracle GoldenGate实例内同时使用集成的Replicat和非集成的Replicat。此配置需要仔细将对象放置在相应的进程组中,因为在经典和集成捕捉模式之间以及在非集成和集成的Replicat模式之间没有DDL或DML的协调。每个提取组必须根据表数据类型和属性处理适合处理模式的对象。一个Extract中没有对象可以对另一个Extract中的对象具有DML或DDL依赖性。Replicat配置必须应用相同类型的隔离。
Oracle版本支持的推荐Oracle GoldenGate配置是在Oracle源上使用一个集成捕获,在Oracle目标上使用每个源数据库上的一个集成Replicat。集成捕获比传统捕获更全面地支持某些数据类型。一个集成的Replicat配置通过入站服务器支持所有Oracle数据类型,或者在必要时通过切换直接应用来支持所有Oracle数据类型,并保持源事务完整性。您可以根据需要将并行度设置调整到所需的应用性能级别。
二、OGG安装要求2.1环境环境要求磁盘空间要求:Linux 12c 需要至少 521M 磁盘空间 OUI安装;rac OCFS 官方建议支持自动faliover。
内存要求:oracle官方建议在大多数情况下,用户不需要更改默认的内存管理配置Oracle GoldenGate。(In most cases, users need not change the default Oracle GoldenGate memory management configuration.)
网络要求:带宽多大参考1.2;Oracle GoldenGate需要一些毫无保留的和不受限制的TCP / IP端口的,它的数量取决于OGG的进程的数量和类型。
操作系统用户权限要求:安装在Unix操作系统下,安装Oracle GoldenGate的用户必须 在Oracle GoldenGate安装目录的写权限。Oracle GoldenGate提取,复制,和经理必须操作过程有权限读取、写入和删除文件的操作系统用户。
数据库要求:ORACLE 数据库必须为归档模式。
RAC环境要求:
1、将Oracle GoldenGate Manager流程(和唯一的管理器)注册为集群管理的资源, Manager必须唯一的Oracle GoldenGate进程,即集群管理软件启动停止,因为它是管理所有其他进程的父进程,将Oracle GoldenGate集成到集群中 2、如果集群使用一个虚拟IP地址(如Oracle Clusterware),您可能需要为管理程序获取可用的固定IP地址。VIP必须公共子网上的一个可用的IP地址,不能确定通过DHCP。在提取数据泵的参数文件中,指定其中的VIP远程管理器作为RMTHOST参数的输入值。其他的 访问Manager的GoldenGate产品也应该使用VIP。 3、确保集群中的所有节点具有相同的兼容参数 设置。 4、当您配置管理器时,添加AUTOSTART和AUTORESTART参数该管理器将自动启动复制过程。在需要的时候,可以控制提取、复制和其他Oracle GoldenGate进程GoldenGate用户界面。 5、只在一个节点上安装共享驱动器。这阻止了进程的存在开始另一个节点。在所有节点上使用相同的挂载点。
6、可以专门为OGG 添加一个服务。
2.2 OGG支持的数据类型OGG 12.1支持的类型: 2.2.1 ANYDATA 类型■ BINARY_DOUBLE ■ BINARY_FLOAT ■ CHAR ■ DATEINTERVAL DAY TO SECOND ■ INTERVAL YEAR TO MONTH ■ NCHAR ■ NUMBER ■ NVARCHAR2 ■ RAW ■ TIMESTAMP ■ TIMESTAMP WITH TIME ZONE ■ TIMESTAMP WITH LOCAL TIMEZONE ■ UDTs ■ VARCHAR/VARCHAR2
2.2.2 Numeric 类型■ NUMBER up to the maximum size permitted by Oracle ■ BINARY FLOAT ■ BINARY DOUBLE
2.2.3 Character类型■ CHAR ■ VARCHAR2 ■ LONG ■ NCHAR ■ NVARCHAR2
2.2.4 Multi-byte 类型■ NCHAR and NVARCHAR2 multi-byte character data types ■ Multi-byte data stored in CHAR and VARCHAR2 columns
2.2.5 Binary 类型■ RAW ■ LONG RAW
2.2.6 Date and Timestamp 类型■ DATE ■ TIMESTAMP 注意: Oracle GoldenGate不支持负的日期。 ■间隔一天,间隔年只是如果目标大小的支持列等于或大于源的列。 ■Oracle GoldenGate支持捕获和时间戳和时间复制带为UTC偏移(timestamp 2011-01-01 8:00:00 - 8”)。 ■时间戳和时区的TZR(区域ID)是复制支持数据的变化,而不是初始荷载,为返回,或操作的地方必须从数据库中提取列。在这些情况下,区域id是当选定列时,由数据库转换为时间偏移量。复制将时间戳复制为具有时间偏移值的日期和时间数据。 2.2.7 Large Object 类型■ CLOB ■ NCLOB ■ BLOB ■ SECUREFILE and BASICFILE
Oracle GoldenGate不支持过滤、列映射,或操纵大于4K的大对象。
2.2.8 XML Data Types支持以下XML类型: ■集成捕获模式,Oracle GoldenGate支持XMLType列XMLType表存储为XML CLOB,XML和XML二进制对象关系。 ■经典的捕获模式,Oracle GoldenGate支持XMLType列存储XML和XML二进制字符
2.2.9用户定义或抽象类型用户定义或抽象类型 Oracle GoldenGate支持用户定义类型(UDT)或抽象数据类型(ADT) 源和目标对象具有相同的结构。 模式名称可以是 不同。 支持的一般限制 - 集成和经典捕获模式 ■基于重做的支持大多数属性类型,但可以从源代码提取 当UDT包含表时: – Nested Table – SDO_TOPO_GEOMETRY – SDO_GEORASTER ■ Fetch-based does not support UDT that contains: – ANYDATA – TIMESTAMP WITH TIMEZONE – TIMESTAMP WITH LOCAL TIMEZONE – INTERVAL YEAR TO MONTH – INTERVAL DAY TO SECOND – BINARY FLOAT – BINARY DOUBLE ■ Oracle GoldenGate GG does not support UDTs that contain: Details of Support for Oracle Data Types System Requirements and Preinstallation Instructions 1-17 – CFILE – BFILE – REF – OPAQUE (with exception of XMLType and ANYDATA
2.3 DML支持的对象和操作2.3.1 Tables, Views, Materialized ViewsOracle GoldenGate支持对常规表进行的以下DML操作, 索引组织表,聚集表和实例化视图。 ■插入 ■更新 ■删除 ■关联交易控制操作 提示:您可以使用DBA_GOLDENGATE_SUPPORT_MODE数据字典 查看以显示有关Oracle GoldenGate级别的信息捕获数据库中的表的进程支持。 Oracle GoldenGate支持包含任意数量行的表。 ■一行长度最多可达4 MB。如果Oracle GoldenGate配置为包含 在其处理范围内的列的前后图像,为4 MB最大长度适用于完整的图像加长度的总长度 的后图像。例如,如果列上有UPDATE操作被用作行标识符,处理前后图像 总共不能超过4 MB。列之前和之后的图像也是必需的这不是行标识符,而是用作冲突的比较列检测和分辨率(CDR)。允许超过4 KB数据的列,例如LOB和LONG,只有前4 KB的数据存储在行和有助于最大行长4MB。 ■Oracle GoldenGate支持每个表的最大列数由数据库支持。
2.3.2 GoldenGate支持分区属性的表– Range partitioning – Hash Partitioning – Interval Partitioning – System Partitioning – Composite Partitioning – Virtual Column-Based Partitioning – Reference Partitioning – List Partitioning
2.3.3 Oracle GoldenGate支持仅包含一列的表不包括以下类型的表(Oracle GoldenGate supports tables that contain only one column, except when the column contains one of the following data types) – LOB – LONG – Nested table – UDT – VARRAY – XMLType
2.4 DDL支持的对象和操作当源数据库是Oracle 11.2.0.4或更高版本的时候,提取操作是集成的模式,DDL捕获支持集成到数据库日志挖掘服务器中不需要使用DDL触发器。必须设置数据库参数11.2.0.4.0兼容性。在集成捕获模式中,提取支持DDL包括基于密码的列加密。 --注意: Password-based column encryption in DDL is not supported in classic capture mode. 2.4.1 支持的DML对象– clusters – directories – functions – indexes – packages – procedure – tables – tablespaces – roles – sequences – synonyms – triggers – types – views – materialized views – users
Oracle editionbased Redefinition(EBR)数据库复制的Oracle DDL是 支持以下Oracle数据库对象的集成提取: – functions – library – packages (specification and body) – procedure – synonyms – types (specification and body) – views EBR不支持使用DDL触发器。
2.4.2 支持的DML操作■GoldenGate支持DDL操作4 MB的大小。GoldenGate用字节来度量DDL语句的大小,而不是字符。这大小限制包括包、过程和函数。实际的大小限制DDL的支持是近似的,因为大小不仅包括语句文本,但也包括Oracle GoldenGate的维护开销对象名称的长度、DDL类型和其他特征在内部保存DDL记录。 ■GoldenGate支持全局临时表(GTT)DDL操作要清晰可见,这样它们就可以被复制。您必须设置DDLOPTIONS允许这个操作的参数,因为它不是默认设置的
2.5 OGG不支持的数据类型和对象集成和经典的捕获模式
2.5.1 不支持的Oracle数据类型Oracle GoldenGate不支持以下数据类型。 ■对于不具有VARRAYS的数据类型,基于ANYDATA fetch的列支持 包括嵌入在这些数据类型中的命名集合和VARRAYS ■ANYDATASET ■ANYTYPE ■BFILE ■MLSLABEL ■ORDDICOM ■TIMEZONE_ABBR ■URITYPE ■包含不受支持的Oracle数据类型的UDT ■Oracle GoldenGate不支持标识列数据的复制或有效时间时间列数据。 以及calssical不支持的capture 类型,如:LONG VARCHAR,XML columns stored as Object-Relational,Basic Compression, OLTP-Compression, Exadata Hybrid Columnar Compression,Invisible(隐形)columns。
2.5.2 不支持索引组织表索引组织表的不支持限制,这些适用于经典拍摄模式。 ■启用密钥压缩的IOT(由COMPRESS关键字指示key_compression子句)在经典捕获模式下不受支持,但是支持集成捕获模式。
2.5.3 不支持的视图不支持的视图,这些限制适用于集成和经典的捕获模式。 ■GoldenGate支持捕获从一个视图提取初始载荷模式(直接从源视图获取,而不是重做日志)。 ■GoldenGate不捕获变更数据从一个视图,但是它支持从视图的底层表中捕获。 ■GoldenGate可以复制到一个视图可更新,只要视图是固有的。源表的结构和目标视图必须是相同的
2.5.4 不支持物化视图在经典的和集成的模式中得到了物化视图 以下的局限性。 ■物化视图不支持创建ROWID。 对Oracle DML中对象和操作的支持细节为Oracle数据库安装和配置Oracle GoldenGate ■可以创建物化视图日志与ROWID。 ■源表必须有一个主键。 ■截断的物化视图不支持。您可以使用DELETE FROM声明。 ■DML(但不是DDL)从一个完整的刷新物化视图的支持。如果DDL 需要支持此特性,打开Oracle GoldenGate支持案例。 ■为Replicat Create MV命令必须包括更新条款 ■物化视图可以被复制或底层基表(s),但不是两者都有
2.5.5 不支持集群表不支持的集群表: 在集成和经典的捕获模式中支持索引集群,在两种模式中都不支持散列集群。在经典的捕获模式下: ■加密和压缩群集表不支持在经典的捕捉。 ■提取在经典的捕获模式捕获DML更改索引集群表,如果集群因子大小保持不变。任何导致集群大小的DDL增加或减少可能导致提取到该表上的后续DML不正确。
2.5.6 不支持的序列不支持的序列,这些适用于集成和经典的捕获模式。 ■GoldenGate不支持复制的序列值active - active双向配置。 ■缓存大小和源和目标序列的增量区间必须的是相同的。缓存可以是任何大小,包括0(NOCACHE)。 ■序列可以设置为循环周期,但源和目标数据库必须以同样的方式设置。
2.6 DML不支持的对象和操作2.6.1 DML不支持的对象和操作如下DML在经典或集成捕获模式中都不支持: ■REF ■序列值在一个active - active双向配置 ■Database Replay ■创建外部表 ■无形的列不支持通过经典或综合提取。 2.6.2 经典模式不支持对象和操作以下是经典捕获模式中不支持: ■Exadata混合柱状压缩 ■捕获与OLTP表压缩表 ■捕获与压缩的表空间和表创建或修改 ■捕获从加密和压缩群集表 ■无形的列 ■分布式事务。在Oracle版本11.1.0.6和更高版本中,可以捕获这些事务如果您通过以下方式使它们不分布命令,要求重新启动数据库。 改变系统设置_CLUSTERWIDE_GLOBAL_TRANSACTIONS = FALSE; ■RAC分布式XA和PDML分布式事务 ■enabled-tables版本 ■标识列
2.7 DDL不支持的对象和操作2.7.1 DDL不支持的对象和操作(经典和集成模式)"ANONYMOUS", // HTTP access to XDB "APPQOSSYS", // QOS system user "AUDSYS", // audit super user "BI", // Business Intelligence "CTXSYS", // Text "DBSNMP", // SNMP agent for OEM "DIP", // Directory Integration Platform "DMSYS", // Data Mining "DVF", // Database Vault "DVSYS", // Database Vault "EXDSYS", // External OGGI System User "EXFSYS", // Expression Filter "GSMADMIN_INTERNAL", // Global Service Manager "GSMCATUSER", // Global Service Manager "GSMUSER", // Global Service Manager "LBACSYS", // Label Security "MDSYS", // Spatial "MGMT_VIEW", // OEM Database Control "MTSSYS", // MS Transaction Server "ODM", // Data Mining "ODM_MTR", // Data Mining Repository "OJVMSYS", // Java Policy SRO Schema "OLAPSYS", // OLAP catalogs "ORACLE_OCM", // Oracle Configuration Manager User "ORDDATA", // Intermedia "ORDPLUGINS", // Intermedia "ORDSYS", // Intermedia "OUTLN", // Outlines (Plan Stability) "SI_INFORMTN_SCHEMA", // SQL/MM Still Image "SPATIAL_CSW_ADMIN", // Spatial Catalog Services for Web "SPATIAL_CSW_ADMIN_USR", "SPATIAL_WFS_ADMIN", // Spatial Web Feature Service "SPATIAL_WFS_ADMIN_USR", "SYS", "SYSBACKUP", "SYSDG", "SYSKM", "SYSMAN", // Adminstrator OEM "SYSTEM", "TSMSYS", // Transparent Session Migration "WKPROXY", // Ultrasearch "WKSYS", // Ultrasearch "WK_TEST", "WMSYS", // Workspace Manager "XDB", // XML DB "XS$NULL", "XTISYS", // Time Index
Special schemas:
"*.AQ$*", // advanced queues "*.DR *", // oracle text"*.M*_*", // Spatial index "*.MLOG$*", // materialized views "*.OGGQT$*", "*.RUPD$*", // materialized views "*.SYS_C*", // constraints "*.MDR*_*$", // Spatial Sequence and Table "*.SYS_IMPORT_TABLE*", "*.CMP*$*", // space management, rdbms >= 12.1 "*.DBMS_TABCOMP_TEMP_*", // space management, rdbms < 12.1 "*.MDXT_*$*" // Spatial extended statistics tables
2.7.2 DDL不支持的对象和操作(其它类)■ DDL on nested tables. ■ DDL on invisible columns. ■ DDL on identity columns 更改数据库和更改系统(这些不被认为是DDL)使用集成字典,您可以复制ALTER DATABASE默认版本更改可插入数据库的默认版本。所有其他的改变(PLUGABLE)数据库命令将被忽略。 ■备用数据库的DDL。 ■数据库链接DDL。 ■DDL创建表的闪回存档条款和DDL创建,alters,或者删除flashback数据归档本身。DML在表中闪回支持档案。 ■经典捕获模式不支持DDL,包括密码列加密。
Oracle对象名称在默认情况下是不敏感的,但是可以区分大小写,使用双引号。(GoldenGate)支持大小写敏感性。
2.8 查看OGG不支持的模式2.8.1 查延迟约束的类型和对象col CONSTRAINT_NAME for a30 select owner,table_name,CONSTRAINT_TYPE,DEFERRED from dba_constraints where DEFERRED='DEFERRED';
按照用户同步可使用如下语句: col CONSTRAINT_NAME for a30 select owner,table_name,CONSTRAINT_TYPE,DEFERRED from user_constraints where DEFERRED='DEFERRED';
2.8.2 没有主键和唯一键的表col TABLE_NAME for a50 SELECT owner, TABLE_NAME,CONSTRAINT_TYPE FROM dba_constraints t WHERE NOT EXISTS(SELECT table_name FROM dba_constraints c WHERE constraint_type in('P','U') AND t.table_name=c.table_name);
按照用户同步可使用如下语句: col TABLE_NAME for a50 SELECT owner, TABLE_NAME,CONSTRAINT_TYPE FROM user_constraints t WHERE NOT EXISTS(SELECT table_name FROM User_constraints c WHERE constraint_type in('P','U') AND t.table_name=c.table_name);
2.8.3 不支持的字段,类型set lin 150 set pages 100 col table_name for a30 col owner for a10 col column_name for a30 select owner,table_name,column_name,data_type from dba_tab_columns where owner in ('XXX') and data_type in ('ANYDATA','ANYDATASET','ANYTYPE','BFILE','MLSLABEL','ORDDICOM','REFs','TIMEZONE_ABBR','URITYPE','UDT');
或者: select owner,table_name,column_name,data_type from dba_tab_columns where data_type in ('ANYDATA','ANYDATASET','ANYTYPE','BFILE','MLSLABEL','ORDDICOM','REFs','TIMEZONE_ABBR','URITYPE','UDT');
2.8.4 不支持压缩表select owner,table_name from dba_tables where compression='ENABLED'; 或者按用户查找:
select owner,table_name from dba_tables where owner in ('HR') and compression='ENABLED';
2.8.5 不支持物化视图COL OBJECT_NAME FOR A30 select object_name,owner from dba_objects where object_type='MATERIALIZED VIEW';
或者按照用户查找:
COL OBJECT_NAME FOR A30 select object_name,owner from dba_objects where owner in('hr') and object_type='MATERIALIZED VIEW';
三、OGG12.1的OUI的安装注释:源库和目标库都安装。 相关目录,并把安装软件上传上去: 官方建议软件安装到Oracle Cluster File System (OCFS)卷,而不是安装到本地直接目录。 [root@ogg1 ~]# cd /ogg/ [root@ogg1 ogg]# mkdir home [root@ogg1 ogg]# mkdir ogginstall [root@ogg1 ogg]# chown -R oracle:oinstall /ogg/ 注意:ogg安装目录要为空。 LINUX 环境下运行runInstaller 3.1 OGG安装步骤(源,目标库)
3.2 OGG目录的说明
以上所创建的目录的作用:
四、OGG 数据库准备工作4.1 数据库级别最下附加日志查看以及修改语句如下(12.1 ogg官方安装文档54页): SELECT supplemental_log_data_min, force_logging FROM v$database; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ALTER DATABASE FORCE LOGGING; SELECT supplemental_log_data_min, force_logging FROM v$database; ALTER SYSTEM SWITCH LOGFILE;
SQL> select supplemental_log_data_min from v$database;
SUPPLEME -------- YES -------------若不是YES,需要打开
打开语句: SQL> alter database add supplemental log data; SQL> ALTER SYSTEM SWITCH LOGFILE; SQL> select force_logging from v$database;
FOR --- YES
SQL> ALTER DATABASE FORCE LOGGING;
4.2 确认表级附加日志添加1、确认所有表的状态是否logging,把nologing变成logging。
select owner,table_name from dba_tables where owner in ('HR') and logging='NO'; OWNER TABLE_NAME ------------------------------ ------------------------------ HR DEPARTMENTS HR REGIONS HR JOBS HR EMPLOYEES HR JOB_HISTORY HR LOCATIONS
6 rows selected.
2、打开表级附加日志 select 'alter table '||owner||'.'||table_name||' logging;' from dba_tables where owner in ('HR') and logging='NO';
'ALTERTABLE'||OWNER||'.'||TABLE_NAME||'LOGGING;' -------------------------------------------------------------------------------- alter table HR.DEPARTMENTS logging; alter table HR.REGIONS logging; alter table HR.JOBS logging; alter table HR.EMPLOYEES logging; alter table HR.JOB_HISTORY logging; alter table HR.LOCATIONS logging;
3、确认已经打开标记附加日志。 select owner,table_name from dba_tables where owner in ('HR') and logging='NO';
4.3 数据库启用goldengate
注意: Oracle 11.2.0.4 以及之后版本数据库,源库以及目标库必须开启参数。 ENABLE_GOLDENGATE_REPLICATION 1、启用参数 ENABLE_GOLDENGATE_REPLICATION alter system set enable_goldengate_replication=true;
SQL> show parameter gold
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ enable_goldengate_replication boolean FALSE SQL> alter system set enable_goldengate_replication=true;
2、设置闪回查询 如果源库需要开启闪回查询,建议增大undo 表空间的大小以及保留时间。 SQL> show parameter undo
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1 例如: alter system set undo_retention=1800 scope=both; alter tablespace UNDOTBS1 add datafile '+datadg' size 2048m; GRANT FLASHBACK ANY TABLE TO db_user GRANT FLASHBACK ON schema.table TO db_user;
3、需要注意的参数 STREAMS_POOL_SIZE,MAX_SGA_SIZE,PARALLELISM
GoldenGate默认情况下,一个完整的采集提取请求的服务器运行日志挖掘max_sga_size 1GB和平行度2。因此,如果您运行三个提取在同一数据库实例中的集成捕获模式中,至少需要3 GB的分配给流池的内存。作为最佳实践,保留25%的流 池。例如,如果在集成捕获模式中有三个提取,则设置 streams_pool_size以下: 3 GB +(3 GB×0.25)= 3.75 GB
4.4 创建管理用户4.4.1创建管理用户ogg注意:要按照实际情况分配大小(目标库、源库执行以下操作)。 创建表空间是为了DDL同步,以及OGG查询。 create tablespace ogg datafile '+DATADG' size 2048M autoextend on next 200m; create user ogg identified by ogg default tablespace ogg; SQL> create tablespace ogg datafile '+DATADG' size 2048M autoextend on next 200m;
SQL> create user ogg identified by ogg default tablespace ogg;
--授权,DBA权限在安装成功后可以收回: 11.2.0.3 之后的授权(参照OGG12.1安装文档63页):
GRANT CONNECT TO ogg; GRANT ALTER ANY TABLE TO ogg; GRANT ALTER SESSION TO ogg; GRANT CREATE SESSION TO ogg; GRANT FLASHBACK ANY TABLE TO ogg; GRANT SELECT ANY DICTIONARY TO ogg; GRANT SELECT ANY TABLE TO ogg; GRANT LOCK ANY TABLE TO ogg; GRANT RESOURCE TO ogg; GRANT DBA TO ogg; GRANT SELECT ANY TRANSACTION TO ogg; exec dbms_goldengate_auth.grant_admin_privilege('ogg'); GRANT UNLIMITED TABLESPACE TO ogg;
GRANT CONNECT TO ogg; GRANT ALTER ANY TABLE TO ogg; GRANT ALTER SESSION TO ogg; GRANT CREATE SESSION TO ogg; GRANT FLASHBACK ANY TABLE TO ogg; GRANT SELECT ANY DICTIONARY TO ogg; GRANT SELECT ANY TABLE TO ogg; GRANT LOCK ANY TABLE TO ogg; GRANT RESOURCE TO ogg; GRANT DBA TO ogg; GRANT SELECT ANY TRANSACTION TO ogg; exec dbms_goldengate_auth.grant_admin_privilege('ogg'); --Capture from Data Vault,Capture from Virtual Private Database, Capture redacted data sys.dbms_internal_clkm 复制Oracle Transparent Data Encryption (TDE)时需要. --安装成功后可以收回dba权限,但是要授予UNLIMITED TABLESPACE权限。 GRANT UNLIMITED TABLESPACE TO ogg; 或者alter user ogg quota unlimited on users;
--在ddl_setup时报错,通过授予以下权限解决。 grant create any table to ogg; grant create any view to ogg; grant create any procedure to ogg; grant create any sequence to ogg; grant create any index to ogg; grant create any trigger to ogg; grant create any view to ogg;
4.5 OGG DDL 的配置来自(OGG 12.1 官方文档131页13.7)
启用 ddl 支持 默认情况下, ddl 复制支持的状态如下: 源库中:默认情况下禁用oracle GoldenGate ddl 支持。必须使用 ddl 参数配置提取以捕获 ddl。 目标库上,:默认情况下启用 ddl 支持, 以维护复制的事务性数据。默认情况下, Replicat 将处理所有 ddl跟踪所包含的操作。如果需要, 可以使用 ddl 参数来配置 Replicat 以忽略或筛选 ddl 操作。
■ just DDL changes ■ just DML changes ■ both DDL and DML
何时使用基于 ddl 捕获,必须使用基于 ddl 捕获时, 提取将在以下操作配置: 提取操作的经典捕获模式对任何版本的 oracle 数据库。提取操作以集成模式对 oracle 数据库版本11.2.0.3 或早.如果提取将在集成模式下运行11.2.0.4 或更高版本的 oracle数据库, 则不需要 ddl 触发器。默认情况下, 将处理 ddl 捕获透明地通过数据库 logmining 服务器。如果提取将从多容器数据库捕获, 集成捕获模式必须与本机 ddl 捕获方法一起使用。
4.5.1 基于DDL触发器的捕获(源库执行)classcial 模式安装DDL对象(OGG 安装文档222,223页):
注释:从OGG 安装目录下执行如下脚本。
1.确定DDL SCHEMA 需要配置在GLOBALS中:GGSCHEMA ogg
2.授予ogg读写操作系统上的文本文件权限 GRANT EXECUTE ON UTL_FILE TO ogg;
3.准备表空间 为ogg_DDL_HIST、 ogg_MARKER等表准备表空间,如果空间不足,会导致数据库无法进行DDL,从而影响业务。 SQL> alter user ogg default tablespace ogg;
4.退出所有ORACLE会话,不允许新会话产生。退出所有Oracle会话,包括那些SQL * Plus,那些业务应用程序,Oracle GoldenGate进程的应用程序,以及任何其他应用程序使用Oracle的软件。 防止任何新会话的开始。
5.sqlplus "/as sysdba" ----必须sysdba连入 ,运行SQL * Plus并以具有SYSDBA权限的用户身份登录。 这个特权是需要在SYS模式中安装DDL触发器,这是Oracle需要的。
6.@marker_setup --该脚本安装marker系统,这部分为启用DLL支持所必备,执行该脚本时会提示输入GoldenGate管理帐户schema名。
7. @ddl_setup 执行该脚本要确认关闭掉所有ORACLE会话,以及提交相应问提交的事物。 注意:如果ddl_setup.sql将失败此模式的表空间由任何其他用户共享,但是,如果不行,那不会失败默认表空间没有将AUTOEXTEND设置为ON,建议使用设置。
8. @role_setup --该操作会重建DDL同步所需的权限,授予GoldenGate中的DDL对象以DML权限。 提示你执行一条GRANT语句,执行即可!
GRANT GGS_GGSUSER_ROLE TO ogg;
9. @ddl_enable.sql --启用DDL触发器,以捕获DDL操作。
10. @ddl_pin.sql ogg 先执行@?/rdbms/admin/dbmspool.sql (DDL 性能工具)
要提高DDL触发器的性能,可以通过ddl_pin脚本,该脚本会将触发器使用的包加载到内存,以此提高效率。该脚本执行时需要引用dbms_shared_pool系统包,因此在使用ddl_pin脚本前需要确保dbms_shared_pool可用。执行ddl_pin脚本需要指定GoldenGate管理员schema名称.
11. @ddl_status.sql
验证是否由该对象创建的每个对象Oracle GoldenGate DDL支持特性的存在和存在正常运作。(Oracle安装).
4.5.2 重置DDL环境1. Run GGSCI. 2. STOP EXTRACT <group> 3. STOP REPLICAT <group> 4. Run SQL*Plus and log in as a user that has SYSDBA privileges. 5. Run the ddl_disable script. 6. Run the ddl_remove script, 7. Run the marker_remove script. 8. Run the marker_setup script. 9. Run the ddl_setup script. 10. Run the role_setup script. 11. Grant the role to all Oracle GoldenGate users 12. Run the ddl_enable.sql script.
4.5.4 删除DDL环境:1. Run GGSCI. 2. STOP EXTRACT <group> 3. STOP REPLICAT <group> 4. Run SQL*Plus and log in as a user that has SYSDBA privileges. 5. Run the ddl_disable script . 6. Run the ddl_remove script 7. Run the marker_remove script.
4.5.4 支持sequence
查看OGG 12.1.2 官方安装文档102-103页。 在 Source 和 target 都得执行, grant dba to ogg; ggsci EDIT PARAMS ./GLOBALS --后面参数配置 GGSCHEMA ogg SQL> @sequence.sql 在 source 系统里 GRANT EXECUTE on DDLuser.updateSequence TO DBLOGINuser;
GRANT EXECUTE on ogg.updateSequence TO ogg; 在 target 系统里 GRANT EXECUTE on DDLuser.replicateSequence TO Replicatuser; GRANT EXECUTE on ogg.replicateSequence TO ogg;
源库执行如下:
ALTER TABLE sys.seq$ ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; DDL 支持配置完毕,就可以支持 sequences (CREATE, ALTER, DROP, RENAME) 操作的复制的,但如果只是单纯的想复制 sequence 的话,可以不配置 DDL 支持, 只需要 sequence 参数就 行。 GGSCI> dblogin userid ogg@source,password ogg FLUSH SEQUENCE <owner.sequence> 或者 wildcard 在 initial synchronization 之后,必须执行的就是在 target 上对没一个 sequence 至少取一次 nextval
参照OGG安装文档154页。 注意:在允许新的DDL或者DML将发行的同一对象(S)作为原始DDL,让原来的DDL时间要复制到远程系统,然后再由提取该系统。这将确保操作到达正确的复制对原系统,防止DML元数据不一致造成的错误。
在一个级联配置传播DDL EXT进程配置。
DDLOPTIONS GETREPLICATES, IGNOREAPPLOPS
序列复制中的问题:
Cycle的影响 达到maxvalue后,会切换成minvalue值,但是有序列源和目标端算法限制,目标端进程必须在一直执行nextval,直到maxvalue,所以表象就是replicat一直hang的状态,checkpoint不向前移动。 此时建议: 复制排除recycle的序列或者临时忽略sequence的复制。 或者加参数DBOPTIONS _MAXSEQUENCEDISTANCE <n> n – 源端和目标端seq的值相差多少可以ignore; 现有的目标上(已经配置了序列复制)同时又配置了extract(配置了ddl setup),extract会很 慢,建议修改seq的cache大小,或者配置DBOPTIONS _NOAUTOMATICSEQUENCEFLUSH来 减少ALTER SEQUENCE CYCLE|NOCYCLE的产生。 五、OGG classical 模式源库的配置(cdc和initload配合)5.1 添加supplement log
查看OGG 12.1.2 官方安装文档52-53页
ADD SCHEMATRANDATA schema [ALLCOLS | NOSCHEDULINGCOLS] schema 要为其添加补充键信息的架构。不要使用通配符。要在多租户容器数据库的多个可插拔数据库中为模式发出ADD SCHEMATRANDATA,请使用DBLOGIN单独登录到每个可插入数据库,然后发出ADD SCHEMATRANDATA。有关详细信息,请参阅DBLOGIN。 ■ALLCOLS 可用于启用无条件的全部日志记录的表的列,并适用于所有当前和未来的表给定模式。用于在源和目标时支持集成的Replicat表有不同的调度列。 (计划列是主要的键,唯一键和外键。) ■NOSCHEDULINGCOL 仅记录主键的值并且全部有效稍后添加的模式和新表中的现有表的唯一索引。这是架构级日志记录的最低要求级别,仅适用于 以非整合模式复制。
在以下示例中,该命令启用默认的补充日志记录 finance模式。 ADD SCHEMATRANDATA finance 在以下示例中,该命令仅启用补充日志记录 hr模式的主键和有效的唯一索引。 ADD SCHEMATRANDATA hr NOSCHEDULINGCOLS
ADD TRANDATA command.
ADD TRANDATA [container.]schema.table [, COLS (columns)] [, NOKEY] [, ALLCOLS | NOSCHEDULINGCOLS]
■ALLCOLS 可以对所有列进行无条件的补充记录的表。用于在源和目标时支持集成的Replicat表有不同的调度列(计划列是主要的键,唯一键和外键)。 ■NOSCHEDULINGCOLS 仅在非集成模式下对Replicat有效。它问题具有ADD补充日志数据的ALTER TABLE命令 子句适用于为其定义的唯一约束类型没有唯一约束的表或所有列。这个命令满足Oracle GoldenGate的基本表级日志记录要求不会使用模式级日志记录。 ■COLS 列记录KEYCOLS子句所需的非键列用于过滤和操纵。括号是必需的。这些列除了主键之外,还将被记录,除非NOKEY选项也是当下。 ■NOKEY 防止记录主键或唯一键。需要一个TABLE和MAP参数中的KEYCOLS子句和ADD中的COLS子句TRANDATA命令记录备用KEYCOLS列。 4.如果将ADD TRANDATA与COLS选项一起使用,则为其创建唯一索引 目标上的列以优化行检索。如果您正在记录这些列 作为KEYCOLS子句的替代键,请注意将KEYCOLS子句添加到 配置Oracle GoldenGate时的TABLE和MAP语句流程。
ggsci>dblogin userid ogg,password ogg(或者dblogin userid ogg@ogg1,password ogg) ggsci>add SCHEMATRANDATA HR (按照用户添加) ggsci>info trandata HR.* ggsci>info schematrandata HR
add trandata:不会自动更新trandata信息(create table,update附加日志列信息等操作时) add schematrandata 命令格式:add schematrandata <schemaname>(不要用schemaname.*)
5.2 MGR进程配置使用语法,说明来自OGG 12.1.2 (Reference for Oracle GoldenGate for Windows and UNIX)12c 202-203页
Syntax for Windows, UNIX, and Linux mgr paramfile parameter_file [cd directory] [pauseatend | nopauseatend] [port portnum] [reportfile report_file] [usesubdirs | nousesubdirs]
参数说明来自OGG 12.1.2 (Reference for Oracle GoldenGate for Windows and UNIX)12c 208-209页
port 7809
DYNAMICPORTLIST 7800-7810 AUTORESTART EXTRACT *,RETRIES 3, WAITMINUTES 5, RESETMINUTES 30 LAGREPORTHOURS 1 LAGREPORTMINUTES 10 LAGCRITICALMINUTES 10 PURGEOLDEXTRACTS /ogg/ogginstall/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 12 userid ogg@ogg1,password ogg PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 30 PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 30
注释: 具体保留时间时间建议根据评价每天归档量大小/4,计算需要的空间。 以下参数相关说明: 在以下示例中,Manager会尝试三次启动所有Extract进程在一小时内发生故障,并在每次尝试前等待五分钟。 AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5, RESETMINUTES 60
要指定一个端口范围加个别端口,请在该端口之间加一个逗号范围和个人端口号。 例: DYNAMICPORTLIST 7820-7830, 7833, 7835
状态:TRAIL文件存在AA000000,AA000001和AA000002。 复制已停止四个小时,没有完成处理任何文件。 MGR参数包括: PURGEOLDEXTRACTS / ggs / dirdat / AA *,USECHECKPOINTS,MINKEEPHOURS 2 结果:超过文件必须保留的时间,但不会有文件被清除,因为检查点表明Replicat没有完成处理。
使用LAGINFOSECONDS,LAGINFOMINUTES或LAGINFOHOURS参数指定一个基本滞后阈值 如果LAG超过指定值,Oracle GoldenGate报告lag信息到错误日志。 如果lag超过了指定的值LAGCRITICAL参数,MGR报告LAG至关重要; 否则报告 LAG作为信息消息。 零(0)的值强制在频率处的消息用LAGREPORTMINUTES或LAGREPORTHOURS参数指定。
LAGINFOSECONDS seconds | LAGINFOMINUTES minutes | LAGINFOHOURS hours LAGINFOSECONDS秒 设置基本滞后阈值(秒)。 LAGINFOMINUTES分钟 设置基本滞后阈值(以分钟为单位)。 LAGINFOHOURS小时 设置基本滞后阈值(小时)。
使用LAGCRITICALSECONDS,LAGCRITICALMINUTES或LAGCRITICALHOURS参数指定被认为是关键的lag阈值,并强制发出警告消息达到阈值时的错误日志。 此参数影响提取和在本地系统上复制进程。 LAGCRITICALSECONDS秒 以秒为单位设置临界滞后阈值。 LAGCRITICALMINUTES分钟 以分钟为单位设置临界滞后阈值。 LAGCRITICALHOURS小时 以小时为单位设置临界滞后阈值。
以下示例保留在过去三天内尚未修改的所有行,并在至少五天内未修改时将其删除。该 清除频率为30分钟。(清除从Oracle DDL历史记录表中行他们不再需要的。) PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
以下示例保留在过去三天内尚未修改的所有行,并在至少五天内未修改时将其删除。该 清除频率为30分钟。(清除不再是Oracle标记表行需要。) PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
具体设置如下: ggsci> edit param mgr 输入:
port 7809 DYNAMICPORTLIST 7800-7810 AUTORESTART EXTRACT *,RETRIES 3, WAITMINUTES 5, RESETMINUTES 30 LAGREPORTHOURS 1 LAGREPORTMINUTES 10 LAGCRITICALMINUTES 10 PURGEOLDEXTRACTS /ogg/ogginstall/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 12 userid ogg@ogg1,password ogg PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 24 PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 24
设置好后,重启MGR ggsci>start mgr
5.3 全局参数的设置参数说明来自OGG 12.1.2 (Reference for Oracle GoldenGate for Windows and UNIX)12c 207-208页
具体操作:
GGSCI (ogg1 as ogg@ogg1) 6> dblogin userid ogg@ogg1,password ogg Successfully logged into database.
GGSCI (ogg1 as ogg@ogg1) 7> EDIT PARAMS ./GLOBALS GGSCHEMA ogg CHECKPOINTTABLE OGG.ggschkpt
配置GLOBAL文件后,需要通过推出并重新登录ggsci,使得配置生效。
5.4 创建检查点参数说明来自OGG 12.1.2 (Reference for Oracle GoldenGate for Windows and UNIX)12c 261页。
在GLOBALS参数文件中使用CHECKPOINTTABLE参数来指定名称所有Replicat组可以在一个或多个中使用的默认检查点表Oracle GoldenGate实例。所有使用ADD REPLICAT创建的Replicat组命令将默认为此表,除非它被覆盖该命令的CHECKPOINTTABLE选项。 要创建检查点表,请使用GGSCI中的ADD CHECKPOINTTABLE命令。做不针对以集成模式配置的Replicat使用检查点表一个Oracle目标数据库。在该模式下不需要它,将被忽略。 有关更多信息,请参阅管理适用于Windows和UNIX的Oracle GoldenGate创建一个检查点表。
使用语法:
Syntax CHECKPOINTTABLE [container. | catalog.] owner.table [container. | catalog.]owner.table The owner and name of the checkpoint table. Additionally, for an Oracle container database, specify the correct pluggable database (container). For a SQL/MX database, specify the correct catalog. Example CHECKPOINTTABLE finance.ggs.chkpt
或者直接GGSCI中的ADD CHECKPOINTTABLE命令。
GGSCI (ogg1) > dblogin userid ogg@ogg1,password ogg Successfully logged into database.
GGSCI (ogg1 as ogg@ogg1) 4> ADD CHECKPOINTTABLE
No checkpoint table specified. Using GLOBALS specification (OGG.ggschkpt)
Successfully created checkpoint table OGG.ggschkpt。
Oracle GoldenGate检查点表在生产库配置完成。
5.5 其他一些参数说明5.5.1 通配符排除参数
5.5.2 DEFGEN参数DEFGEN为源表或目标表创建具有数据定义的文件。数据定义当源表和目标表有不同的定义时,是否需要数据库有不同的类型。
5.5.3 DDL参数这些参数控制Oracle GoldenGate DDL支持。其他参数可以需要使用DDL支持,但是这里的这些是专门处理DDL特性的。
5.6 创建抽取进程
使用语法,说明来自OGG 12.1.2 (Reference for Oracle GoldenGate for Windows and UNIX)12c 197页(可以配置多组抽取进程)
Syntax for Windows, UNIX, and Linux extract paramfile parameter_file [atcsn CSN | aftercsn CSN] [initialdataload] [pauseatend | nopauseatend] [processid PID] [reportfile report_file] [usesubdirs | nousesubdirs]
参数说明来自OGG 12.1.2 (Reference for Oracle GoldenGate for Windows and UNIX)12c 213-215页。
参照OGG 12.1 官方安装文档41页 注意:建议多组抽取进程,为缓解OGG日志抽取压力。 Group 1: EXTRACT ora9a SETENV (ORACLE_HOME = "/home/oracle/ora/product") SETENV (ORACLE_SID = "oraa") USERIDALIAS tiger1 RMTHOST sysb RMTTRAIL /home/ggs/dirdat/rt TABLE hr.emp; TABLE hr.salary;
注意: 使用TRANLOGOPTIONS参数与DBLOGREADER选项参数文件如果RDBMS是Oracle 11.1.0.7或Oracle 11.2.0.2或更高版本11g R2版本。 使用HANDLECOLLISIONS(该参数依赖于表的主键进行逻辑判断,无主键表使用该参数会导致重复记录出现)
具体参数设置如下(可按照实际情况添加,可以大表拆分等,仅供参考): ggsci> dblogin userid ogg@ogg1,password ogg ggsci> add extract sa_ext tranlog threads 2 begin now (RAC) add extract sa_ext tranlog threads 2 scn 4072415 –按照SCN加 单机: add extract sa_ext tranlog begin now ggsci>add extract sb_ext tranlog threads 2 begin now ggsci>add exttrail /ogg/install/dirdat/sa extract sa_ext, megabytes 100 ggsci>add exttrail /ogg/ogginstall/dirdat/sb extract sb_ext, megabytes 100
注: tranlog:表示数据抓取的来源是数据库的redo数据。 threads 2:表示我们数据库有多少个threads,单实例基本上是1或者不设,rac就自己设置了。 begin now:表示我们在启动这个抓取进程的就去抓取数据。 ./dirdat:表示trail文件的目录 sm:trail文件的前缀 extract sm_ext:值指定给那个进程用的(sm_ext)。
ggsci>edit param sa_ext
参数:
extract sa_ext setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1") --SETENV (ORACLE_SID = "ogg1") userid ogg@ogg1,password ogg TRANLOGOPTIONS DBLOGREADER exttrail /ogg/ogginstall/dirdat/sa TRANLOGOPTIONS LOGRETENTION DISABLED DBOPTIONS ALLOWUNUSEDCOLUMN TRANLOGOPTIONS ALTARCHIVELOGDEST +ARCHDG/ORCL/ARCHIVELOG --归档路径可以不用设置,OGG能够识别 TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT "arch_%t_%s_%r.arc" --归档路径可以不用设置,OGG能够识别 DISCARDFILE /ogg/ogginstall/dirdat/sa_ext.dsc, APPEND, MEGABYTES 100 DISCARDROLLOVER AT 6:00 REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 1 HOURS, RATE FETCHOPTIONS MISSINGROW ABEND STATOPTIONS REPORTFETCH WARNLONGTRANS 1H, CHECKINTERVAL 10m DYNAMICRESOLUTION FETCHOPTIONS FETCHPKUPDATECOLS --DDLSUBST '/ora10g/oradata/src/' with '/ora11g/oradata/trg/' -- Create tablespace是可以复制的,可以支持复制到不同文件目录; ddl include objname HR.* include objtype 'TRIGGER' table HR.*;
ggsci>edit param sb_exti:
参数:
extract sb_ext setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1") --SETENV (ORACLE_SID = "ogg1") userid ogg@ogg1,password ogg TRANLOGOPTIONS DBLOGREADER exttrail /ogg/ogginstall/dirdat/sb TRANLOGOPTIONS LOGRETENTION DISABLED DBOPTIONS ALLOWUNUSEDCOLUMN TRANLOGOPTIONS ALTARCHIVELOGDEST +ARCHDG/ORCL/ARCHIVELOG --归档路径可以不用设置,OGG能够识别 TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT "arch_%t_%s_%r.arc" --归档路径可以不用设置,OGG能够识别 DISCARDFILE /ogg/ogginstall/dirdat/sb_ext.dsc, APPEND, MEGABYTES 100 DISCARDROLLOVER AT 6:00 REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 1 HOURS, RATE FETCHOPTIONS MISSINGROW ABEND STATOPTIONS REPORTFETCH WARNLONGTRANS 1H, CHECKINTERVAL 10m DYNAMICRESOLUTION FETCHOPTIONS FETCHPKUPDATECOLS ddl include objname HR.* include objtype 'TRIGGER' table HR.*;
ggsci>start sa_ext
ggsci>start sb_ext
重要参数说明: TRANLOGOPTIONS:使用TRANLOGOPTIONS参数来控制抽取与之交互的方式事务日志或使用传递事务数据的API,具体取决于数据库或捕获模式。您可以使用多个TRANLOGOPTIONS语句同样的参数文件,也可以在相同的范围内指定多个选项如果允许的话,可以使用TRANLOGOPTIONS语句。只对数据库或数据库使用给定的TRANLOGOPTIONS选项的意图。
LOGRETENTION [ENABLED [DAYS n] | SR | DISABLED]:指定Oracle恢复管理器(RMAN)是否保留日志文件提取需求恢复。当您使用寄存器提取命令时,日志根据当前数据库,是否保留了发出命令的时间视交叉上核。保留日志直到手动删除。此参数不启用或在数据库内部禁用RMAN。
ALLOWUNUSEDCOLUMN | NOALLOWUNUSEDCOLUMN: 对Oracle的提取有效。控制在遇到未使用的列的表时提取异常。 DBOPTIONS 默认值是ALLOWUNUSEDCOLUMN。提取时遇到未使用的表列,它继续处理并生成一个警告。使用这个参数时,在目标或源定义文件中必须有相同的未使用的列该表必须指定为复制,以便正确的元数据映射可以执行。NOALLOWUNUSEDCOLUMN导致提取到未使用的列上。
DISCARDFILE | NODISCARDFILE: 如果一个进程从GGSCI中的START命令开始,则生成一个丢弃文件 默认如下: ■文件命名创建它的过程中,与一个。dsc扩展。如果进程是一个协调的副本,每个线程生成一个文件。每个文件的名字是附加了相应线程的线程ID。 ■dirrpt子目录中的文件创建的Oracle GoldenGate安装目录。 ■最大文件大小是50 mb。 ■在启动时,如果丢弃文件存在,它是写新数据之前清除。如果一个进程是从操作系统的命令行开始的,不要生成默认的丢弃文件。
DISCARDROLLOVER:使用丢弃drollover参数为老化丢弃文件设置一个时间表。长时间或者连续运行,设置一个老化的时间表,防止丢弃文件被填满并且使这个过程结束,它提供了一个可以预见的档案集 在你的存档程序中加入。
REPORTROLLOVER: 使用REPORTROLLOVER参数强制报告文件按正常的时间进行, 而不是在一个过程开始的时候。对于长时间或连续的运行,设置一个老化进度控制活动报告文件的大小,并提供一个更可预测的集合可以包含在您的存档程序中的存档。
查看抽取进程运行报告,以及队列文件,正常,继续后面的操作
如果有长事物,可以设置一下参数: BR:默认4小时。 BR BRINTERVAL 20M, BRDIR BR (20M表示检查间隔是20分钟) 场景:长事务还未结束,日志文件被删除;无需还原日志文件,收到commit后,直接从BR目录下的文件写入trial 文件。
Create tablespace是可以复制的,可以支持复制到不同文件目录; 样例: DDLSUBST '/ora10g/oradata/src/' with '/ora11g/oradata/trg/' 5.7、增长pump进程传输进程要配置的参数:
ggsci>add extract sa_dmp EXTTRAILSOURCE /ogg/ogginstall/dirdat/sa ggsci>add extract sb_dmp EXTTRAILSOURCE /ogg/ogginstall/dirdat/sb ggsci>ADD RMTTRAIL /ogg/ogginstall/dirdat/sa, EXTRACT sa_dmp ggsci>ADD RMTTRAIL /ogg/ogginstall/dirdat/sb, EXTRACT sb_dmp
注: EXTTRAILSOURCE:指定提取文件作为数据源 ADD RMTTRAIL:在目标数据库上创建一个trail
ggsci>edit param sa_dmp
参数:(注意IP 建议是rac vip )
EXTRACT sa_dmp PASSTHRU DYNAMICRESOLUTION RMTHOST 172.16.0.111, MGRPORT 7809 --RMTHOST 172.16.0.111, MGRPORT 7809, COMPRESS, compressthreshold 750 rmttrail /ogg/ogginstall/dirdat/sa DISCARDFILE /ogg/ogginstall/dirdat/sa_ext.dsc, APPEND, MEGABYTES 100 DISCARDROLLOVER AT 6:00 REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 1 HOURS, RATE TABLE HR.*;
ggsci>edit param sb_dmp
参数:
EXTRACT sb_dmp PASSTHRU DYNAMICRESOLUTION RMTHOST 172.16.0.111, MGRPORT 7809 rmttrail /ogg/ogginstall/dirdat/sb DISCARDFILE /ogg/ogginstall/dirdat/sb_ext.dsc, APPEND, MEGABYTES 100 DISCARDROLLOVER AT 6:00 REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 1 HOURS, RATE TABLE HR.*;
ggsci>start sa_dmp
ggsci>start sb_dmp
六、目标库配置6.1 MGR进程配置具体设置如下: ggsci>edit param mgr 输入:
port 7809 DYNAMICPORTLIST 7800-7810 AUTORESTART replicat *,RETRIES 3, WAITMINUTES 5, RESETMINUTES 30 LAGREPORTHOURS 1 LAGREPORTMINUTES 10 LAGCRITICALMINUTES 10 PURGEOLDEXTRACTS /ogg/ogginstall/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 12 userid ogg@ogg,password ogg PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 24 PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 24
设置好后,重启MGR ggsci>start mgr
6.2 全局参数的设置具体操作:
GGSCI (ogg1 as ogg@ogg2) 6> dblogin userid ogg@ogg2,password ogg Successfully logged into database.
GGSCI (ogg1 as ogg@ogg2) 7> EDIT PARAMS ./GLOBALS GGSCHEMA ogg CHECKPOINTTABLE OGG.ggschkpt
配置GLOBAL文件后,需要通过推出并重新登录ggsci,使得配置生效。
6.3 创建检查点或者直接GGSCI中的ADD CHECKPOINTTABLE命令。
GGSCI (ogg1) > dblogin userid ogg@ogg2,password ogg Successfully logged into database.
GGSCI (ogg1 as ogg@ogg1) 4> ADD CHECKPOINTTABLE
No checkpoint table specified. Using GLOBALS specification (OGG.ggschkpt)
Successfully created checkpoint table OGG.ggschkpt。
Oracle GoldenGate检查点表在目标库配置完成。
6.4、初始化同步6.4.1 生产端查询相关信息--生产端查询表格所在表空间 select distinct tablespace_name from dba_tables where owner='HR'; select distinct tablespace_name from dba_tab_partitions where table_owner='HR';
--备份端查询是否存在以上表空间,若没有则创建,如果不想创建,在后面的impdp中需要配置remap_tablespace参数。
--生产端索引所在表空间 select distinct tablespace_name from dba_indexes where owner in ('HR');
select distinct tablespace_name from dba_ind_partitions where index_owner in ('HR');
--生产端用户默认临时表空间: select distinct temporary_tablespace from dba_users
6.4.2 检查undo表空间注意:检查操作可选。 SQL> select file_name,tablespace_name,bytes/1024/1024/1024,AUTOEXTENSIBLE,maxbytes/1024/1024/1024 from dba_data_files where tablespace_name='UNDOTBS1'; SQL> select file_name,tablespace_name,bytes/1024/1024/1024,AUTOEXTENSIBLE,maxbytes/1024/1024/1024 from dba_data_files where tablespace_name='UNDOTBS2';
SQL> show parameter undo SQL> select tablespace_name,sum(bytes/1024/1024/1024) from dba_data_files group by tablespace_name; SQL> select tablespace_name,sum(bytes/1024/1024) from dba_free_space group by tablespace_name;
如果空间不够则添加: SQL> ALTER tablespace UNDOTBS1 add datafile ' +MCDATA/ora11g/undotbs103.ora' size 3g autoextend on; SQL> ALTER tablespace UNDOTBS2 add datafile ' +MCDATA/ora11g/undotbs03.ora' size 3g autoextend on;
6.4.3 生产端查询SCNSQL> select to_char(current_scn) from v$database;
TO_CHAR(CURRENT_SCN) ---------------------------------------- 2159117 6.4.4 确认长事务情况在使用DATAPUMP工具导出前,需要在生产库确保GoldenGate抽取进程启动的时间点前的事务已经结束。 确认长事务情况,可通过下述命令实现: alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; col event for a30 col OSUSER for a10 col USERNAME for a10 col PROGRAM for a35 SELECT s.sid,s.serial#,s.status,s.username,t.start_time,s.WAIT_TIME, s.osuser, s.sql_id, s.program,START_DATE FROM gv transaction t WHERE s.INST_ID=t.INST_ID and s.saddr=t.ses_addr order by t.start_time desc;
6.4.5 DATAPUMP方式初始化检查源库对象下表的具体行数:
set serveroutput on size 1000000 set pages 50000 spool /tmp/hr_old.txt
DECLARE v_cnt number; BEGIN FOR rec in (select 'HR.' || TABLE_NAME AS tanme from dba_tables where owner='HR' order by 1) LOOP execute immediate 'select count(*) from '||rec.tanme into v_cnt; dbms_output.put_line(rpad(rec.tanme,40,'-')||v_cnt); END LOOP; END; /
导出操作: mkdir -p /ogg/expdp chown -R oracle:oinstall /ogg/expdp create or replace directory dir_dp as '/ogg/expdp'; nohup expdp ogg/ogg schemas=HR directory=dir_dp flashback_scn=2159117 dumpfile=HR.dmp logfile=HR.log &
目标端导入: create or replace directory dir_dp as '/ogg/expdp'; nohup impdp ogg/ogg schemas=HR directory=dir_dp dumpfile=HR.dmp logfile=HR.log & (需要创建) --导入前检查目标端表空间的大小 select segment_type,count(*),sum(bytes/1024/1024) from dba_segments where owner='HR' group by segment_type;
检查目标库对象下表的具体行数:
set serveroutput on size 1000000 set pages 50000 spool /tmp/hr_target.txt
DECLARE v_cnt number; BEGIN FOR rec in (select 'HR.' || TABLE_NAME AS tanme from dba_tables where owner='HR' order by 1) LOOP execute immediate 'select count(*) from '||rec.tanme into v_cnt; dbms_output.put_line(rpad(rec.tanme,40,'-')||v_cnt); END LOOP; END; /
6.4.6备份库相关操作英文: Constraints must be disabled in nonintegrated Replicat mode because Oracle GoldenGate replicates DML that results from the firing of a trigger or a cascade constraint. If the same trigger or constraint gets activated on the target table, it becomes redundant because of the replicated version, and the database returns an error. 约束必须禁用的非集成的复制模式因为Oracle GoldenGate复制DML从触发和级联约束。如果在目标表上激活相同的触发器或约束,则由于复制的版本而变得冗余,数据库返回错误。 备份库禁用触发器 select 'alter trigger '||owner||'.'||trigger_name||' disable;' from dba_triggers where owner='HR' and status='ENABLED';
官方文档是:
exec dbms_ddl.set_trigger_firing_property('HR','UPDATE_JOB_HISTORY',false);
alter session set constraint=deferred;
对于表的主键列进行更新时,如果更新语句为set x=x+n或者更新过程中涉及到主键值的偏移,这种事务在源端可以正常执行,因为更新操作是在同一个语句中完成的。而对于目标端来说,可能会把源端的一个更新语句转换为多个更新语句如; alter session set constraint = deferred; 通过10046跟踪可以得到goldengate应用进程在执行对pk的update前后会执行下面的两个语句。执行更新操作前它会把constraint设置为deferred状态,更新完成之后,再设置成immediate状态。 alter session set constraint = immediate;
Oracle 11gR2 11.2.0.2后来的版本,你可以使用dboptions参数 与延迟级联的检查和执法deferrefconst选项 更新和级联删除约束,直到事务提交的复制。 ■其他Oracle版本,您必须禁用触发器和完整性约束 改变手动忽略复制的数据库用户。
Oracle11.2.0.2之后中的存储过程DBMS_XSTREAM_GG.ENABLE_TDUP_WORKSPACE可以解决这个问题,使用这个存储过程不再需要对表的主键状态进行修改,也不需要在Goldengate的参数文件中使用handletpkupdate参数。
begin dbms_xstream_gg.enable_tdup_workspace(); end; /
如果禁用: begin dbms_xstream_gg.disable_tdup_workspace(); end; /
移除JOB: select job,log_user,schema_user,next_date,broken from dba_jobs; exec dbms_job.remove(<that job id>); exec dbms_ijob.remove(21); exec dbms_job.broken(186,true)
select * from dba_scheduler_jobs where owner= 'HR'; 禁用: DBMS_SCHEDULER.DISABLE('job1, job2, job3, sys.jobclass1, sys.jobclass2'); 或删除: DBMS_SCHEDULER.DROP_JOB (job_name => 'my_job1');
禁用外键: SELECT 'alter table '||owner||'.'||table_name||' disable constraint '||constraint_name||';' from dba_constraints where constraint_type='R' and owner in ('HR');
6.5、创建replicat进程参数说明来自OGG 12.1.2 (Reference for Oracle GoldenGate for Windows and UNIX)12c 215-216页 参数说明:
具体参数如下: ggsci>dblogin userid ogg@ogg2,password ogg ggsci>add replicat sa_rep exttrail /ogg/ogginstall/dirdat/sa ggsci>add replicat sb_rep exttrail /ogg/ogginstall/dirdat/sb ggsci> edit param sa_rep replicat sa_rep setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1" ) --SETENV (ORACLE_SID = "ogg2") userid ogg@ogg,password ogg SQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED" --HANDLECOLLISIONS ASSUMETARGETDEFS ALLOWNOOPUPDATES NUMFILES 3000 REPERROR DEFAULT, DISCARD DISCARDFILE /ogg/ogginstall/dirdat/sa_rep.dsc, append megabytes 50 BATCHSQL OPSPERBATCH 5000 GROUPTRANSOPS 100 MAXTRANSOPS 1000 CHECKSEQUENCEVALUE DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5 GETTRUNCATES --12.2ogg 经测试,默认支持truncate 表 --NOCOMPRESSUPDATES --DB2平台 --map user.table target user.table, filter (@GETENV("transaction","csn") > number); --MAP NQ_RUN.EXECINDEXSHOWJOUR, TARGET NQ_RUN.EXECINDEXSHOWJOUR, KEYCOLS (INIT_DATE, SERIAL_NO); --虚拟主键应用方式。 --MAPEXCLUDE USER.TABLE; MAP HR.*, TARGET HR.*;
ggsci> edit param sb_rep replicat sb_rep setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1" ) --SETENV (ORACLE_SID = "ogg2") userid ogg@ogg,password ogg SQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED" --HANDLECOLLISIONS ASSUMETARGETDEFS ALLOWNOOPUPDATES NUMFILES 3000 REPERROR DEFAULT, DISCARD DISCARDFILE /ogg/ogginstall/dirdat/sb_rep.dsc, append megabytes 50m BATCHSQL OPSPERBATCH 5000 GROUPTRANSOPS 100 MAXTRANSOPS 1000 CHECKSEQUENCEVALUE DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5 GETTRUNCATES --NOCOMPRESSUPDATES --DB2平台 --map NQ_RUN_HIS.HIS_EXECINDEXSHOWJOUR, target NQ_RUN_HIS.HIS_EXECINDEXSHOWJOUR, filter (@GETENV("transaction","csn") > 5144447346); --MAP NQ_RUN.EXECINDEXSHOWJOUR, TARGET NQ_RUN.EXECINDEXSHOWJOUR, KEYCOLS (INIT_DATE, SERIAL_NO); --MAPEXCLUDE USER.TABLE; MAP HR.*, TARGET HR.*;
注: oracle 11204不支持replicat进程中的DBOPTIONS DEFERREFCONST参数,如果要使这个参数正常生效必须在数据库中配置ENABLE_GOLDENGATE_REPLICATION = TRUE。 即:ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
注意:无法使用HANDLECOLLISIONS(该参数依赖于表的主键进行逻辑判断,无主键表使用该参数会导致重复记录出现)。
七、在初始化完成后启动还原程序
ggsci>start sa_rep atcsn 2159117 ggsci>start sb_rep atcsn 2159117
八、测试
请根据自己的情况进行相应的DDL,DML等测试。 例如: create table hr.t2 as select object_id from dba_objects; commit;
select count(*) from hr.t2;
create table hr.t3(id int);
begin for i in 90000..100000 loop insert into hr.t3 values(i); commit; end loop; end; /
select count(*) from hr.t3;
|
|