nowait的用法

来源:百度知道 编辑:UC知道 时间:2024/05/04 22:12:41
当我试图修改一个表的时候.弹出了ora-00054错误,说是资源正在被使用.如果想执行操作的话,要使用nowait关键字.
请问,这个关键字怎么用.在一个修改表结构的语句中.
....重赏之下必有勇夫,提高100分!

1、故障原因如下:
ORA-00054 resource busy and acquire with NOWAIT specified

Cause: The NOWAIT keyword forced a return to the command prompt because a resource was unavailable for a LOCK TABLE or SELECT FOR UPDATE command.

Action: Try the command after a few minutes or enter the command without the NOWAIT keyword.
2、nowait的使用,参考《说说ORACLE的封锁机制》这篇文章。
http://www.knowsky.com/389437.html

回答补充----
table是不能offline的,因为有其它人在修改表的记录,导致oracle的锁不兼容所以返回这个错误,最好等到非业务时间再进行这样的操作.
而人工去判断一个非业务时间是比较困难的,如果是多个系统同时需要修改就比较麻烦,我的办法是:
假设你的最终目的是为了无人工干预的对表结构进行修改,那么,你就写个系统定时运行脚本,这个脚本可以一个小时或更短时间运行一次,脚本检查表是否已经是你所需要修改后的字段结构:如果不是,就运行修改表结构的命令;如果是,就说明表结构已经修改成功,就删除你的定时脚本.

select * from t for update

如果代码这样写
这里会尝试对整个表加一个TM锁和所有行加个TX锁,但是如果这时有人在修改当前表,也就是说,这个表已经被别人加了TX锁,那么你就被阻塞了,你要等到别人提交后才能运行

select * from t for update nowait
多了一个nowait,你就不