文档解释
ORA-02060: select for update specified a join of distributed tables
Cause: tables in a join with the for update clause must reside at the same DB.
Action: None
ORA-02060: select for update specified a join of distributed tables
这是一个通用错误代码,通常“select for update” 包含在分布式表之间的连接时会被触发。
官方解释
当SELECT FOR UPDATE语句指定连接分布式表时,将收到错误ORA-02060。此时,一个全局事务错误已被触发。这是因为Oracle不允许以全局级别更新分布式表,因为他们是在不同的机器、不同的库上的。
常见案例
Oracle不允许在连接分布式表时执行SELECT FOR UPDATE,通常会触发ORA-02060错误。例如,当执行以下语句时,将会触发这个错误:
SELECT * FROM table1, table2@remote_database WHERE … FOR UPDATE;
正常处理方法及步骤
首先,您需要尽量使用唯一主键,以避免全局级别的更新操作,如果没有唯一的主键,可以考虑使用Oracle的@Query语句来执行更新操作。
其次,您可以使用ROWID来避免全局级别的更新操作,以锁定更新的行。比如:
UPDATE table1@remote_database SET row_flag=’Y’ WHERE rowid IN (SELECT rowid FROM table1, table2@remote_database WHERE …);
最后,您可以使用Oracle的ROWID语法,使得您可以绕开ORA-02060的错误,比如:
UPDATE table1@remote_database SET row_flag=’Y’ WHERE rowid IN (SELECT table1@remote_database.rowid FROM table1, table2@remote_database, WHERE …);