Pages

2011年11月14日 星期一

HTTP3287: connection limit (XXXX) exceeded, closing socket

HTTP3287: connection limit (XXXX) exceeded, closing socket

發生的原因有:

1. Max. File Descriptor的設定小於實際的需求
Solve: 使用ulimit設定參數 
2. 使用Hot Deployed
Solve: 不要使用此部署方式,以免在效能有瓶頸的伺服器(太多On Demand需求)上發生此異常。 
3. Iplanet效能沒有設定好
Solve: 設定 ConnQueueSize的大小大於系統設定的Max. File Descriptor
參考:  
http://download.oracle.com/docs/cd/E19554-01/816-5690-10/816-5690-10.pdf

4. 系統某方面卡住了。
原因:  SQL Server Lock機制,導致系統連線Hang住,因此在程式中會產生LOCK的地方,一定要用rollback機制,以免系統被一個連線佔住,其他一直排隊進不去,連線數爆量,DBA終於找出問題了。

SQL語法中使用字串執行SQL語法


通常在資料庫的表格中有可能存在一些SQL的部分語法來讓程式存取使用。
但在寫Trigger或 Store Procedure時要如何使用這些字串?

正常來說直接使用exec sp_executesql @sqlcmd會出現下面的系統提示:
必須宣告純量變數@studentno。

因此需要做一些修改,可以從範例看出一些端倪:

假如我們的資料庫的分類表格中存在一個欄位儲存判斷式為

學生分數 between 80 and 90

之後我們可以宣告兩個變數與執行他們

declare @sqlcmd varchar(255)

declare @condition varchar(255)

declare @stundentno char(16)



set @sqlcmd = 'update 學生成績 set 分數分類 = ''A'' where studentno = @stundentno and '

select @condition =  condition  from 分類 // 取出分數介於80 ~ 90的狀況



 exec sp_executesql @sqlcmd + @condition ,N'@stundentno char(16) output',@stundentno output