有更具体点的说明吗?
刚用delphi写了个解锁的小程序,替代用SQLPlus敲命令杀死锁表的会话进程。不知这样是否真的可以解除oracle当前的锁表现象,我欢迎各位大虾不吝赐教。有时间写完整些再把exe贴上来。
procedure TForm1.Button1Click(Sender: TObject);
var
Sid, Serial: Integer;
begin
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(' Select * From v$Session Where LockWait<>' + '''' + ' ' + '''');
Open;
if Eof then
begin
ShowMessage('当前数据库没有锁表现象!');
Exit;
end;
while not EOf do
begin
if Eof then
begin
ShowMessage('当前数据库已经没有锁表现象!');
Break;
end;
Sid := FieldByname('sid').AsInteger;
Serial := FieldByname('Serial#').AsInteger;
if MessageDlg('当前锁为:Sid=' + IntToStr(Sid) + ',Serial#=' + IntToStr(Serial) + ',是否解除该锁?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
with ADOQuery2 do
begin
SQL.Clear;
SQL.Add('Alter system kill session ' + '''' + IntToStr(Sid) + ',' + IntToStr(Serial) + '''');
try
ExecSQL;
ShowMessage('该锁('+ IntToStr(Sid) + ',' + IntToStr(Serial) +')已经解除!');
except
on E: Exception do
begin
ShowMessage(E.Message);
end;
end;
end;
end;
Next;
end;
end;
end;