来广州一个星期了,给XX基金做oracle数据实时复制容灾项目,问题层出不穷,私人问题也纠结不清呵,xx刚跟俺say goodbye,刺激的姐妹看快乐大本营都泪流满面,鸭梨呀鸭梨,哭完了睡觉眼肿,睁着眼码字吧。。
         在广州住在江边,为了迎接亚运珠江也跟秦淮河边红花绿柳般花姿招展,美,就是美。广交会一期俺赶上了,二期俺还赶上了,公司悲剧了,汉庭翻番着涨,呵呵。
           姐妹是oracle第三方软件厂商的人,平时专做数据实时复制,每次做技术交流的时候俺们都一再郑重声明此软件不支持iot表,不支持物化视图,不支持udt,10月19日猛然间发现客服系统有两个iot表,俺当是就一惊呀,这合同都签了咋办呢,加上基金公司也迎亚运,证监会月底检查,没办法硬着头皮上吧,好在4个系统中就有两张iot表。
           解决方案,A主系统基于iot表创建物化视图日志,B备机创建dblink以可以访问到A系统的iot表,之后再通过该dblink创建A系统iot表的物化视图,设定每5秒刷一次,不算实时,在没办法的情况下先这么做吧呵。因为之前也没做过,设想一下逻辑可行,接着就测试吧。
            步骤如下:
  1.在做该复制之前,首先需要A、B间tns可以ping的通,不通其他都是浮云。
     配置服务名,tnsnames.ora文件来确保tnsping畅通。
 
2.A系统基于iot表创建物化视图日志,该日志主要用于刷增量,记录数据变化信息。
  
conn kfdata/kfdata@fm
create MATERIALIZED VIEW LOG ON TFLOATING_PROFIT_LOSS;
create MATERIALIZED VIEW LOG ON TFLOATING_PROFIT_LOSS_0622;
 物化视图日志创建成功。
SQL> SELECT * FROM TAB WHERE TNAME LIKE 'M%';

TNAME                                                    TABTYPE    CLUSTERID
------------------------------ ------- ----------
MAILLIST                                             TABLE
MAILSENDLOG                                        TABLE
MAILSENDSTAT                                     TABLE
MAILTEMPLET                                        TABLE
MLOG$_TFLOATING_PROFIT_LOS              TABLE
MLOG$_TFLOATING_PROFIT_LOS1             TABLE
MLOG$即是创建的物化视图日志。
 
3.B备机创建dblink,可以访问到A的iot表。
grant create database link to user;
conn kfdata/kfdata@gebkdb --------------------登录目标端用户
create database link db_link_user connect to kfdata identified by kfdata using 'fm';
创建dblink,登录用户与密码需要与A系统的完全一致
connet to user 指源端iot用户,fm指tns可以ping通的源端字符串。
SQL> select count(* ) from TFLOATING_PROFIT_LOSS@db_link_user;

     COUNT(*)
----------
         99254

SQL> select count(* ) from TFLOATING_PROFIT_LOSS_0622@db_link_user;

     COUNT(*)
----------
                24
在B备机目标端可查询源端的iot表,说明该dblink创建成功。
 
4.目标端创建基于dblink的物化视图
SQL> grant create materialized view, select any table to kfdata;

SQL> conn kfdata/kfdata@gebkdb

SQL >create materialized view TFLOATING_PROFIT_LOSS refresh fast next sysdate + 5/(24*60) as select * from  TFLOATING_PROFIT_LOSS@db_link_user;

SQL> create materialized view TFLOATING_PROFIT_LOSS_0622 refresh fast next sysdate + 5/(24*60) as select * from  TFLOATING_PROFIT_LOSS_0622@db_link_user;
在源端插入一下数据,目标端查下表,看数据是否可以同步成功,姐妹艰难的熬了好几分钟数据也没过来,仔细一看,算错了,本想设为5秒刷一次数据的,一个不小心设成5分钟刷一次、悲剧了。
SQL> select * from TFLOATING_PROFIT_LOSS_0622;
改物化视图刷新时间
SQL> alter materialized view TFLOATING_PROFIT_LOSS_0622 refresh fast next sysdate + 5/(3600*24);
改过之后,成功了呢,只是设置5秒大概8、9秒数据才过来,延迟时间比较长,数据压力较小用着可行,这东西用着一定要慎重,浪费性能呢。
 
      本以为这个问题解决之后我就可以顺利的上生产系统配置俺们软件,然后就可以回京了,可是widows的网上交易系统进程一个也起不来了,信号灯都没有,俺没办法真没办法了,俺不是做开发的。还好hp的机子还都顺利呵。又接了邮件,广州还有个客户要去巡检,之后去东莞做升级,再之后深圳一个测试,一个技术交流,再一个深圳公安测试,本就想广州结束就回京的,让其他工程师来,算了,离得近了心更疼,就这么漂着吧、飘着吧、一个人、。//momoe.