Goldengate(ora11g)配置说明

来源:互联网 发布:sql cast和convert 编辑:程序博客网 时间:2024/05/17 22:54
一.基础环境检查
1.1.平台检查
确认操作系统版本已经通过官方认证;GG软件位数需要和DB位数一致
1.2.操作系统检查
1.2.1.检查内存
OGG每个实例最多支持5000个并发链路,每个进程至少需要25-55MB的内存。OGG会自动根据实际需求进行内存分配(大事务多可能会占用更多内存);详细内存管理参照Cache Manager(CACHEMGR)

1.2.2.检查文件系统
1).RAC的OGG最好配置在共享磁盘阵列上(或者NFS);
2).建议保留最少三天的Trail文件空间(一般来说,OGG可以从redo里面抽取1/3的有效数据,也就是需要准备至少1天的redo大小的空间保存Trail文件);
select trunc(co
3).如果大事务/gg进程很多,为了防止出现I/O争用可以使用Cache Manager(CACHEMGR)将cache需要写入文件系统的dirtmp放到I/O较好的位置。

1.2.3.网络要求
1).OGG对网络带宽的要求相比DG小很多,并且GG传输进程的压缩特性可以将需要传输的数据压缩到1/7至少1/4(也就是说,GG占用的网络带宽是DG的:1/3*1/7=1/21).
2).需要确保MGR中指定的所有端口不被防火墙阻断;
3).最好确保所有配置GG实例的主机hosts文件中都有IP到主机名的映射;
4).一条链路需要10个活动端口,建议:7839-7849

1.2.4.Itanium系统特殊要求
1).需要安装vcredist_IA64.exe运行时包(包含所需VS中的部分DLL),否则会报如下错误:
The application failed to initialize properly(0x0150002)


1.2.5.AIX系统特殊要求
1).Oracle GoldenGate on AIX 5.3 需要 XL C/C++ Runtime v10.1 or later 以及 libpthreadsversion 5.3.0.51 or later,如不符合以上条件需先进行 XLC 和 libpthreads 库的升级。
查看 xlC 版本:
# lslpp -l | grep -i xlc
查看 libpthreads 版本:
#lslpp -h bos.rte.libpthreads
2).

1.2.6.Windows系统特殊要求
1).操作系统和命令行必须有相同的字符集,否则将导致GGSCI显示不正常,使用以下命令进行设置命令行的字符集:
chcp <操作系统字符集>     //如果设置后还是不能正常显示,可以把命令行的字体设置为Lucida Console
2).安装和操作系统位数(x86、x64)对应的Microsoft Visual C++ 2005 SP1

1.2.7.时间及环境变量
1).RAC环境中必须确保所有节点的时间一样,11gR2后可以使用ctss,也可以使用NTP(参照:NTP配置)
2).确保Oracle 数据库的运行库<ORACLE_HOME>/lib)添加到操作系统的动态库环境变量中:LD_LIBRARY_PATH (Solaris, Linux), LIBPATH (AIX), SHLIB_PATH (HPUX)
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
export GG_HOME=<GG_INSTALL_PATH>
export LD_LIBRARY_PATH=$GG_HOME:$ORACLE_HOME/lib:$LD_LIBRARY_PATH

3).设置GG_HOME环境变量的目的是使用户在任何路径下输入全路径的ggsci可以正常交互,在任意路径下直接输入ggsci的时候是无法看到GG的相关进程是否正常运行的;



1.3.数据库配置检查
1.3.1.是否包含不支持的数据类型:
查询语句:select distinct data_type from dba_tab_columns where owner in(<schema_list>);
■ Abstract data types (ADT) with scalar, LOBs, VARRAYS, nested tables, and/or
REFsANYDATA
■ ANYDATASET
■ ANYTYPE
■ BFILE
■ MLSLABEL
■ ORDDICOM
■ TIMEZONE_ABBR
■ URITYPE
■ UROWID

1.3.2.确认是否有限制支持对象:
1).classic模式对IOT表使用了mapping table的和key压缩的不支持,确保以下查询无返回即可:
select owner,table_name,iot_type from dba_tables where owner in (<schema_list>) and iot_type='IOT_MAPPING';
select owner,table_name,iot_type,compression from dba_tables where owner in (<schema_list>) and iot_type is not null and compression='ENABLED';

2).对物化视图支持很有限,最好不复制物化视图:
select 'TABLEEXCLUDE '||owner||'.'||mview_name||';' from dba_mviews where owner in(<schema_list>);

