我们有一个实时日志表数据量太大了(这个不是分区表),这个表不能中断业务,我们先要在线删除部分数据。有这个是生产库不能中断业务不能使用create table rename 的方法来搞。我就老老实实的使用rowid批删除的方法。
create or replace procedure delete_table_by_condition(table_name varchar2,
condition varchar2) is
type mycursor_type is ref cursor;
mycursor mycursor_type;
--cursor mycursor is
-- SELECT ROWID FROM table_name WHERE condition order by rowid;
type rowid_table_type is table of rowid index by pls_integer;
v_rowid rowid_table_type;
v_sql_getrowid varchar2(400);
v_sql_del_table varchar2(400);
BEGIN
v_sql_getrowid := 'SELECT ROWID FROM ' || table_name || ' WHERE ' ||
condition || ' order by rowid ';
v_sql_del_table := 'delete from ' || table_name || ' WHERE rowid = :1';
dbms_output.put_line(v_sql_getrowid);
open mycurs

面对实时日志表数据量激增的问题,由于业务不能中断,无法采用常规的表重命名方法进行数据清理。本文介绍了如何利用ROWID属性,在不影响业务的情况下,进行在线批量删除部分数据的策略。
最低0.47元/天 解锁文章
900

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



