Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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 заключвания, веднага ще върне неуспех (с изключение на същата СЕСИЯ), нека направим прост експеримент, вмъкнете данни в таблицата 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 дни, този параметър може да бъде зададен глобално или на ниво СЕСИЯ.
SESSION2 >покажи параметър ddl_lock_timeout ТИП ИМЕ СТОЙНОСТ ----------------------- ----------- ------ ddl_lock_timeout ЦЯЛО 0 SESSION2 >alter сесийно 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 >alter таблица stream добави jpg_path varchar2(255) по подразбиране '/home/оракул/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >ангажиране; Коммитът е завършен. SESSION2 >alter таблица stream добави 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