Sybase читает строку с WriteNoPK, используя iSQL

я использую Sybase SQL Anywhere 12. Позвольте мне сказать, что у меня есть пользователь Table со следующими подключениями к нему:

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 * FROM user из Sybase SQL Anywhere, я получу все строки и данные, как и ожидалось.

Но если я собираюсь запустить тот же оператор SQL, используя пользователя DBA в iSQL на OpenSuse 11.4, оператор будет выполняться, и я буду получать результаты до тех пор, пока для строки, которая будет выбрана, не будет установлен WriteNoPK-Lockflag. В заявлении указывается следующая ошибка:

Номер сообщения сервера = 8405 серьезность = 21 состояние = 0 строка = 0 текст = SQL Anywhere Ошибка -210: пользователь «XYZ» заблокировал строку в «пользователе», SQL: «SELECT * FROM user»

Есть ли возможность читать/выбирать, даже если строка WriteNoPK-Locked?

Большое спасибо, Макс


person Max    schedule 21.10.2013    source источник


Ответы (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

person Michael Gardner    schedule 21.10.2013