3).不支持压缩表(包含分区表)及外部表,外部表需要exclude:
--外部表
select 'TABLEEXCLUDE '||owner||'.'||table_name||';' from dba_external_tables where owner in (<schema_list>);

--压缩表:
--普通表
SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' MOVE NOCOMPRESS UPDATE INDEXES;' FROM DBA_TABLES WHERE OWNER IN(<schema_list>)  AND COMPRESSION='ENABLED';

--分区表
SELECT 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME||' MOVE PARTITION '||PARTITION_NAME||' NOCOMPRESS UPDATE INDEXES;' FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER IN(<schema_list>)  AND COMPRESSION='ENABLED';

--确认索引状态
select owner,index_name,status from dba_indexes where owner in(<schema_list>) and status!='UNUSABLE';

select index_owner,index_name,status from dba_ind_partitions where index_owner in(<schema_list>) and status!='UNUSABLE';

4).NOLOGGING表处理
--普通表
SET PAGESIZE 5000;
SET HEADING OFF;
SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' LOGGING;' FROM DBA_TABLES WHERE OWNER IN(<schema_list>)  AND LOGGING='NO';

--分区表
SELECT distinct 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME||' LOGGING;' FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER IN(<schema_list>)  AND LOGGING='NO';

1.3.3.强制/附加日志:
1).数据库最好处于force_logging模式,防止有Direct_path等可能产生nologging的情况引起数据无法同步到目标端的情况:
SELECT force_logging FROM v$database;

--打开方式:
ALTER DATABASE FORCE LOGGING;

2).附加日志打开后可以让数据库记录更详细的信息到redo,方便GG实现数据同步(需要在打开数据库最小附加日志的基础上通过add trandata命令打开对应表的详细附加日志):
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

--打开补充日志(打开后需要切换日志,并在所有节点进行确认):
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
alter system archive log current;

1.3.4.数据库归档(建议打开,防止数据丢失):
数据库的归档建议打开,如果GG进程失败时间过长后可以通过归档日志进行数据抓取。在RAC环境中需要确保两个节点都要可以访问到所有的归档日志如果两个节点的归档路径不一样可以通过参数进行配置。
1).TRANLOGOPTIONS指定多个归档路径:
TRANLOGOPTIONS ALTARCHIVELOGDEST [primary] [instance <inst_name>] <full_path>
实例:
TRANLOGOPTIONS ALTARCHIVELOGDEST primary instance PAORA011 /oraarch_1/archivelog, ALTARCHIVELOGDEST primary instance PAORA012 /oraarch_2/archivelog
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT %t_%s_%r.dbf

2).确认数据库归档:
select log_mode from v$database;

--启用归档步骤:
//配置归档路径
alter system set log_archive_dest_1='LOCATION=+DGARCH' scope=both sid='*';

//RAC中停止多余节点实例:
shutdown immediate

//在一个节点实例修改参数:
alter system set cluster_database=false scope=spfile sid='*';
shutdown immediate
startup mount
alter database archivelog;
alter system set cluster_database=true scope=spfile sid='*';
shutdown immediate
startup

//启动其他节点节点实例:
startup
1.3.5.回收站处理(仅针对需要配置DDL环境)
配置DDL支持前需要禁用并清理回收站(11g数据库可以不用关闭,11.2.0.4无法在线关闭回收站),命令如下
alter system set recyclebin=off scope=both sid='*';
purge recyclebin;

1.3.6.数据库参数(11.2.0.4/12.1.0.2之后的版本)
show parameter enable_goldengate_replication;
确保此参数为enable,否则会报错:
2014-09-28 11:54:18  ERROR   OGG-00446  Opening file +DATA/utprac/onlinelog/group_2.258.850124939 in DBLOGREADER mode: (26947
) ORA-26947: Oracle GoldenGate replication is not enabled.
Not able to establish initial position for begin time 2014-09-28 11:41:31.
2014-09-28 11:54:18  ERROR   OGG-01668  PROCESS ABENDING.


