Posts

Showing posts with the label Oracle

安全数据清理:从大型 Oracle 表删除旧数据

Image
安全数据清理:如何从大型 Oracle 表中删除旧数据 为了遵守数据保留规定,我们定期清理旧数据。但是,从生产数据库删除数百万条记录需要非常谨慎。以下是我们的做法。 第一步:数据目录与计划 统计所有表并确定保留期限 与法律团队确认保留计划 与其他团队协作,识别下游依赖 第二步:备份表 删除前备份受影响表,确保出现问题时可以快速恢复。 第三步:理解表结构 先识别子表和父表。先删除子表,以避免外键约束错误。 第四步:批量删除 vs 直接删除 在 PT 环境中测试批量删除正常。但在生产环境中: 表超过 700 万行,需要删除超过 100 万行 20K 批量删除导致等待 1.5 小时并触发 FK 错误 出现自动回滚 现在采用增量删除: 每次删除 1 万条并提交 循环执行直到清理完成 速度慢但可控,易于定位 FK 错误 第五步:SQL 示例 -- 删除旧数据示例 SELECT '子表1', COUNT(*) FROM child_table_1 WHERE created_on < ADD_MONTHS(TRUNC(SYSDATE), -144); DELETE FROM child_table_1 WHERE created_on < ADD_MONTHS(TRUNC(SYSDATE), -144); COMMIT; DECLARE v_batch_size CONSTANT PLS_INTEGER := 20000; v_rows PLS_INTEGER; v_cutoff_date DATE := ADD_MONTHS(TRUNC(SYSDATE), -144); BEGIN LOOP DELETE FROM large_table WHERE created_on < v_cutoff_date AND ROWNUM <= v_batch_size; v...

Safe Data Purge: How We Remove Old Records in Large Oracle Tables

Image
Safe Data Purge: How We Remove Old Records in Large Oracle Tables At our company, we periodically purge old data to comply with data retention regulations. Deleting millions of rows from production databases requires careful planning. Here's how we do it. Step 1: Catalog and Plan Catalog all tables and identify retention periods. Review retention schedule with legal team. Coordinate with other teams to identify downstream dependencies. Step 2: Backup Tables Always backup affected tables before deleting. This ensures quick recovery in case of unexpected issues. Step 3: Understand Table Structure Identify child tables and parent tables. Delete child tables first to avoid foreign key violations. Step 4: Batch Deletes vs Direct Deletes We tested batch deletes in our PT environment and it worked fine. However, in production: Tables have 7M+ rows and 1M+ rows to delete Batch of 20K rows...