Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73481
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 206
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-14 11:16
个人简介

oracle dba 精通dataguard,goldengate,mview等技术,擅长于数据库管理,备份恢复,性能调优,熟悉mysql,sqlserver的数据库,了解存储,善于shell编程

文章分类

全部博文(10)

文章存档

2015年(1)

2013年(9)

我的朋友

分类: Oracle

2013-05-21 15:32:43

思路解析
 在源数据库端,创建一个心跳表hb,每个抽取进程(extract)都要对心跳表进行抽取,每个投递进程(datadump)都要对心跳表进行日志的投递,
 而每一个应用进程(replicat)都要对心跳表进行应用.在这样一种架构下,每在源端插入或更改一条数据,在目标端可能既是n条数据.
 
 假定有两个数据库,一个抽取进程,一个投递进程,三个应用进程,     用户向数据库的hb表中插入了一条数据,抽取进程取出这条数据的redo,
 并通过投递进程发送到另外一个golengate实例上,这个golengate实例共有3个应用进程,每个应用进程都应用此日志进行数据库的插入操作,
 3个应用进程一共可以插入3条数据(当然前提是这3条数据不会主键冲突).
 在下面的过程中,hb表无主键,并且在抽取和应用的时候都要根据goldengate进程组的名字对表的字段内容作出一定的修改,
  因此虽然在源端数据是一条,但经过进程的修改和应用,在目标端就是插入多条不同的记录了.因此即使此表有主键,只要能保证
 应用端的数据插入,就没有问题


以下是心跳的配置过程
 
一.在抽取端和应用端建表
 --抽取端
 create table hb(dbname varchar2(20),opdate date);
 --应用端
 create table hb(dbname varchar2(20),opdate date,extractname varchar2(20),replicatname varchar2(20));
二.配置goldengate
1.抽取端增加附加日志
 --goldengate登陆数据库
 dblogin userid goldengate,password Ipwg63fgR
 --查看心跳表是否增加了附加日志
 info trandata ods.hb
 --增加附加日志
 add  trandata ods.hb
 --确认增加了附加日志
 info trandata ods.hb
2.修改抽取进程参数文件,增加以下行
 table ods.hb, tokens (tkn_extract_name ", "GROUPNAME"));
3.如有必要,修改投递进程参数文件,增加以下行
 table ods.hb;
4.重新启动extract,dump进程
5.对于应用端的每一个应用进程修改参数文件,增加以下行
 --map ods.hb, target etl.hb;
 --map ods.hb, target etl.hb, colmap (usedefaults, ("GGENVIRONMENT", "GROUPNAME"));
 map ods.hb, target etl.hb, colmap (usedefaults,extractname= @toden ("tkn_extract_name"),  ("GGENVIRONMENT", "GROUPNAME"));
6.重新启动replicat进程
三.手动测试
 --在抽取端插入数据并提交
 insert into hb (dbname, opdate) select global_name,sysdate from global_name;
 commit;
 --在抽取和应用端查询
 alter session set nls_date_format ='YYYY-MM-DD HH24:MI:SS';
 select * from hb;

以下是心跳的配置过程
 
一.在抽取端和应用端建表
 --抽取端
 create table hb(dbname varchar2(20),opdate date);
 --应用端
 create table hb(dbname varchar2(20),opdate date,extractname varchar2(20),replicatname varchar2(20));
二.配置goldengate
1.抽取端增加附加日志
 --goldengate登陆数据库
 dblogin userid goldengate,password Ipwg63fgR
 --查看心跳表是否增加了附加日志
 info trandata ods.hb
 --增加附加日志
 add  trandata ods.hb
 --确认增加了附加日志
 info trandata ods.hb
2.修改抽取进程参数文件,增加以下行
 table ods.hb, tokens (tkn_extract_name ", "GROUPNAME"));
3.如有必要,修改投递进程参数文件,增加以下行
 table ods.hb;
4.重新启动extract,dump进程
5.对于应用端的每一个应用进程修改参数文件,增加以下行
 --map ods.hb, target etl.hb;
 --map ods.hb, target etl.hb, colmap (usedefaults, ("GGENVIRONMENT", "GROUPNAME"));
 map ods.hb, target etl.hb, colmap (usedefaults,extractname= @toden ("tkn_extract_name"),  ("GGENVIRONMENT", "GROUPNAME"));
6.重新启动replicat进程
三.手动测试
 --在抽取端插入数据并提交
 insert into hb (dbname, opdate) select global_name,sysdate from global_name;
 commit;
 --在抽取和应用端查询
 alter session set nls_date_format ='YYYY-MM-DD HH24:MI:SS';
 select * from hb;

四.抽取端数据库增加job自动插入数据
--定义job
begin
 dbms_scheduler.create_job(
  job_name=>'job_hb',
  job_type=>'PLSQL_BLOCK',
  job_action=>'insert into hb (dbname, opdate) select global_name,sysdate from global_name;delete from hb where opdate=sysdate-2;commit;',
  start_date=>sysdate,
      repeat_interval=>'freq=minutely;interval=5');
end;
/
--启用job
exec dbms_scheduler.enable('job_hb');
--查询job
select job_name,job_type,job_action,to_char(start_date,'yyyy-mm-dd hh24:mi:ss') TM,repeat_interval,next_run_date,enabled,state from user_scheduler_jobs;

五.如何监控goldengate复制正常
--查看几个进程的最新时间
select dbname,extractname,replicatname,max(opdate) from hb group by dbname,extractname,replicatname;
--查看同步时间和当前系统时间的差值(超过一定的时长就意味着出现某种问题了)
select min(opdate) from (select max(opdate) as opdate from hb group by dbname,extractname,replicatname);

 

已知问题
1.在一个配置好的环境中,如果由于其他原因需要增加一个replicat进程,且在此replicat参数文件中配置了心跳功能,
在抽取端执行delete或者update语句之后,此replicat会因为数据不一致而abend,
 处理方法可以有几下几种:
   a.根据进程生成的废弃文件(dsc后缀的文件),查看对应数值,插入数据库,
   b.可以在应用端进程的配置参数文件中增加 handlecollisions使自动处理
   c.可以在应用端进程的配置参数文件reperror使自动处理,示例如下
  reperror (default,abend)
  reperror (-1403, ignore)
 d.如果replicat都没有延迟,可以使用先清空表再插入数据的方法
  truncate table hb;
  insert into hb (dbname, opdate) select global_name,sysdate from global_name;
  commit;
阅读(2840) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~