我正在尝试在 Oracle 中编写插入语句,突然停止了。我没有收到任何错误消息,但 scriptRunner 任务不会停止运行,而且我无法插入任何内容。
我已经取消并暂停了任务,但这导致 Oracle 冻结,我必须强制退出。
更新:我可以完美地运行
select * from table
查询,但我的个人插入语句是当我看到这个问题时
当某些用户有活动或打开的会话时,会发生这种情况。他们可能已经完成了一些更新和插入,但没有提交,并且他们的会话仍然处于活动状态,然后脚本运行程序在从您的会话或任何其他会话查询更新时继续运行。这是因为数据库不允许更新同一个表以避免不一致。您可以运行选择查询,因为这不会导致不一致。
有一种解决方案可以终止其他活动会话,然后运行查询。 这是这样完成的:
搜索活动会话:
选择 SID、序列号、状态、用户名、OSUSER、服务器 来自 V$会话 其中状态=“活动”
现在终止那些来自其他用户的会话:
更改系统终止会话'
您将从第一个查询中获得的 sid 和序列号值。
执行这两个查询后,您将能够运行您自己的查询。
#解决方案1: 在其他会话中执行:
set serveroutput on
cl scr
declare
q varchar2(1000);
begin
for i in (select SID,SERIAL# from gv$session where USERNAME='YourUserName' and SQL_ID='YourSqlId') loop
select 'ALTER SYSTEM KILL SESSION '''|| i.SID || ',' || i.SERIAL# ||','|| '@1'''||' IMMEDIATE;' into q from dual;
dbms_output.put_line(q);
end loop;
end;
然后运行结果窗口中出现的所有语句。
#解决方案2: 如果问题仍然存在,则关闭 sql 开发人员表。