ogg中同步sequence及在进程中新增加要同步的表

增加sequence及sequence 同步,进程中新增加表 (已经配置好ogg信息,并且启用了ddl同步)
源端 oracle_sid test,
目标端oracle_sid  testogg


--源端创建sequence ,创建sequence的时候,要加上nocache,不然默认会cache 20个。然后源端和目标端查询last_number会不一致。drop掉后,加上nocache重新即可

create sequence bb.t1_seq1 minvalue 1 maxvalue 999999999999999999999999 start with 1 increment by 1 nocache;   -- 要加上nocache ,默认是cache 20
select last_number from user_sequences where sequence_name='T1_SEQ1';
select bb.t1_seq1.nextval from dual;

BB@test>select last_number from user_sequences where sequence_name='T1_SEQ1';

LAST_NUMBER
-----------
	 14

BB@test>

BB@testogg>select last_number from user_sequences where sequence_name='T1_SEQ1';

LAST_NUMBER
-----------
	 14

BB@testogg>

-- sequence 配置

extdb1 
sequence bb.t1_seq1;   -- 源端抽取进程加上这个
pumdb1 
sequence bb.t1_seq1;  -- 源端pump进程加上这个 
repdb1 
map bb.t1_seq1,target bb.t1_seq1; -- 目标端replicat进程添加这个

-- 验证同步

BB@test>insert into bb.t1 values(t1_seq1.nextval,'i',sysdate);

1 row created.

BB@test>commit;


BB@test>select * from bb.t1;

	ID NAME TIME
---------- ---- -------------------
	14 i	2020-04-16 10:19:04

BB@test>
BB@testogg>select * from bb.t1;

	ID NAME TIME
---------- ---- -------------------
	14 i	2020-04-16 10:19:04

BB@testogg>

-- 创建一个job ,5分钟执行一次 ,在源端插入数据 (测试结果是,源端创建了job,目标端并没有这个job。原因是job的元数据是存放在sys.job$这个表里面的)
-- 先创建一个存储过程 ,job调用存储过程,然后可以在目标端看到ogg生成了这个存储过程

conn bb/oracle 
create or replace procedure insert_bb_t1 as 
begin
insert into bb.t1 values(t1_seq1.nextval,'i',sysdate);
commit;
end;

BB@testogg>select name,type,text from dba_source where owner='BB' and name='INSERT_BB_T1';

NAME	     TYPE	  TEXT
------------ ------------ ------------------------------------------------------------
INSERT_BB_T1 PROCEDURE	  procedure insert_bb_t1 as
INSERT_BB_T1 PROCEDURE	  begin
INSERT_BB_T1 PROCEDURE	  insert into bb.t1 values(t1_seq1.nextval,'i',sysdate);
INSERT_BB_T1 PROCEDURE	  commit;
INSERT_BB_T1 PROCEDURE	  end;	/* GOLDENGATE_DDL_REPLICATION */

BB@testogg>

-- 创建job ,生成的job号是 23 ,并且在目标端没有生成job ?

declare
jobno number;
begin
sys.dbms_job.submit(
job=>jobno,
what=>'bb.insert_bb_t1;',
next_date=>sysdate,
interval=>'SYSDATE+5/24/60');
commit;
end;

BB@test>select job,what from user_jobs where log_user='BB';

       JOB WHAT
---------- ------------------------------
	23 bb.insert_bb_t1;

BB@test>

BB@testogg>select * from user_jobs;   -- 居然没有job 

no rows selected

BB@testogg>


exec dbms_job.run(23);

-- 对比源端和目标端数据,发现同步过来了 。但是目标端没有产生job 。

BB@test>select * from t1;

	ID NAME TIME
---------- ---- -------------------
	14 i	2020-04-16 10:19:04
	15 i	2020-04-16 10:39:03
	16 i	2020-04-16 10:44:03
	17 i	2020-04-16 10:48:51

BB@test>

