Oracle 10gRACOracle 10g Single Configuration

一.基础环境
==================================================
1.环境说明
--------------------------------------------------
     10gRAC+ASM on Linux5.5(初始安装在node102上,后续调整成集群管理的HA模式)
     10gSingle+FS on Linux5.5

--------------------------------------------------
2.安装前准备
--------------------------------------------------
2.1.Goldengate表空间准备
====================
SQL>create tablespace goldengate datafile '+datadg'  size  200M autoextend on maxsize 1024M;
SQL>select tablespace_name from dba_tablespaces where tablespace_name='GOLDENGATE';

====================
2.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;

====================
2.3.时间同步
====================
建议使用NTP在RAC节点和目标端进行时间同步

====================
2.4.数据库归档
====================
检查数据库是否已运行在归档模式:
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
--需要打开强制日志


设置归档目标:
SQL> alter system set log_archive_dest_1='LOCATION=+DGARCH' scope=both sid='*';
System altered.
改数据库为归档模式:
停止 多余节点实例:
SQL>shutdown immediate
在一个节点实例修改参数:
SQL>alter system set cluster_database=false scope=spfile sid='*';
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog;
SQL>alter system set cluster_database=true scope=spfile sid='*';
SQL>shutdown immediate
SQL>startup
启动其他节点节点实例:
SQL>startup

====================
2.5.归档目录
====================
确保RAC中所有节点都能看到所有的归档,确保节点失败的时候能进行OGG的切换

====================
2.6.配置环境变量
====================
确保为 Oracle 和 Oracle Goldengate 运行用户配置动态库路径。确保Oracle 数据库的运行库<ORACLE_HOME>/lib)添加到操作系统的动态库环境变量中:LD_LIBRARY_PATH (Solaris, Linux), LIBPATH (AIX), SHLIB_PATH (HPUX)。为 GoldenGate 运行用户配置内存限制,将 GoldenGate 运行系统用户对内存大小(memory)、文件大小(fsize)、DATA、STACK 等参数的值设置为-1(ulimited),在/etc/security/limits 文件中进行配置。如果需要双向复制或反向回切,GoldenGate 目标端也同样设置。

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib

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

====================
2.8.Windows系统的特殊要求
====================
Oracle GoldenGate on Windows 需安装 Microsoft Visual C ++ 2005 SP1 RedistributablePackage 注意:Microsoft Visual C++ Runtime 分为 x86、x64 和 IA64,需要根据不同的操作系统平台到www.microsoft.com 网站去下载并安装

====================
2.9.网络配置
====================
OGG需要确保源端和目标端之间能够建立TCP连接,一个链路需要10个TCP动态端口,建议7839-7849

====================
2.10.操作系统用户
====================
使用安装ORACLE软件的用户管理OGG

====================
2.11.创建文件系统
====================
为 GoldenGate 创建文件系统,要求:
Oracle GoldenGate 安装空间应当全部位于共享阵列;
每个数据库对应一个 Oracle GoldenGate 安装,如果是一个数据库上有多个 Oracle 实例同样只需要安装一套 GoldenGate;
在阵列上为每个 Oracle GoldenGate 安装划分单独空间,所需空间大小可以参照源端数据库每天产生的归档日志量。例如源数据库每天产生 150G 归档,则为该数据库对应的 Oracle GoldenGate 分配 150G 空间;建议为 Oracle GoldenGate 分配的空间不小于 150G 左右,因为OGG抽取REDO中的数据大概是1/3,即保留三天的空间,建议保留7天。

====================
2.12.日志产生
====================
--强制日志
SELECT force_logging FROM v$database;
ALTER DATABASE FORCE LOGGING;

--附加日志
SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

打开补充日志(打开后在所有节点进行确认):
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

切换日志:
SQL> alter system archive log current;

复制DDL需要关闭回收站(11g开始可以不用关闭回收站,11.2.0.4开始无法再spfile关闭回收站):
SQL> alter system set recyclebin=off scope=both sid='*';
SQL> purge recyclebin;

====================
2.13.是否有nologging的表
====================
--普通表
SQL> SET PAGESIZE 5000;
SQL> SET HEADING OFF;
SQL> SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' LOGGING;' FROM DBA_TABLES WHERE OWNER IN('SH')  AND LOGGING='NO';

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

====================
2.14.检查是否有不支持的数据类型
====================
SQL> SELECT DATA_TYPE FROM DBA_TAB_COLUMNS WHERE OWNER IN('SH') GROUP BY DATA_TYPE;


====================
2.15.是否有压缩表
====================
--普通表
SQL> SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' MOVE NOCOMPRESS UPDATE INDEXES;' FROM DBA_TABLES WHERE OWNER IN('SH')  AND COMPRESSION='ENABLED';

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

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

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

--------------------------------------------------
3.软件安装
--------------------------------------------------
3.1.安装
====================
在源端和目标端将软件放到想要安装的目录进行解压即可:
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

--检查是否缺少Library
ldd ggsci

--检查安装是否正常,在绝对路径下执行
/<安装目录>/ggsci

