在一个数据交换场景中,对方提供一个远程数据库,我方根据时间戳提取增量数据,经转换处理后存到我方数据库的表中。
对方数据有以下特征:
1.增量数据数量较大;
2.数据不规范,部分数据无法直接写入我方数据库。
考虑有以下几个方法来处理:
方案一、对每条数据loop循环处理,写入错误则记录后跳过;
方案二、在insert时对数据进行函数校验,符合条件的才写入;
仔细考虑这2中方案:
方案一对每条记录做loop循环无疑耗费了大量时间在远程链路上,对于数据量较大的情况时间代价太大。
方案二如果校验比较复杂,则用于函数校验的成本也很大;再者对错误数据的处理可能会造成更多的工作量。
详细分析后,我们提出使用forall的save exception机制来处理这个场景。
假设对方数据库远程链接名是db2,远程表t_exch结构如下:
SQL> desc t_exch
Name Type Nullable Default Comments
---------- -------------- -------- ------- --------
GUID VARCHAR2(50)
NAME VARCHAR2(30) Y
STIME VARCHAR2(20) Y
ETIME VARCHAR2(20) Y
CONTENT VARCHAR2(4000) Y
STATUS VARCHAR2(1) Y
CREATEDATE DATE Y
MOBILE VARCHAR2(20) Y
SQL> select * from t_exch where rownum<5;
GUID NAME STIME ETIME CONTENT

在大规模数据交换中,面对不规范的数据,通过分析对比两种处理方案,选择了使用PL/SQL的forall语句结合save exceptions机制,有效地记录并处理了异常数据。这种方法在保证高效性的同时,将错误数据存储到错误记录表,便于后续反馈和修复,实现了数据的顺利交换。
最低0.47元/天 解锁文章
9482

被折叠的 条评论
为什么被折叠?