二.安装配置
2.1.数据库配置:
2.1.1.表空间创建(11gR2要求单独只用自己的表空间,可能在配置DDL的时候报错):
create tablespace goldengate datafile '+datadg'  size  200M autoextend on maxsize 1024M;
select tablespace_name from dba_tablespaces where tablespace_name='GOLDENGATE';
2.1.2.用户创建及授权(源端目标端都需要):
CREATE USER GOLDENGATE IDENTIFIED BY GOLDENGATE DEFAULT TABLESPACE GOLDENGATE TEMPORARY TABLESPACE TEMP;
GRANT CONNECT TO GOLDENGATE;
GRANT ALTER ANY TABLE TO GOLDENGATE;
GRANT ALTER SESSION TO GOLDENGATE;
GRANT CREATE SESSION TO GOLDENGATE;
GRANT FLASHBACK ANY TABLE TO GOLDENGATE;
GRANT SELECT ANY DICTIONARY TO GOLDENGATE;
GRANT SELECT ANY TABLE TO GOLDENGATE;
GRANT RESOURCE TO GOLDENGATE;
GRANT SELECT ANY TRANSACTION TO GOLDENGATE;
--以下权限针对DDL
GRANT CREATE ANY TABLE ,CREATE ANY INDEX,ALTER ANY TABLE TO GOLDENGATE;
GRANT DROP ANY TABLE ,DROP ANY INDEX,DROP ANY VIEW TO GOLDENGATE;

//可以为goldengate用户授予DBA权限:
grant dba to goldengate;
grant resource to goldengate;
grant connect to goldengate;

2.1.3.配置sequence支持(按需配置,如果不复制seq的alter等则不需要配置DDL支持)
1).源端及目标端执行sequence.sql脚本:
SQL> @sequence.sql
--如果不配置./GLOBALS中的GGSCHEMA参数则需要执行过程中指定schema

2).打开源端sys.seq$的附加日志:
SQL> ALTER TABLE sys.seq$ ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

3).capture及dp进程增加sequence参数:
SEQUENCE <owner>.*;

2.1.4.配置DDL支持(按需配置)
1).在manager进程中配置ddl相关历史表数据清理动作:
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7

2).执行相关脚本(最好在没有用户执行DDL的时候执行):
SQL>@marker_setup.sql
--上面脚本会要求输入schema

SQL>@ddl_setup.sql
--上面脚本不能放在ocfs中执行,否则运行会报错

SQL> @role_setup.sql
--授权,并且要授给 GoldenGate 用户操作 DDL 复制相关对象的权限
SQL> GRANT GGS_GGSUSER_ROLE TO GOLDENGATE;

--启用 DDL 捕获触发器
SQL> @ddl_enable

--(可选)将ddl相关对象pin在内存中提高效率
SQL>@ddl_pin <DDL_USER>

3).在extract进程参数添加DDL相关参数
DDL INCLUDE MAPPED
DDLOPTIONS ADDTRANDATA
DDLOPTIONS REPORT
DDLOPTIONS GETREPLICATES, GETAPPLOPS

4).在rep进程添加参数
DDL INCLUDE MAPPED
DDLOPTIONS REPORT

2.2.ASM链接配置:
对于 Oracle 10gR2 10.2.0.5 之前,或 Oracle 11gR2 11.2.0.2 之前的版本,因为ASM实例访问接口不一致。如果 Redo 文件存放在ASM 中,需要配置 ASM 实例的 TNS 别名(配置后sqlplux进行测试):
ASMINST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.201)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME =+ASM)
      (UR =A)
    )
  )

--参数说明
(UR=A)是因为在监听中ASM的实例是BLOCKED,所以添加此参数


2.3.Goldengate软件安装:
2.3.1.软件安装:
1).创建安装OGG的目录(文件夹名中不能包含空格)
2).将软件解压到对应目录下:
unzip p16441081_112106_ora10g_64bit_Linux-x86-64.zip 1>/dev/zero 2>err.log
tar -xvf fbo_ggs_Linux_x64_ora10g_64bit.tar 1>/dev/zero 2>err.log

3).确认是否缺少library:
ldd ggsci

4).进入GGSCI并创建子目录:
./ggsci
create subdirs

2.4.源端目标端通用配置
2.4.1.配置Manager进程
1).配置manager进程参数:
GGSCI>edit params mgr
port 7839
DYNAMICPORTLIST 7840-7850
SOURCEDB <SID>, USERID <USERID>
--AUTOSTART EXTRACT *
--AUTORESTART EXTRACT *
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
SYSLOG ERROR, WARN

:syslog表示将系统层面的报错和警告写入系统日志,如果数据库自动清理DDL历史需要配置userid等

2).启动manager进程:
GGSCI>start mgr