--如果是升级,则必须先安装基础版本然后在另外一个文件夹下解压高级版本然后覆盖到旧版本文件夹
为了确保升级的成功最好先对原有版本进行备份,恢复的时候不恢复./dirdat下面的文件。队列文件对于各个版本是通用的

====================
3.2.创建OGG运行时目录
====================
--源端和目标端
GGSCI (node100) 2> create subdirs

====================
3.3.配置MGR进程(两端)
====================
GGSCI>edit params mgr
port 7839
DYNAMICPORTLIST 7840-7850
--AUTOSTART EXTRACT *
--AUTORESTART EXTRACT *
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 1
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45

GGSCI>start mgr

--------------------------------------------------
4.Golddengate进程配置
--------------------------------------------------
4.1配置ASM连接串
====================
对于 Oracle 10gR2 10.2.0.5 之前,或 Oracle 11gR2 11.2.0.2 之前的版本,如果 Redo 文件存放在ASM 中,需要配置 ASM 实例的 TNS 别名:
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,所以添加此参数

====================
4.2.添加表级附加日志
====================
GGSCI (node102) 3> dblogin userid goldengate, password goldengate
GGSCI (node102) 4> add trandata sh.*
--确认是否都添加了
GGSCI (node102) 4> info trandata SH.*

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

--不支持物化视图
--不支持带mapping table的IOT表

====================
4.3.添加extract进程
====================
add extract extshr, tranlog, begin now, threads 2
add exttrail ./dirdat/sr, extract extshr, megabytes 200
配置参数
GGSCI>edit params extshr
EXTRACT extshr
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID=ggsp2)
TRANLOGOPTIONS DBLOGREADER
userid goldengate,password goldengate
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.*;

--如果是RAC到单机,需要在目标端删掉多余thread的redo
SQL> alter database disable thread 2;
SQL> alter database drop logfile group <x>

--启动进程
GGSCI (node102) 19> start extshr

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的前面

====================
4.4.添加datapump进程
====================
add extract dpshr, exttrailsource ./dirdat/sr
add rmttrail ./dirdat/sr,EXTRACT dpshr,MEGABYTES 200

--exttrailsource要和extract进程的文件对应
--rmttrail是放在远端的

GGSCI> edit params dpshr
extract dpshr
dynamicresolution
passthru
rmthost 192.168.100.100, mgrport 7839, compress
rmttrail ./dirdat/sr
numfiles 5000
TABLE SH.*;

--启动进程
GGSCI (node102) 35> start dpshr

--rmthost 远端主机IP, mgrport 远端MGR进程监听的端口, compress
--rmttrail应该和datapump进程添加的一致
--多次运行info dpshr,确认RBA在不断变化


--------------------------------------------------
5.目标端初始化
--------------------------------------------------
5.1.源端备份
====================
RMAN> run
{allocate channel c1 type disk;
allocate channel c2 type disk;
backup as backupset database format '/u02/rmanbk/full_%d_%T_%s_%p';
sql 'alter system archive log current';
backup as backupset archivelog all format '/u02/rmanbk/arch_%d_%T_%s_%p';
backup as backupset current controlfile format '/u02/rmanbk/ctl_%d_%T_%s_%p';
}

