ORA-12843: pdml lock not held properly on the table
Cause: The coodinator crashed or released the lock on the partition which the slave is trying to aquire currently.
Action: Check if the coordinator or some of the other slaves died. Also check that the lock has not been corrupted. Issue the pdml again.
ORA-12843: pdml lock not held properly on the table 错误描述:
该错误表明当 Hive 要执行 DML 时,其 PDML 锁没有正确应用到表上。
ORA-12843 表明,在尝试执行同时改变表定义和数据的操作时,无法获得为表定义更改所必需的子锁。
ORA-12843 最常见于使用 INSERT ALL 等多部分插入或使用 WITH CHECK OPTION 语法来创建多行查询时。
1. 检查代码中是否存在 WITH CHECK OPTION 或 INSERT ALL 语法;
2. 尝试以简化的形式重构代码,如 INSERT INTO TABLE (a,b,c) SELECT a,b,c FROM… 或 INSERT INTO TABLE (a,b,c) VALUES (x,y,z);
3. 不使用 INSERT ALL 及 WITH CHECK OPTION;
4. 尝试新建一个表,同时拷贝不带 PDML 锁定符的数据;
5. 尝试在数据改变前调用 DBMS_SERVER.CHECK_OBJECT('’USER.TABLE_NAME’’); 来让数据库逐一检查表;
6. 如果是一个运行中的表,那么可能该表中某行正在被一个不可发现的会话(而且尚未提交)修改;
7. 最后,可以考虑让数据库管理员重启数据库;
如果以上步骤都无法解决 ORA-12843 问题,请向数据库管理员提出相应的建议和解决方案,以避免出现该问题。