大批量删除数据有几种方法,这里列举我们使用的一个方法,参考下面存储过程。
1.定义步长(可以使用rowid分片),每次删除多少提交
2.低峰时间进行操作
3.删除完休息多久
CREATE PROCEDURE clear_ub(
v_start NUMBER,
v_end NUMBER
) AS
TYPE cn_type IS TABLE OF VARCHAR2(100);
l_start NUMBER;
cn_tab cn_type;
CURSOR cur_data IS
SELECT /*+ FIRST_ROWS(1000) */cn
FROM (SELECT ud.cn, ROWNUM RN
FROM (select cn from tt.USER_18MONTHS_20120607_INFO where cn is not null) ud
WHERE ROWNUM < v_end)
WHERE RN >= v_start;
BEGIN
OPEN cur_data;
LOOP
FETCH cur_data BULK COLLECT INTO cn_tab LIMIT 1000;
EXIT WHEN cn_tab.count = 0;
DBMS_OUTPUT.put_line(cn_tab.count || ' rows');
l_start := DBMS_UTILITY.get_time;
FORall i IN cn_tab.first .. cn_tab.last
delete from tt.user_info where cn=cn_tab(i);
commit;
dbms_lock.sleep(3);
DBMS_OUTPUT.put_line('Delete : '||(DBMS_UTILITY.get_time - l_start));
END LOOP;
CLOSE cur_data;
END;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26390465/viewspace-1869182/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26390465/viewspace-1869182/