Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
answer.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
54.69 Кб
Скачать
  1. Типи неузгодженості даних при відсутності блокувань

Якщо в системі управління базами даних не реалізовані механізми блокування, то при одночасному читанні і зміну одних і тих же даних кількома користувачами можуть виникнути такі проблеми одночасного доступу: проблема забруднення" даних виникає, коли кілька користувачів змінюють одну і ту ж рядок, грунтуючись на її початковому значенні; тоді частина даних буде втрачена, тому що кожна наступна транзакція перезапише зміни, зроблені попередньої. Вихід з цієї ситуації полягає в послідовному внесення змін; проблема "брудного" читання можлива в тому випадку, якщо користувач виконує складні операції обробки даних, що вимагають множинного зміни даних перед тим, як вони знайдуть логічно вірне стан. Якщо під час зміни даних інший користувач буде зчитувати їх, то може виявитися, що він отримає логічно невірну інформацію. Для виключення подібних проблем необхідно робити зчитування даних після закінчення всіх змін; проблема неповторним читання є наслідком неодноразового зчитування транзакцією одних і тих же даних. Під час виконання першої транзакції інша може внести в дані зміни, тому при повторному читанні перша транзакція отримає вже інший набір даних, що призводить до порушення їх цілісності чи логічного неузгодженості; проблема читання фантомів з'являється після того, як одна транзакція вибирає дані з таблиці, а інша вставляє або видаляє рядки до завершення першої. Вибрані з таблиці значення будуть некоректні. Для вирішення перерахованих проблем у спеціально розробленому стандарті визначено чотири рівня блокування. Рівень ізоляції транзакції визначає, чи можуть інші (конкуруючі) транзакції вносити зміни до даних, змінені поточної транзакцією, а також чи може поточна транзакція бачити зміни, зроблені конкуруючими транзакціями, і навпаки. Кожен наступний рівень підтримує вимоги попереднього і накладає додаткові обмеження:

  1. Рівні блокувань за стандартом ansi (чотири).

Для досягнення чотирьох необхідних за стандартом ANSI рівнів ізоляції в SQL Server реалізовані режими блокування, що відповідають наступним видам блокувань: роздільні, виключає, навмисним і блокувань оновлення. Режим блокування визначає, наскільки обмежувальної буде блокування, і які дії дозволено виконувати із заблокованими даними. Розподільні блокування. SQL Server автоматично запитує розподільні блокування при будь-якому читанні даних. Таблиця, сторінка, ключ індексу, окремий рядок - всі ці об'єкти можуть бути закриті розподільним блокуванням. На додаток до цього SQL Server може накладати блокування на діапазони ключів індексу. Це робиться з метою реалізації режиму упорядковуваня (Serializable) при ізоляції транзакцій. Одночасно кілька процесів можуть накласти розподільні блокування на одні і ті ж дані. Але жоден процес не може вимагати виключні блокування для даних, які закриті ррозподіленими блокуванням. Виняток може бути зроблено тільки для процесу, який наклав на ці дані поточне розподільне блокування. Колективне блокування знімається відразу ж, як тільки SQL Server прочитає інформацію. 

Виключні блокування. SQL Server автоматично призначає виключне блокування, коли збирається змінити дані через команди Вставити (Insert), Оновити (Update) або Видалити (Delete). Накласти виключне блокування на певний ресурс даних в кожний момент може тільки один процес. Виключне блокування залишається в силі до завершення транзакції. Тому змінювані дані недоступні будь-яким іншим процесам до тих пір, поки поточна транзакція або успішно завершиться, або виконає відкат. При використанні рівня ізоляції транзакцій читати незафіксовані (Read Uncommitted) інші процеси можуть прочитати дані, закриті виключним блокуванням. Блокування оновлення. Ці блокування не є самостійним видом, а являють собою деякий гібрид роздільних і виключних блокувань. Транзакція накладає блокування оновлення в тих випадках, коли SQL Server повинен змінити дані, але спочатку потрібно виконати в таблиці пошук ресурсу, який підлягає оновленню. Навмисні блокування. Такі блокування не утворюють окремий режим блокування. Термін «навмисне блокування» застосовується для уточнення розглянутих режимів. Іншими словами, можуть існувати навмисно розподільні, навмисно виключні блокування, і навіть навмисні блокування оновлення. Оскільки SQL Server може виконувати блокування на різних рівнях деталізації (тобто на рівні таблиці, сторінки або рядка), потрібен спеціальний механізм, який сигналізував би про те, що деякий компонент ресурсу вже був заблокований. Наприклад, якщо який-небудь процес збирається заблокувати таблицю, то SQL Server повинен бути в змозі визначити, чи не знаходиться вже якийсь рядок або сторінка цієї таблиці в заблокованому стані. Цій меті і служать навмисні блокування.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]