前言
最近接到一个需求,需要同步二十万条数据到我们数据库来,然而过程并不太顺利,解决之后来总结一下。
问题
同步的时候会报错,导致同步失败出现死锁问题。
出现死锁没权限,又不得不麻烦同事帮忙解开,关于解锁直接百度即可http://blog.itpub.net/26812308/viewspace-2120485/
优化
后来了解情况后发现代码中没有事务的相关处理,涉及到数据量很大如果出现网络波动或其他访问操作同一张表就会容易引发死锁问题。
PROCEDURE sync_mnt_five_tree IS
update_num NUMBER;
CURSOR v_cur IS
SELECT * FROM USER;
BEGIN
update_num :=0;
FOR v_row IN v_cur
LOOP
update_num := update_num+1;
-- 函数代码....
-----------每一千条提交一次
IF update_num > 1000 THEN
update_num :=0;
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
总结
简单做个计数器,每次循环进行加一,到达一千条数据commit一次,这样能及时提交,减少冲突问题。