SAP IQ DML操作產生表鎖(不是行鎖),同時DML同一個表預設直接報錯

tolywang發表於2016-05-06
Sybase IQ 16 測試時候發現, DML 操作會對整個表實施 lock動作,其他DML不能操作, 直接報錯。 
在一個session中執行 : insert into   dmreg.dm_test_one  values(66,getdate(),'test6');  不提交。
在另外一個session中DML操作同一個表, 直接報錯 :  
[sybase@ssp502-or ~]$ dbisql -c  "uid=dba;pwd=sql" -nogui

(DBA)> 
(DBA)> insert into   dmreg.dm_test_one  values(88,getdate(),'test8');  
Could not execute statement.
  User 'another user' has the row in 'dm_test_one' locked
  SQLCODE=-210, ODBC 3 State="40001"
  Line 1, column 1
  insert into   dmreg.dm_test_one  values(88,getdate(),'test8')
Press ENTER to continue...

我們修改資料庫引數 (database options) , 
select  * from  sysoptiondefaults;    -- 檢視預設值  
set  option public.blocking='ON' ;    -- 修改 blocking='ON' , 預設是OFF
set  option public.blocking_timeout= 0 ;   -- 修改blocking_timeout=0, 表示無限期等待,其實預設就是0  
sp_iqcheckoptions;       ---  檢視修改後的引數值   

再次在不同session中執行針對一張表的DML語句, 第一個不提交的情況下, 第二個session會一直等待,直到第一個session的DML提交。 

備註:  如果是IQ Multiplex 叢集架構,那麼只有 Coordinator 協調伺服器節點才對以上的設定blocking生效, 其他節點一樣不生效 ,還是會報錯。 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-2095047/,如需轉載,請註明出處,否則將追究法律責任。

相關文章