pb 10.5 不提供MS SQL 連接,無奈下用了OLE 連接,可現在客戶端一保存資料庫就死鎖,急啊,哪位高手指點一下,緊急!!!
uj5u.com熱心網友回復:
死鎖要從幾個方面找問題:1、有沒有commit或者rollback
2、一次查詢資料很多條,而且這些資料在別的客戶端可能常用
3、不要使用多行的資料保存的模式,盡量單行的資料保存
這些容易引發死鎖,
具體還要看你的代碼是不是有問題
uj5u.com熱心網友回復:
還是pb 8 好用哦,郁悶死了,今天等著要用uj5u.com熱心網友回復:
要么用PB9,它還有sql專用介面要么用ODBC
其實死鎖不一定是介面的問題,要看有什么提示和現象,一般死鎖可是資料庫中鎖問題了!
也有可能是dLL不全,也有可能是介面引數的問題
uj5u.com熱心網友回復:
保存時都用了COMMIT USING SQLCA;uj5u.com熱心網友回復:
dll 用PowerBuilder Runtime Packager打包后在客戶端安裝的,程式已經是pb10.5版本了,還能降到8.0或9.0嗎????uj5u.com熱心網友回復:
應該不是連接方式的問題,多半是你的程式的問題你用一個對簡單的表測驗一下看看,如果只有一行資料都死鎖的話,再考慮換版本
uj5u.com熱心網友回復:
retrieve()后均要commit;uj5u.com熱心網友回復:
在我本機上不會出現死鎖,但在客戶端就會出現,難道打包的DLL也會不全???uj5u.com熱心網友回復:
那些資料庫介面打了嗎?要么客戶端上也裝個PB就知道了!
uj5u.com熱心網友回復:
我現在在retrieve和select 的SQL陳述句后都加了COMMIT USING SQLCA;試試看,如果行了告訴大家!在家有別的好方法再幫我提提
uj5u.com熱心網友回復:
暈,那有什么用啊!uj5u.com熱心網友回復:
SQLCA.AutoCommit = true試試uj5u.com熱心網友回復:
各位兄弟啊都沒用,我本機的程式連到服務器的資料庫操作時也出現了死鎖,現在我都搞不清別別的客戶端引起的還是我本機的程式引起的,有什么辦法能解決啊!!急!!!uj5u.com熱心網友回復:
OLEDB連接請加上:sqlca.lock='rc'
uj5u.com熱心網友回復:
retrieve和select 的SQL陳述句后,加COMMIT USING SQLCA; 如果還不行。是你程式的問題了。uj5u.com熱心網友回復:
肯定不是程式問題,以前在PB8上完全正常,我昨天理解錯了,以為是retrieve()陳述句后加COMMIT USING SQLCA;,原來是要在資料視窗的Retrieveend事件的腳本中加COMMIT USING SQLCA;,今天大面積的死鎖倒沒有了,發現了一兩次腳本中直接select陳述句死鎖現象,但我也加了COMMIT USING SQLCA;,手動取消了該行程,不知還會不會出現。uj5u.com熱心網友回復:
我一直不太清楚,PB腳本中用完SQL 后SQLCA.AUTOCOMMIT = true 這個應該設成true 還是false???SQLCA.AUTOCOMMIT 具體起到什么作用???
uj5u.com熱心網友回復:
自動提交呀!如果你用地是SQL2000地話,你SQLCA.AUTOCOMMIT=TRUE那么每向資料庫寫資料和修改資料地話COMMIT就不用寫了。uj5u.com熱心網友回復:
在你的資料庫連接檔案中加sqlca.lock='rc'uj5u.com熱心網友回復:
死鎖問題我們經常遇到,代碼上找不出哪兒問題,唯一的辦法是通過sql來解除SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
create proc p_lockinfo
@kill_lock_spid bit=1, --是否殺掉死鎖的行程,1 殺掉, 0 僅顯示
@show_spid_if_nolock bit=1 --如果沒有死鎖的行程,是否顯示正常行程資訊,1 顯示,0 不顯示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),標志,
行程ID=spid,執行緒ID=kpid,塊行程ID=blocked,資料庫ID=dbid,
資料庫名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計CPU時間=cpu,
登陸時間=login_time,打開事務數=open_tran, 行程狀態=status,
作業站名=hostname,應用程式名=program_name,作業站行程ID=hostprocess,
域名=nt_domain,網卡地址=net_address
into #t from(
select 標志='死鎖的行程',
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select '|_犧牲品_>',
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2
select @count=@@rowcount,@i=1
if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 標志='正常的行程',
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end
if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@標志 varchar(10)
while @i<=@count
begin
select @spid=行程ID,@標志=標志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @標志='死鎖的行程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(行程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,行程的SQL陳述句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
uj5u.com熱心網友回復:
首先要 sqlca.lock='rc'如果還發生死鎖,那么就是你的程式update()后沒commit;
uj5u.com熱心網友回復:
http://topic.csdn.net/u/20081212/00/7666e7f0-9d2c-405e-8a80-92cff9386677.html這個帖子去看下嘛
uj5u.com熱心網友回復:
select ... from ... with(nolcok)轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/103565.html
標籤:項目管理
