Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 11117|Відповідь: 0

[Джерело] ORACLE 11g Нові функції — дозволяє DDL-замкам чекати на DML-блокування

[Копіювати посилання]
Опубліковано 26.11.2014 15:54:15 | | |
Я також писав про це ранішеORACLEСтаття про 11g нових функцій, заразORACLE11G став мейнстрімомORACLEВерсія бази даних, розумійте та вивчайтеORACLEНові функції 11G є ключовими, і я тежORACLEДля початківців у нових функціях 11G я хотів би поділитися своїм процесом навчання та досвідом тут.
У цій статті головним зазначається, що:ORACLEНова функція 11g, яка дозволяє замкам DDL чекати на замки DML, що також є темою, яку поділяв пан Чжан Лей (камус) на заході ACOUG 30 червня.
У версіях до 11g, за замовчуванням, блокування DDL не чекають блокування DML, і якщо виконати операції DDL над таблицею з блокуваннями DML, одразу виникне помилка (крім тієї ж SESSION). Давайте проведемо простий експеримент, вставимо дані в таблицю STREAM у SESSION1, не надсилайте, у цей момент таблиця STREAM матиме блокування DML, виконаємо операцію TRUNCATE таблиці STREAM у SESSION2 і одразу поверне невдачу:
SESSION1 >вставити у Stream Select * з DBDREAM; Створено 10 рядків. SESSION2 >обрізати потік столу; Потік таблиці урізати * ПОМИЛКА в рядку 1: ORA-00054: ресурс зайнятий і отриманий з вказаним NOWAIT або тайм-аут закінчився у версії 11g,ORACLEВведено DDL_LOCK_TIMEOUT параметр, який дозволяє блокуванням DDL чекати на блокування DML, які контролюють час очікування блокувань DML, за секунди за замовчуванням дорівнює 0, тобто блокування DDL не чекають на блокування DML, максимальне значення становить 1 мільйон, тобто 11,5 днів, цей параметр можна встановити глобально або на рівні SESSION.
SESSION2 >показати параметр ddl_lock_timeout ЗНАЧЕННЯ ТИПУ ІМЕНІ ----------------------- ----------- ------ ddl_lock_timeout ЦІЛЕ ЧИСЛО 0 SESSION2 >alter session set ddl_lock_timeout=2000000; ПОМИЛКА: ORA-00068: недійсне значення 2000000 для параметра ddl_lock_timeout, має бути між 0 і 1000000. Нижче наведено вплив наступного параметра DDL_LOCK_TIMEOUT, а також взято наведену вище таблицю STREAM як приклад, поточна таблиця STREAM все ще має блокування DML, у SESSION2 буде DDL_LOCK_ TIMEOUT встановлюється на 60 секунд, після чого виконується операція TRUNCATE, і помилка не повертається одразу, а чекатиме 60 секунд, і якщо блокування DL таблиці STREAM не буде звільнено протягом 60 секунд, відмова повернеться.
SESSION2 >alter session set ddl_lock_timeout=60; Сесію змінено. SESSION2 >встановіть таймінг на SESSION2 >обрізати потік таблиці; --На цьому етапі SESSION2 призупиняється, чекає, поки SESSION1 розблокує DML-блокування протягом 60 секунд, повернення не вдалося через 60 секунд обрізати потік таблиці * ПОМИЛКА на рядку 1: ORA-00054: ресурс зайнятий і отримати з вказаним NOWAIT або тайм-аут минув Минуло: 00:01:00.01 Поява DDL_LOCK_TIMEOUT параметрів значно спрощує роботу DBA, наприклад, ми хочемо додати поле до таблиці, але ця таблиця містить багато операцій DML, і ми не можемо використати метод ALTER SYSTEM KILL SESSION для завершення цих операцій, тому якщо ми хочемо додати поля до цієї таблиці, нам потрібно виконувати операцію додавання полів безліч разів або писати скрипти для цієї роботи, і тепер у нас є DDL_ LOCK_TIMEOUT параметрі потрібно лише трохи збільшити значення цього параметра, і не потрібно турбуватися про виконання SQL, давайте продемонструємо цей процес нижче.
SESSION2 додати поля:
SESSION2 >змінити таблицю потік додати jpg_path varchar2(255) за замовчуванням '/home/Оракул/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >зобов'язання; Комміт завершено. SESSION2 >змінити таблицю потік додати jpg_path varchar2(255) за замовчуванням '/home/Оракул/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/Оракул/ 2 18-0221-003 1 /home/Оракул/ 3 18-0221-003 2 /home/Оракул/ 4 18-0221-003 3 /home/Оракул/ 5 18-0223-005 1 /home/Оракул/ 6 18-0223-005 2 /home/Оракул/ 7 18-0223-005 3 /home/Оракул/ 8 18-0223-005 4 /home/Оракул/ 9 18-0223-005 5 /home/Оракул/ 10 18-0223-005 6 /home/Оракул/ 10 rows selected.




Попередній:Практичне SQL-твердження: оцінка дати
Наступний:Oracle ORA-12541: обхідний шлях TNS: без помилки слухача
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com