2.5.源端进程配置
2.5.1.添加trandata:
1).登陆到数据库并添加):
GGSCI (node102) 3> dblogin userid goldengate, password goldengate
GGSCI (node102) 4> add trandata sh.*

:add trandata实际上是添加详细的附加日志,同数据库的添加详细附加日志的sql语句功能一样只是更加简单,添加完成后可通过以下SQL检查:



2).确认是否添加成功:
GGSCI (node102) 4> info trandata SH.*

--如果有没有添加成功的可以手工进行添加
GGSCI (node102) 4> add trandata OE.PROMOTIONS

2.5.2.添加extract进程:
1).添加进程及本地trail文件:
add extract extshr, tranlog, begin now, threads 2
add exttrail ./dirdat/sr, extract extshr, megabytes 200

2).配置extract参数:
GGSCI>edit params extshr
EXTRACT extshr
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID=ggsp2)
TRANLOGOPTIONS DBLOGREADER
userid goldengate,password goldengate
DDL INCLUDE MAPPED
DDLOPTIONS ADDTRANDATA
DDLOPTIONS REPORT
REPORTCOUNT EVERY 1 MINUTES, RATE
numfiles 5000
DISCARDFILE ./dirrpt/extshr.dsc,APPEND,MEGABYTES 10
DISCARDROLLOVER AT 3:00
exttrail ./dirdat/sr,megabytes 100
dynamicresolution
--tranlogoptions rawdeviceoffset 0
TRANLOGOPTIONS EXCLUDEUSER goldengate
TRANLOGOPTIONS convertucs2clobs
TABLEEXCLUDE SH.SALES_TRANSACTIONS_EXT;
TABLE SH.*;
SEQUENCE SH.*;

--如果是RAC到单机,需要在目标端删掉多余thread的redo
SQL> alter database disable thread 2;
SQL> alter database drop logfile group <x>
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK) --设置字符集,和数据库字符集一致(这也是处理中文的办法)
setenv (ORACLE_SID=ggsp1)     --设置实例名,如果一个主机上有多个实例的话
--TRANLOGOPTIONS ASMUSER sys@asminst, asmpassword oracle --11.2.0.2/10.2.0.5之前版本,REDO放在ASM
--TRANLOGOPTIONS DBLOGREADER --11.2.0.2/10.2.0.5之后版本
--tranlogoptions rawdeviceoffset 0 --使用AIX且redo在裸设备
--TRANLOGOPTIONS EXCLUDEUSER goldengate --表示不抓取goldengate用户的日志,适用于双向复制
--tableexclude schema.table_name;排除不复制的表,放在table的前面

:
加密密码方式:
GGSCI (node110) 3> encrypt password <your_pass> encryptkey default
Using default key...

Encrypted password:  AACAAAAAAAAAAAFAYFQJDBOBHJZHNIBB
Algorithm used:  BLOWFISH
使用加密码:
userid ggs, password AACAAAAAAAAAAAFAYFQJDBOBHJZHNIBB encryptkey default


3).启动extract进程:
GGSCI (node102) 19> start extshr

2.5.3.添加data pump进程:
1).添加进程及rmttrail:
add extract dpshr, exttrailsource ./dirdat/sr
add rmttrail ./dirdat/sr,EXTRACT dpshr,MEGABYTES 200
--如果需要dp从指定seq开始抓取
GGSCI>alter extract dptcex_c, extseqno 7500 extrba 0

2).配置参数文件:
GGSCI> edit params dpshr
extract dpshr
dynamicresolution
passthru
rmthost 192.168.100.100, mgrport 7839, compress
rmttrail ./dirdat/sr
--rmthost 192.168.100.101, mgrport 7839, compress
--rmttrail ./dirdat/sa
--table SH.A
--rmttrail ./dirdat/sb
--table SH.B
numfiles 5000
TABLE SH.*;
SEQUENCE SH.*;
--rmthost 远端主机IP, mgrport 远端MGR进程监听的端口, compress
--rmttrail应该和datapump进程添加的一致
--标黄部分目的是说明同一个进程可以同时将数据推送到不同目标端,且可以将不同的数据推送到不同的trail.建议不同主机配置不同datapump

3).启动datapump进程:
GGSCI (node102) 35> start dpshr

--多次运行info dpshr,确认RBA在不断变化
--到目标端确认文件是否已经存在

2.6.数据初始化(使用导入导出方式)
使用RMAN初始化参考:




