Основные сведения об управлении параллелизмом
Под управлением параллелизмом подразумевают различные техники, которые используются для сохранения целостности базы данных, когда несколько пользователей обновляют строки одновременно. Неверный параллелизм может привести к проблемам, таким как чтение фантомных данных, чтение недействительных данных и неповторяемые чтения. Драйвер Microsoft JDBC для SQL Server предоставляет интерфейсы для всех методов параллелизма, используемых SQL Server для устранения этих проблем.
Примечание.
Дополнительные сведения о параллелизме SQL Server см. в разделе "Управление параллельным доступом к данным".
Замечания
Драйвер JDBC поддерживает следующие типы параллелизма.
Тип параллелизма | Характеристики | Блокировки строк | Description |
---|---|---|---|
CONCUR_READ_ONLY | Только чтение | No | Обновление посредством курсора не разрешается, недопустима блокировка в отношении строк, входящих в результирующий набор. |
CONCUR_UPDATABLE | Оптимистическая, чтение-запись | No | База данных считает состязание строк нежелательными, но возможными. Целостность строк проверяется сравнением отметки времени. |
CONCUR_SS_SCROLL_LOCKS | Пессимистическая, чтение-запись | Да | База данных считает состязание строк вероятным. Целостность строк обеспечивается блокировкой строк. |
CONCUR_SS_OPTIMISTIC_CC | Оптимистическая, чтение-запись | No | База данных считает состязание строк нежелательными, но возможными. Целостность строк проверяется сравнением отметки времени. Для SQL Server 2005 (9.x) и более поздних версий сервер изменит это на CONCUR_SS_OPTIMISTIC_CCVAL если таблица не содержит столбец метки времени. Для SQL Server 2000 (8.x), если в базовой таблице имеется столбец метки времени, используется ПАРАМЕТР ОПТИМИСТИЧНОЕ УПРАВЛЕНИЕ ВЕРСИЯМИ СТРОК, даже если заданы ОПТИМИСТИЧЕСКИЕ ЗНАЧЕНИЯ WITH. Если указан параметр OPTIMISTIC WITH ROW VERSIONING, и таблица не содержит отметок времени, используется параметр OPTIMISTIC WITH VALUES. |
CONCUR_SS_OPTIMISTIC_CCVAL | Оптимистическая, чтение-запись | No | База данных считает состязание строк нежелательными, но возможными. Целостность строк проверяется сравнением данных строк. |
Результирующие наборы не обновляются
Обновляемый результирующий набор ― это результирующий набор, в котором строки могут быть вставлены, обновлены и удалены. В следующих случаях SQL Server не может создать обновляющийся курсор. и формирует исключение "Результирующий набор не является обновляемым".
Причина | Description | Средство |
---|---|---|
Инструкция не создается при использовании синтаксиса 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 однозначно идентифицировать строку. | Добавьте уникальные ключи к таблице, чтобы обеспечить уникальную идентификацию каждой строки. |