凡是高手都请进!需要对oracle深度熟悉,巨难的解决办法!!! 在SQL*PLUS 中ctrl-c或file->cancel 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to ATCG(ATCG) : 我还是把问题说清楚吧,我想知道在ORACLE服务器端能不能只K掉指定的PROCESS,而不断开SESSION。 挺深的问题。恐怕ORACLE的人也很难解答。 咱们都讨论出一个说法!我个人感觉还是有一点希望的,可惜不能联系ORACLE公司的人,不然结论可以更早出来。继续!!! 你的问题有些怪,是不是你只想把指定的某些操作语句kill?我觉得是不可能的,数据库端根本没有针对每个session中的sql语句的process, 数据库端的主要进程pmon, smon, dbwr, lgwr, chpt不只是针对某条语句的,所以不可能kill server的进程,只能kill调server process 也就是用户的连接进程 目前我们所知的,的确只能KILL掉SESSION。但是ORACLE是否有更强大的机制,是我们没有了解的,疑问中...比如执行一个存储过程,可以在服务器方KILL掉,而不是KILL SESSION,可以继续干点其它的,是我很感兴趣的,相信大家也是如此。 不可以吧,oracle对每条sql或procedure没有独立的句柄类的东西来识别,后台的进程与客户端是一一对应的,只是靠sessionID来识别客户端与服务端,所以只能对session进行操作,不能对session中的某一条指令进行操作这只是我的理解 没有可能,我们对数据库的操作都是基于sql*net下的你只能发送request具体的operation都是在server下运行的你不可能指挥server怎么查询,它的flow在运行中是不可见的没有运行点,也就是取不到handle,就不可能cancle另外如果要知道运行点,对系统有一定的开销,和大家共同探讨 有精通OCI编程的吗?能不能解释一下以下的几个概念:OCIServerOCISvcCtxOCIStmt to jeam(吉姆) :以上几个变量在oracle call interface 中-> OCI Programming Basics->Handles有详细的说明 不知某人有否过这样的尝试: 通过OCI创建一个查询语句的OCIStmt,保存OCIStmt的HANDLE,在执行的过程中通过OCI的OCIHandleFree函数来中止查询。 这样的实现效果如何,请大家看看。 不知某人知不知道Handle的含义: handle只是本机访问服务器的句柄,你Free了本机句柄,并没有给服务器发送cancleSESSION还是继续执行的 这是数据库的事务机制和安全机制,如果你只Kill掉某个处理语句,那还能保证数据的完整性吗,还能保证数据库系统的安全吗,Oracle还能成为今天的Oracle吗所以这是一条系统设计的原则,不能那样做,不是做不到如果兄弟想要实现那样的功能,方法很多(本人一直认为很多问题都是可以找到解决办法的,只不过存在笨办法与好办法,性能好与坏之分),提供一个思路:你可以建立一个表,作为运行你代码的临时纪录标志表,表里面设计一个标志字段,你的代码每运行一次或者n次就检查一下那个标志,如果它复位了就停止运行活干点其他什么的,这样你就可以控制这些代码的运行了,你可以在某个你烦躁的时候复位标志就OK如果仁兄是想讨论这种机制,那我劝你别多费心思了 但是,如果这样的话,会不会影响运行效率呢?他要不断的去检测那个标志我刚学oracle所以,我想问一下,这个为运行代码所建的临时纪录标志表具体是怎么实现的呢? 效率的影响是肯定的,但是小段代码是用不着这样的jeam兄提出的应该是针对大量数据长时间处理,象电信,移动,那样的话也不需要每次都检查,每n次(n=1000会有较好的性能)检查一下就行补充一下,使用查询可以考虑拥游标 同意Pengmg(Challey)的说法oracle对于单个sql不能cancle的 谢谢各位的参与,特别感谢Pengmg(Challey)、zzzsssccc(籍秋风) 、cyypeng(chenyang)!这种问题虽然是钻牛角尖的问题,但是通过讨论,则能逐步明晰解决问题的思路。再次感谢大家不拘一格的看法!!! Oracle 删除分区带来索引失效 一个基本问题,但是很急,丢饭碗的事,望大家帮忙!谢谢了 Oracle 如何动态生态生成查询条件 请问一个删除帐号的问题 有没有工具可以对比两个用户所属的表结构,包括字段长度是否一致?有哪些地方不一样? sql语句嵌套 oracel 开发ERP程序现在主要是用什么开发工具 请问怎样用SQL语句列出用户建的表? 我想取一个FLOAT字段的值,让它的精度是两位小数,应该怎么办??? oracle 触发器 如何修改另一条记录? 触发器表在哪。 在oracle 中建立了用户abcuser,我想卸载他。
我还是把问题说清楚吧,我想知道在ORACLE服务器端能不能只K掉指定的PROCESS,而不断开SESSION。
继续!!!
但是ORACLE是否有更强大的机制,是我们没有了解的,疑问中...比如执行一个存储过程,可以在服务器方KILL掉,而不是KILL SESSION,可以继续干点其它的,是我很感兴趣的,相信大家也是如此。
这只是我的理解
你只能发送request
具体的operation都是在server下运行的
你不可能指挥server怎么查询,它的flow在运行中是不可见的
没有运行点,也就是取不到handle,就不可能cancle另外如果要知道运行点,对系统有一定的开销,和大家共同探讨
能不能解释一下以下的几个概念:
OCIServer
OCISvcCtx
OCIStmt
以上几个变量在
oracle call interface 中
-> OCI Programming Basics->Handles有详细的说明
通过OCI创建一个查询语句的OCIStmt,保存OCIStmt的HANDLE,在执行的过程中通过OCI的OCIHandleFree函数来中止查询。
这样的实现效果如何,请大家看看。
handle只是本机访问服务器的句柄,你Free了本机句柄,并没有给服务器发送cancle
SESSION还是继续执行的
所以这是一条系统设计的原则,不能那样做,不是做不到如果兄弟想要实现那样的功能,方法很多(本人一直认为很多问题都是可以找到解决办法的,只不过存在笨办法与好办法,性能好与坏之分),提供一个思路:
你可以建立一个表,作为运行你代码的临时纪录标志表,表里面设计一个标志字段,你的代码每运行一次或者n次就检查一下那个标志,如果它复位了就停止运行活干点其他什么的,这样你就可以控制这些代码的运行了,你可以在某个你烦躁的时候复位标志就OK如果仁兄是想讨论这种机制,那我劝你别多费心思了
jeam兄提出的应该是针对大量数据长时间处理,象电信,移动,那样的话也不需要每次都检查,每n次(n=1000会有较好的性能)检查一下就行补充一下,使用查询可以考虑拥游标
这种问题虽然是钻牛角尖的问题,但是通过讨论,则能逐步明晰解决问题的思路。
再次感谢大家不拘一格的看法!!!