读取并更新具有 2000 万条记录的 Oracle table

Read and update an Oracle table with 20 millions records

我有一种情况,我正在从备份中修复数据。

Table MAIN TABLE (PrimaryKey, Value) and Table BACKUP(PRIMARYKEY, Value).

我想在 MAIN Table 中找到 value=0 的所有记录,然后从 table BACKUP 中获取相同主键的值并更新 MAIN Table .

  1. 有 2000 万条记录值为 0
  2. 更新和获取都是使用主键完成的

问题

  1. 存储过程?脚本?

  2. 获取和更新是在同一个 table 上完成的?有什么顾虑吗?

  3. 你认为这需要多少时间- 球场数字。如何测试?

我想的解决方案:

使用我的条件(值=0)在 Table Main 上打开游标,然后从 BACKUP 获取值,然后更新。在循环中提交每 10K 次更新

有什么想法吗?

你可以试试Oracle的MERGE

确保在将查询应用到主表之前在测试表中进行测试。

MERGE INTO main_table m
USING backup_table b
ON (m.primary_key = b.primary_key)
WHEN MATCHED THEN
    UPDATE SET m.value = b.value 
    WHERE m.value = 0;
UPDATE MAIN_TABLE 
SET main.value=back.value
FROM MAIN_TABLE as main
JOIN BACKUP_TABLE as back ON main.pk=back.pk
WHERE main.value=0

这是我找到如何执行此操作的地方: https://chartio.com/resources/tutorials/how-to-update-from-select-in-sql-server/