怎样在SQLLDR失败后,把SQLLDR锁定表释放?

quiettown 2009-09-05 03:45:58
建立一双机系统,在主机上进行SQLLDR时,系统SHUTDOWN。备机启动后,向同一表中LOAD数据时报错:

SQL*Loader-951: Error calling once/load initialization
ORA-00604: error occurred at recursive SQL level 1
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

很明显sqlldr使用了direct=true,造成锁表。

sqlldr user/passwd@dbtns DIRECT=TRUE SKIP_UNUSABLE_INDEXES=TRUE SKIP_INDEX_MAINTENANCE=FALSE control=test.ctl

不想使用alter system kill session方式来处理。

请问有没有oracle系统维护过程能够实现清理死掉会话,我们想在双机切换时,即对数据库中会话进行处理。又或者有其它途径,希望不吝赐教,不胜感谢!
...全文
587 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
quiettown 2009-09-08
  • 打赏
  • 举报
回复
虽然没有满意的答案,感谢关注的兄弟
quiettown 2009-09-07
  • 打赏
  • 举报
回复
这个和双机其实没有太大关系,重点是将锁表的死去SESSION清除掉。。。
ckc 2009-09-07
  • 打赏
  • 举报
回复
什么样的双机?rac还是ha这样的?
quiettown 2009-09-07
  • 打赏
  • 举报
回复
顶下。。。
quiettown 2009-09-05
  • 打赏
  • 举报
回复
楼上兄弟,系统都挂了,你让俄上哪儿ROLLBACK去?实际上,使用CTRL+C做测试时,SESSION也是可以得到释放的,只是OS SHUTDOWN时,这个SESSION会挂在数据库中。
PMON进程可以清理类似数据垃圾,但触发条件是什么?
可以考虑KILL SESSION,但在数据库如何判断客户端已断开?
观察LOAD过程中时的SESSION的状态也是一会ACTIVE, 一会INACTIVE的,不能以SESSION的STATUS做为正在LOAD判断依据。
oraclemch 2009-09-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 quiettown 的回复:]
建立一双机系统,在主机上进行SQLLDR时,系统SHUTDOWN。备机启动后,向同一表中LOAD数据时报错:

SQL*Loader-951: Error calling once/load initialization
ORA-00604: error occurred at recursive SQL level 1
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

很明显sqlldr使用了direct=true,造成锁表。

sqlldr user/passwd@dbtns DIRECT=TRUE SKIP_UNUSABLE_INDEXES=TRUE SKIP_INDEX_MAINTENANCE=FALSE control=test.ctl

不想使用alter system kill session方式来处理。

请问有没有oracle系统维护过程能够实现清理死掉会话,我们想在双机切换时,即对数据库中会话进行处理。又或者有其它途径,希望不吝赐教,不胜感谢!
[/Quote]

你rollback就好了。不会思索了!
Dave 2009-09-05
  • 打赏
  • 举报
回复
解锁:
1.事务处理完,自动解锁
2.kill session,楼主这样情况估计只能kill session了.
用Toad里的session Brower 来kill session还是比较方便的.


SQL> select 'alter system kill session '''||sid||','||serial#||''';' from v$session where sid in (select sid from v$lock where block = 1);
'ALTER SYSTEM KILL SESSION'''||SID||','||SERIAL#||''';'

我们可以在切换之后手动的用SQL来检查检查有没有死锁,如果有,kill 就可以了..


至于楼主的意思:在双机切换时,自动对数据库中会话进行处理, 个人认为实现有难度,数据库如何去判断在哪些session是死锁的? 这个还是需要人工的介入.. 期待其他答案..

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