SQL> create pfile='/u02/rmanbk/initggsp.ora' from spfile;
[oracle@node101 rmanbk]$ scp  ./* oracle@node100:/u02/rmanbk/

====================
5.2.获取源端SCN(使用导入导出应该在)
====================
SQL> spool current_scn.txt
SQL> select to_char(current_scn) from v$database;

TO_CHAR(CURRENT_SCN)
----------------------------------------
446350

SQL> spool off;

--(9i)select to_char(dbms_flashback.get_system_change_number()) from dual;

====================
5.2.目标端恢复
====================
在目标端将参数文件调整过后启动实例到nomount阶段
SQL> startup nomount pfile='/u02/rmanbk/initggsp.ora';
RMAN> restore controlfile from '/u02/rmanbk/ctl_GGSPLX_20140521_8_1';

调整参数文件
job_queue_processes=0
control_files='/u02/GGSPLX/controlfile/o1_mf_9qsdbs8w_.ctl','/u02/GGSPLX/controlfile/o1_mf_9qsdbxw5_.ctl','/u02/GGSPLX/controlfile/o1_mf_9qsdc0gv_.ctl'

SQL> startup mount pfile='/u02/rmanbk/initggsp.ora';
RMAN> run
{set until scn 446350;
allocate channel c1 type disk;
allocate channel c2 type disk;
restore database;
recover database;
}

--使用OMF可以直接进行restore
--如果没使用OMF需要在恢复脚本里面指定set newname for datafile 1 to ''
SQL> show parameter job;
SQL> alter system set job_queue_processes=0 scope=both sid='*';
SQL> create spfile from pfile='/u02/rmanbk/initggsp.ora';
SQL> create pfile from spfile;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database open resetlogs;

--------------------------------------------------
6.目标配置
--------------------------------------------------
====================
6.1.禁用触发器和外键约束,JOB,scheduler
====================
SQL> alter system set job_queue_processes=0 scope=both sid='*';
SQL> select 'alter table "'||owner||'"."'||table_name||'" disable constraint '||constraint_name||';' from dba_constraints where constraint_type in ('R') and owner in('SH') and status='ENABLED' order by status,owner;

SQL> select 'alter trigger "'||owner||'"."'||trigger_name||'" disable;' from dba_triggers where owner in('SH') and status='ENABLED';

SQL> select 'execute dbms_scheduler.disable('''||owner||'.'||JOB_NAME||''');' from dba_scheduler_jobs where enabled='TRUE' and owner in('SH');

SQL>最好drop掉job和db link

====================
6.2.重建用户
====================
如果使用导入导出初始化则应该先建表空间再创建用户
如果目标端数据库是用 RMAN 恢复建立的,需要先 DROP 原来的 goldengate 用户:
$sqlplus “/as sysdba”
SQL>drop user goldengate cascade;
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 INSERT ANY TABLE TO GOLDENGATE;
GRANT UPDATE ANY TABLE TO GOLDENGATE;
GRANT DELETE ANY TABLE TO GOLDENGATE;
GRANT CREATE ANY INDEX 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;

====================
6.3.目标端创建replicat进程
====================
GGSCI>dblogin userid goldengate,password goldengate
GGSCI>add checkpointtable goldengate.rep_sh_ckpt
强列建议为每个 Replicat 进程创建 checkpointtable。
GGSCI>add replicat repshr,exttrail ./dirdat/sr,checkpointtable goldengate.rep_sh_ckpt
注:
Exttrail 参数要和源端 DataPump 进程的 rmttrail 参数指向一致;
Checkpointtable 参数引用的表必须已用 add checkpointtable 命令创建;
GGSCI>edit param repshr
REPLICAT repshr
SETENV (ORACLE_SID=ggsp0)
SETENV (NLS_LANG = "American_America.ZHS16GBK")
USERID goldengate,PASSWORD goldengate
REPORTCOUNT EVERY 30 MINUTES, RATE
REPERROR DEFAULT, ABEND
numfiles 5000
--HANDLECOLLISIONS
assumetargetdefs
DISCARDFILE ./dirrpt/repshr.dsc, APPEND, MEGABYTES 1000
ALLOWNOOPUPDATES
map sh.*, target sh.*;
注:
NLS_LANG 变量要和数据库语言环境一致;
确保需要复制的表都出现在 map 参数中;

--启动复制进程,必须确保SCN是从恢复点之后的SCN进行复制
GGSCI> start replicat repshr, aftercsn 446350

--------------------------------------------------
7.DDL/SEQUENCE配置
--------------------------------------------------
--运行 GoldenGate 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

--在extract进程参数添加DDL相关参数
DDL INCLUDE MAPPED
DDLOPTIONS ADDTRANDATA
DDLOPTIONS REPORT

--在rep进程添加参数
DDL INCLUDE MAPPED
DDLOPTIONS REPORT

--配置sequence支持
源端目标端均需执行:
SQL>@sequence.sql

--------------------------------------------------
8.双向复制
--------------------------------------------------
8.1.配置双向复制前提
====================
1).配置双向复制前,原目标端没有进行过相关数据操作,否则导致数据不同步;

====================
8.2.配置主要步骤
====================
1).为新源端ogg用户进行授权;
2).确认是否打开归档(一般归档和附加日志都随初始化的时候同步到新源端);
3).确认压缩表/支持的数据类型等
4).创建新源端的进程
5).创建新目标端进程
6).禁用新目标端的约束,触发器,job,scheduler
7).在新目标端给OGG授予对应权限
8).创建新目标端rep进程并直接start(不用指定SCN)
9).在新目标端配置DDL支持
     双向复制的时候如果配置了自动添加

====================
8.3.配置注意事项
====================
1).单向配置为:RAC到单机,配置双向复制的时候需要drop掉新源端多余thread的redo,报错信息如下
     2014-05-21 22:56:12  ERROR   OGG-00446  Oracle GoldenGate Capture for Oracle, extshs.prm:  The number of Oracle redo threads (2) is not the same as the number of checkpoint threads (1). EXTRACT groups on RAC systems should be created with the THREADS parameter (e.g., ADD EXT <group name>, TRANLOG, THREADS 2, BEGIN...).

2).配置双向复制的DDL需要配置
catpture:
DDL INCLUDE MAPPED
DDLOPTIONS ADDTRANDATA
DDLOPTIONS REPORT
DDLOPTIONS GETREPLICATES, GETAPPLOPS

replicat:
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
DDLOPTIONS UPDATEMETADATA
         

--------------------------------------------------
9.问题处理
--------------------------------------------------
RAC到单机可能需要drop掉多余thread的redo,报错信息如下():
2014-05-21 22:56:12  ERROR   OGG-00446  Oracle GoldenGate Capture for Oracle, extshs.prm:  The number of Oracle redo threads (2) is not the same as the number of checkpoint threads (1). EXTRACT groups on RAC systems should be created with the THREADS parameter (e.g., ADD EXT <group name>, TRANLOG, THREADS 2, BEGIN...).





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章