create table as 在Ogg中测试

本文在Oracle 11g环境下测试了使用`create table as`和传统方式创建表的区别,探讨了在GoldenGate (OGG)中这两种方式的影响。通过示例展示了`create table as select`在不同场景下的操作,强调了当源端和备端数据不一致时,可能导致replicat进程异常。OGG中的DDL触发器将DDL语句转化为DML,因此原句SQL会传递到备端,提醒读者注意数据一致性。

测试环境:

Version 11.2.1.0.24 18876493 OGGCORE_11.2.1.0.0OGGBP_PLATFORMS_140623.2214_FBO
Solaris, sparc, 64bit (optimized), Oracle 11g on Jun 25 2014 04:55:01

对比两种创建方式

使用create table as 手动创建的表 方式

create table TTT.ogg_test01 (id number,name varchar2(32));
insert into TTT.ogg_test01 values (1,'aaa');
insert into TTT.ogg_test01 values (2,'bbb');
commit;
create table TTT.ogg_test02 as select * from  TTT.ogg_test01;
insert into TTT.ogg_test02 values (3,'ccc');
commit;
update TTT.ogg_test02 set name='DDD' where id=2;
commit;
delete from TTT.ogg_test02;
commit;
drop table TTT.ogg_test02 purge;

成功!

使用create table insert 手动创建的表 方式

drop table TTT.ogg_test01 purge;
create table TTT.ogg_test01 (id number,name varchar2(32));
insert into TTT.ogg_test01 values (1,'aaa');
insert into TTT.ogg_test01 values (2,'bbb');
commit;
update TTT.ogg_test01 set name='CCC' where id=2;
commit;
delete  from TTT.ogg_test01 ;
commit;

成功!

使用create table as 系统自身的表

create table TTT.ogg_test03 as select username,user_id from dba_users order by 2;
insert into TTT.ogg_test03 values (118,'LLL');
commit;
update TTT.ogg_test03 set name='DDD' where id=118;
commit;
delete from TTT.ogg_test03;
commit;
drop table TTT.ogg_test03 purge;

这种测试方法是不成立的,所以才会造成replicat进程abend!

因为在源端 select username,user_id from dba_users order by 2;

        与备端select username,user_id from dba_users order by 2;的结果并不一致!,不可以想当然哦?!

DDL在ogg11g中仍然是使用DDL trigger转化为DML来实现的,因此传递到备端的是整句的sql语句!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值