我们正在清理主数据库中去年的交易。我们使用公共数据库链接每天从另一个数据库中删除记录。每天的记录大约是 30-40k,但有时交易量会达到 100 万条记录。当删除过程面临这样的日子时,它会锁定主数据库并导致锁定。什么是清除记录的理想解决方案?我们也尝试使用alter table truncate partition
解决方案。但是,锁定情况在这一点上更糟。当我们清除数据库时,新记录正在实时写入数据库。所以我无法重新启动或增加distributed_lock_timeout
参数。任何解决方案表示赞赏。
首先,不要将数据库链接用于较大的事务。这可能会导致阻塞会话出现太多问题。另一个提示是保持交易的大小(不要小,不要大)。
如果您的表未分区,则编写一段代码以仅删除 1000 行,提交并删除接下来的 1000 行。
你说的
alter table <table_name> truncate partition <partition_name>;
是这张表是分区的吗?要归档整个分区,最好将其与具有相同结构的空表进行交换。之后,您可以导出/备份表,然后将其删除。如果您的分区位于专用表空间中,您还可以将其标记为只读并在每日备份中跳过它(在 RMAN 中启用备份优化)。