2013-10-21 65 views
1

逐行读取与WriteNoPK我使用Sybase SQL Anywhere的12.让我说,我有以下连接到它表用户:的Sybase使用isql

conn_name conn_id user_id table_type creator table_name index_id lock_class lock_duration lock_type row_identifier 
SQL_DBC_a2a1060 3193 DBA BASE  DBA  user  (NULL)  Row   Transaction  WriteNoPK 37431476262 
SQL_DBC_a2a1060 3193 DBA BASE  DBA  user  (NULL)  Row   Transaction  Intent  45309427737 
SQL_DBC_a2a1060 3193 DBA BASE  DBA  user  (NULL)  Row   Transaction  WriteNoPK 45309427737 
SQL_DBC_a2a1060 3193 DBA BASE  DBA  user  (NULL)  Row   Transaction  Intent  37399035938 
SQL_DBC_a2a1060 3193 DBA BASE  DBA  user  (NULL)  Row   Transaction  WriteNoPK 37399035938 
SQL_DBC_a2a1060 3193 DBA BASE  DBA  user  (NULL)  Row   Transaction  Intent  37399035939 

如果我现在要SELECT *从Sybase SQL Anywhere中的用户我将按预期方式获取所有行和数据。

但是,如果我打算在OpenSuse 11.4上使用iSQL中的DBA-User激发相同的SQL语句,则Statement将运行,并且我将收到结果,直到要选择的行具有WriteNoPK-Lockflag集。 声明比声明以下错误:

服务器消息号= 8405严重性= 21状态= 0行= 0 text = SQL Anywhere错误-210:用户'XYZ'在'用户'锁定行中,SQL: 'SELECT * FROM user'

即使行是WriteNoPK-Locked,是否可以读/选?

非常感谢, 最大

回答

1

这是您的连接的隔离级别的结果。该行更新锁定,以防止其他进程得到一个可能的“脏读”(例如读取尚未提交的更新值,并且可以回滚)

要查看您当前的隔离级别:

SELECT CONNECTION_PROPERTY('isolation_level'); 

SQLAnywhere文档中的这一节讨论不同的隔离级别设置以及如何更改它们。隔离级别0或1可能会允许您的阅读继续,但存在一定风险。您可能还想查看快照隔离设置以查看它是否适合您的需求。

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.sqlanywhere.12.0.1/dbusage/udtisol.html

+0

谢谢你,你真棒! – Max