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

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

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

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

Номер сообщения сервера =8405 серьезность =21 состояние =0 строка =0 текст = ошибка SQL везде -210: для пользователя "XYZ" заблокирована строка в "пользователе", SQL: "ВЫБРАТЬ * ОТ пользователя"

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

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

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

Другие вопросы по тегам