我有一个像这样的数据迁移脚本。
Data_migration.sql
它的内容是
insert into table1 select * from old_schema.table1;
commit;
insert into table2 select * from old_schema.table2;
commit;
执行脚本时,table1
有pk_productname
约束
SQL> @ "data_migration.sql"
我将获得一个唯一约束(pk_productname
)违规。但是当我执行单独的sql语句时,我不会收到任何错误。这背后有任何原因。以及如何解决这个问题。
答案 0 :(得分:5)
唯一约束的失败意味着您正在尝试插入主键列冲突的一个或多个记录。
如果在运行脚本时发生,但在运行单个语句时没有,那么脚本中必定存在错误。在没有看到脚本的情况下,我们无法确定该bug是什么,但最可能的是你以某种方式运行相同的语句两次。
另一个可能的原因是约束被推迟。这意味着它直到事务结束才会强制执行。因此,如果在不发出后续COMMIT的情况下运行它,INSERT语句似乎会成功。
通常在没有启用约束的情况下运行数据迁移。之后使用EXCEPTIONS表重新启用它们。这样可以更轻松地调查问题。 Find out more