Як Oracle обробляє кілька одночасних ВСТАВКІВ проти однієї таблиці


8

Я намагаюся зрозуміти Oracle 11g трохи ближче. Моє запитання просте: як Oracle обробляє два сеанси, які намагаються одночасно вставити записи в одну таблицю.

Наприклад, INSERT A працює о 13:00 проти таблиці 1. На завершення знадобиться 5 хвилин. INSERT B виконується о 13:02 проти таблиці 1. На завершення знадобиться 1 хвилина.

Що станеться? Чи буде виконуватися черга Oracle INSERT B після завершення роботи INSERT A? Чи буде INSERT B працювати одночасно з INSERT A?

Дякую!


6
нічого не б'ється, намагаючись переконатися сам :-)
Джек каже спробувати topanswers.xyz

Абсолютно. Однак я не впевнений, як створити запит, який навмисно займе 5 хвилин для його завершення.
Дастін

3
вставити багато даних? insert into foo(id) select level from dual connect by level<1000000(збільшуючи кількість нулів одна за одною, поки вона не буде досить повільною)
Джек каже спробувати topanswers.xyz

Відповіді:


4

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

У цьому відношенні вони оперують за незапущеним столом, як це видно з їх сеансу. Така поведінка описана в публікації stackoverflow нижче.

/programming/3194999/dml-by-multiple-users-commit-scenarios-in-oracle


2

Можливо, корисно поглянути на управління Oracle Transaction Management (Концепції) або SQL-обробку для розробників додатків (Розширений посібник для розробників додатків)

Ви можете дослідити поведінку Oracle, відкривши сеанс за допомогою sqlplus, settitng autocommit of, виконавши

вимкнути автокомісію

та виконання вставки

вставити в таблицюA (...) значення (...);

Залиште цей сеанс відкритим і запустіть сеанс sqlplus в іншому вікні, встановіть автоматичне вимкнення і вимкніть іншу вставку. Обидві транзакції будуть активними, поки ви не закриєте їх з фіксацією (або відкатом).

У більшості ситуацій не дуже важливо вимикати автокомісію, оскільки це типовий для sqlplkus, якщо ви цього не змінили.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.