BB@testogg>select * from t1;

	ID NAME 	TIME
---------- ------------ -------------------
	14 i		2020-04-16 10:19:04
	15 i		2020-04-16 10:39:03
	16 i		2020-04-16 10:44:03
	17 i		2020-04-16 10:48:51

BB@testogg>

-- 测试在抽取进程中新增加一个表 t2 ,使用原有的表

BB@test>select count(*) from t2;

  COUNT(*)
----------
	 1

BB@test>desc t2
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID					   NOT NULL NUMBER
 NAME						    VARCHAR2(4)

BB@test>

--源端抽取进程添加 bb.t1,pump进程添加 ,然后重启extract 进程

extdb1 
table bb.t2;
pumdb1 
table bb.t2;

stop extract  *
start  extract  * 
add trandata bb.t2

-- 目标端添加 replicat,并重启

repdb2 
map bb.t2,target bb.t2;

stop replicat repdb2
start replicat  repdb2 

-- 查看scn 并导出

BB@test>select sysdate,current_scn from v$database;

SYSDATE 	    CURRENT_SCN
------------------- -----------
2020-04-16 11:30:57	1360471

BB@test>

expdp bb/oracle directory=DUMP dumpfile=t2.dmp tables=t2 FLASHBACK_SCN=1360471 

-- 目标端导入

impdp "'/as sysdba'" directory=DUMP dumpfile=t2.dmp

-- 验证  ,表t2 同步过去了。

BB@test>insert into t2 values(2,'b');

1 row created.

BB@test>commit;

Commit complete.

BB@test>select * from t2;

	ID NAME
---------- ----
	 2 b
	 1 a

BB@test>

BB@testogg>select * from t2;

	ID NAME
---------- ------------
	 1 a
	 2 b

BB@testogg>

-- 验证原来的表t1,没有影响 。进程中添加表完毕 (注意这里有sysdate,目标端被解析成了sysdate函数,而不是具体的日期)。

BB@test>select * from t1;

	ID NAME TIME
---------- ---- -------------------
	14 i	2020-04-16 10:19:04
	15 i	2020-04-16 10:39:03
	16 i	2020-04-16 10:44:03
	17 i	2020-04-16 10:48:51
	18 i	2020-04-16 10:53:54
	24 i	2020-04-16 11:23:56
	19 i	2020-04-16 10:58:54
	20 i	2020-04-16 11:03:54
	21 i	2020-04-16 11:08:55
	22 i	2020-04-16 11:13:55
	23 i	2020-04-16 11:18:55

	ID NAME TIME
---------- ---- -------------------
	25 i	2020-04-16 11:28:56
	26 i	2020-04-16 11:33:56

13 rows selected.

BB@test>

BB@testogg>select * from t1;

	ID NAME 	TIME
---------- ------------ -------------------
	14 i		2020-04-16 10:19:04
	15 i		2020-04-16 10:39:03
	16 i		2020-04-16 10:44:03
	17 i		2020-04-16 10:48:51
	18 i		2020-04-16 10:53:54
	19 i		2020-04-16 10:58:54
	20 i		2020-04-16 11:03:54
	21 i		2020-04-16 11:08:55
	22 i		2020-04-16 11:13:55
	23 i		2020-04-16 11:18:55
	24 i		2020-04-16 11:23:56

	ID NAME 	TIME
---------- ------------ -------------------
	25 i		2020-04-16 11:28:56
	26 i		2020-04-16 11:33:56

13 rows selected.

BB@testogg>

-- 关于job为什么在目标端没有生成(ogg没有把job同步到目标端)。原因是job是存放在sys.job这个视图里面的,对比下源端和目标端这个视图中的记录,就明白了。

BB@test>select count(*) from sys.job$;

  COUNT(*)
----------
	 4

BB@test> 
BB@testogg>select count(*) from sys.job$;

  COUNT(*)
----------
	 3

BB@testogg>

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值