oracle 创建账号密码oracle produce同步中间库

oracle produce同步中间库

 

在一个已有系统上做外网系统,考虑到服务器压力或者没有条件直接连接已有系统的数据库。需要弄一个中间库在特定时间进行业务数据的同步。需要注意的写法 

Sql代码  

INSERT INTO sy_api_c_meter  

        (task_id, meter_id, …. .)  

        SELECT in_task_id, meter_id,.. ..  

            FROM c_meter a, c_mp b, c_meter_mp_rela c  

         WHERE a.meter_id = c.meter_id  

                     AND b.mp_id = c.mp_id  

                     AND b.cons_ioracle账号d = v_cons_id  

                     AND b.org_no = v_org_no  

 

上面的sql中select 查询语句没有性能问题,分区条件和索引都能走上,但是在一起执行insert 时就会很卡。这是刚开始写过程时会犯的错误。应该使用游标,修改结果如下: 

Sql代码  

FOR cur IN (SELECT c.meter_id  

              FROM c_mp b, c_meter_mp_rela c  

             WHERE b.mp_id = c.mp_id  

                   AND b.cons_id = v_cons_id  

                   AND b.org_no = v_org_no)  

LOOP  

    INSERT INTO sy_api_c_meter  

        (task_id, meter_id, inst_loc,….)  

        SELECT in_task_id, meter_id, ….  

          FROM c_meter a  

         WHERE a.meter_id = cur.meter_id;  

END LOOP;  

 

在实际操作中对表数据的批量操作,循环操作的速度要快很多。

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。