2.6.1.源端数据导出:
1).获取源端SCN及可用的directory
spool /tmp/db_scn_<time>.txt
col current_scn for 99999999999999999999999
col directory_name for a20;
col directory_path for a80;
set linesize 120 pagesize 100;
select current_scn from v$database;
select directory_name,directory_path from dba_directories;
spool off;

2).源端基于SCN进行导出:
expdp goldengate/xxxxx directory=<dir_name> dumpfile=<filename> logfile=<logname> schemas=<schema_list> flashback_scn=<db_scn> parallel=<para_num>

2.6.2.目标端导入:
1).检查用户并获取可用的directory:
col directory_name for a20;
col directory_path for a80;
set linesize 120 pagesize 100;
select directory_name,directory_path from dba_directories;
select username from dba_users where username in (<schema_list>);
--如果是重新初始化则先删掉目标端schema:
drop user <user_name> cascade;

2).目标端新型数据导入
impdp goldengate/xxxxx directory=<dir_name> dumpfile=<filename> logfile=<logname> schemas=<schema_list> parallel=<para_num>


2.6.3.禁用目标端会引起数据变化的对象
1).禁用外键约束
set linesize 100 pagesize 1000;
select 'alter table "'||owner||'"."'||table_name||'" disable constraint '||constraint_name||';' from dba_constraints where constraint_type in ('R') and owner in(<schema_list>) and status='ENABLED' order by status,owner;

2).禁用触发器
select 'alter trigger "'||owner||'"."'||trigger_name||'" disable;' from dba_triggers where owner in(<schema_list>) and status='ENABLED';

3).禁用scheduler:
select 'execute dbms_scheduler.disable('''||owner||'.'||JOB_NAME||''');' from dba_scheduler_jobs where enabled='TRUE' and owner in(<schema_list>);

4).禁用job;
exec dbms_job.broken(23,true,sysdate+1) where schema_user in (<schema_list>);
select SCHEMA_USER,count(1) from dba_jobs where schema_user in(<schema_list>) and broken='Y' group by schema_user;
--JOB和Scheduler可以通过设置job参数完全禁用,根据客户需求看是只禁用该schema的JOB还是可以完全禁止
alter system set job_queue_processes=0 scope=both sid='*';

5).处理db_link
DROP PUBLIC DATABASE LINK remote;

2.7.目标端进程配置
2.7.1.配置checkpoint表:
1).编辑./GLOBALS参数文件:
CHECKPOINTTABLE <owner>.<table_name>

2).登陆到数据库:
DBLOGIN, USERID <username>, password <PWD>

3).添加checkpointtable:
ADD CHECKPOINTTABLE

--也可以直接执行命令:add checkpointtable  <owner>.<table_name>

2.7.2.添加replicat进程:
1).添加进程
GGSCI>add replicat repshr,exttrail ./dirdat/sr,checkpointtable goldengate.rep_sh_ckpt

Exttrail 参数要和源端 DataPump 进程的 rmttrail 参数指向一致;
Checkpointtable 参数引用的表必须已用 add checkpointtable 命令创建;
添加checkpointtable的好处是:当目标端数据库基于RMAN进行恢复后checkpointtable中保存的有检查点,trail还在就可以继续复制。

2).配置参数文件
REPLICAT repcex_c
setenv (ORACLE_SID=chaxun)
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
USERID ogg, PASSWORD ogg
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
ddlerror default ignore retryop
--handlecollisions
--DBOPTIONS suppresstriggers
GETTRUNCATES
REPERROR DEFAULT, ABEND
discardrollover
assumetargetdefs
allownoopupdates
discardfile ./dirrpt/cx.dsc, append, megabytes 50
dynamicresolution
MAPEXCLUDE CEXCHANGE.SYS_EXPORT*;
MAP CEXCHANGE.*, TARGET CEXCHANGE.*;

:
DBOPTIONS suppresstriggers表示在10.2.0.5/11.2.0.2以后的目标数据库可以通过此选项由GG自动防止触发器fire
2.7.3.启动replicat:
GGSCI> start replicat repshr, aftercsn <scn>


三.安装过程中可能出现的问题:
3.1.权限不正确:
当使用单独的操作系统用户进行安装OGG的时候,如果在dblogin的时候报错:
error while loading shared libraries: libskgxp10.so: cannot open shared object file: no such file or directory;

可能需要对数据库进行Relink:
[oracle@node110 ~]$ relink oracle


0 0