Основные сведения об управлении параллелизмом
Под управлением параллелизмом подразумевают различные техники, которые используются для сохранения целостности базы данных, когда несколько пользователей обновляют строки одновременно. Неверный параллелизм может привести к проблемам, таким как чтение фантомных данных, чтение недействительных данных и неповторяемые чтения. Драйвер Microsoft JDBC Driver для SQL Server реализует интерфейсы всех механизмов параллелизма, используемых SQL Server для разрешения этих проблем.
Примечание
Дополнительные сведения о параллелизме SQL Server см. в разделе "Управление параллельным доступом к данным".
Remarks
Драйвер JDBC поддерживает следующие типы параллелизма.
Тип параллелизма | Характеристики | Блокировки строк | Описание |
---|---|---|---|
CONCUR_READ_ONLY | Только для чтения | нет | Обновление посредством курсора не разрешается, недопустима блокировка в отношении строк, входящих в результирующий набор. |
CONCUR_UPDATABLE | Оптимистическая, чтение-запись | нет | База данных считает состязание строк нежелательными, но возможными. Целостность строк проверяется сравнением отметки времени. |
CONCUR_SS_SCROLL_LOCKS | Пессимистическая, чтение-запись | Да | База данных считает состязание строк вероятным. Целостность строк обеспечивается блокировкой строк. |
CONCUR_SS_OPTIMISTIC_CC | Оптимистическая, чтение-запись | нет | База данных считает состязание строк нежелательными, но возможными. Целостность строк проверяется сравнением отметки времени. Для SQL Server 2005 (9.x) и более поздних версий сервер заменяет это значение на CONCUR_SS_OPTIMISTIC_CCVAL, если таблица не содержит столбец меток времени. Для версии SQL Server 2000 (8.x), если базовая таблица содержит столбец меток времени, используется параметр OPTIMISTIC WITH ROW VERSIONING, даже если указан параметр OPTIMISTIC WITH VALUES. Если указан параметр OPTIMISTIC WITH ROW VERSIONING, и таблица не содержит отметок времени, используется параметр OPTIMISTIC WITH VALUES. |
CONCUR_SS_OPTIMISTIC_CCVAL | Оптимистическая, чтение-запись | нет | База данных считает состязание строк нежелательными, но возможными. Целостность строк проверяется сравнением данных строк. |
Результирующие наборы не обновляются
Обновляемый результирующий набор ― это результирующий набор, в котором строки могут быть вставлены, обновлены и удалены. В следующих случаях служба SQL Server не может создать обновляемый курсор и формирует исключение "Результирующий набор не является обновляемым".
Причина | Описание | Средство |
---|---|---|
Инструкция не создается при использовании синтаксиса JDBC 2.0 (или более поздней версии) | В JDBC 2.0 введены новые способы создания инструкций. Если используется синтаксис JDBC 1.0, результирующий набор по умолчанию доступен только для чтения. | Укажите тип результирующего набора и параллелизм при создании инструкции. |
Инструкция создается при помощи TYPE_SCROLL_INSENSITIVE | SQL Server создает статический курсор моментального снимка. Курсор отключается от строк базовой таблицы, чтобы защитить курсор от обновления строк другими пользователями. | Используйте TYPE_SCROLL_SENSITIVE, TYPE_SS_SCROLL_KEYSET, TYPE_SS_SCROLL_DYNAMIC или TYPE_FORWARD_ONLY с CONCUR_UPDATABLE, чтобы не создавать статического курсора. |
Конструкция таблицы исключает курсор KEYSET или DYNAMIC | Базовая таблица не содержит уникальных ключей, позволяющих SQL Server уникально идентифицировать строки. | Добавьте уникальные ключи к таблице, чтобы обеспечить уникальную идентификацию каждой строки. |