Ескертпе. Өзгерістер журналының файлына (redo log file) жазу
аяқталғанға дейін, транзакция тіркелген болып есептелмейді. Бҧл
механизм істен шыққан кезде тіркелген транзакцияның қалпына
келтірілуіне себепші болады.
12.8.
Oracle қызметтерін шолу
БДҚБЖ Oracle жҧмыс істеу кезінде деректердің біртҧтастығын
қамтамасыз ету, істен шыққаннан кейін дерекқорды қалпына келтіру,
қателіктерді ҧстап қалу жəне т.б. сияқты міндеттердің орындалуын
қамтамасыз ету керек. Бҧл мынадай қызметтермен жҥзеге асырылады:
бақылау нҥктелерін қҧру (checkpointing), журналдау жəне мҧрағаттау.
Бақылау нҥктелерін құру. Бақылау нҥктесін қҧру сигналы DBWR
немесе LGWR ҥрдісінен келіп тҥседі. Бірақ бақылау нҥктесі дегеніміз
не жəне ол не ҥшін қажет?
Деректер блогының барлық өзгертулері блок буферлерінде
болатындықтан, жадтағы деректердің өзгеруі дисктегі осы блоктарда
көрсетіле бермейді.
Кэштеу ҥрдісі соңғы пайдаланылған блок алгоритмі бойынша
жҥргізіледі,
сондықтан
тҧрақты
өзгертілетін
буфер
соңғы
пайдаланылған болып белгіленіп, DBWR ҥрдісі оны дискке жазады.
Бақылау нҥктесі осы буферлер дискке жазылу ҥшін қолданылады.
Барлық лас буферлер міндетті тҥрде дискте сақталу керек.
Бақылау нҥктесі екі режимде орындалуы мҥмкін: қалыпты бақылау
нҥктесі жəне жылдам бақылау нҥктесі.
Қалыпты бақылау нүктесі режимінде лас буферлер реттілікпен
DBWR ҥрдісімен жазылады. Бҧл режимде бақылау нҥктесі аса ҧзақ
орындалады, бірақ жылдам бақылау нҥктесіне қарағанда аз жҥйелік
ресурстарды қозғайды.
Жылдам бақылау нүктесі режимінде DBWR біруақытта бірнеше
буферді жазады. Осындай бақылау нҥктесі өте жылдам орындалады.
Ол енгізу (шығару) жҧмысы тҧрғысынан аса тиімді, бірақ сол уақытта
жҥйенің өнімділігін айтарлықтай азайтады.
Бақылау нҥктелерін жиі орындау істен шығу жағдайында жҥйені
қалпына келтіру ҥшін қажетті уақыттың артуына себепші болады.
Бақылау нҥктесі өзгерістер журналы ауыстырылған кезде автоматты
тҥрде орындалады.
Журналдау және мұрағаттау. Өзгерістер журналы (redo log)
Oracle ДҚ барлық өзгерістерін жазады. Өзгерістер журналын қҧру
мақсаты жҥйенің істен шығу жағдайында жəне деректер файлы
жоғалған жағдайда ДҚ шҧғыл қалпына келтіру мҥмкіндігі болып
табылады. Бҧдан бҧрын жасалған резервтік көшірмелерден деректердің
файлдарын қалпына келтіргеннен кейін, өзгерістер журналының
файлдары (соның ішінде журналдың мҧрағаттық файлдары) барлық
соңғы транзакцияны қайталай алады.
Сөйтіп, деректер файлдары толығымен қалпына келтіріледі.
Өзгерістер журналының файлы толығымен толтырылған кезде,
журнал ауыстырылады жəне LGWR ҥрдісі жаңа файлды бастайды.
Журнал ауыстырылған кезде ARCH ҥрдісі толтырылған файлды
журналдау файлдарының мҧрағатына жазады. Мҧрағаттау аяқталған
кезде, өзгерістер журналының файлы қолжетімді болып белгіленеді.
Өзгерістер журналының мҧрағаттық файлдары сенімді сақталу керек,
себебі олар жҥйені қалпына келтіру ҥшін қажет болуы мҥмкін.
12.9. Oracle-
дегі триггерлер
Триггерлерді, сақталатын рəсімдерді жəне жай ғана скрипттерді
қҧру ҥшін (Oracle-де олар атаусыз блоктар деп аталады) Oracle-дің өз
тілі қҧрылған. Бҧл тіл PL/SQL (Program Language SQL) деп аталады.
Әрбір кесте ҥшін 12 триггер қҧруға болады. Триггердің шаблоны
мынадай:
CREATE TRIGGER [name] (триггерді шақыру оқиғасы)...
(триггерді шектеу міндетті емес)
BEGIN
(триггердің əрекет етуі)
END;
Триггерді анықтау кезінде қанша рет орындалу керектігін көрсетуге
болады: əрбір өзгертілетін жол ҥшін (row trigger) немесе қанша жол
өзгертілетініне тəуелсіз (statement trigger) барлық орындалатын тіркес
ҥшін бір рет.
Row trigger — триггердің жиі пайдаланылатын тҥрі. Әрбір жол
ҥшін бір рет орындалады. Мысалы, егер SQL-тіркес UPDATE кестедегі
бірнеше жолды жаңартса, онда триггер UPDATE тіркесімен
өзгертілетін əрбір жол ҥшін шақырылады. Егер тіркес бірде бір жолға
əсер етпесе, онда триггер шақырылмайды.
Statement trigger — бірде бір жол өзгертілмесе де, кестедегі
өзгертілген жолдар санына тəуелсіз шақырылады. Мысалы, егер
DELETE тіркесі кестеден бірнеше жолды жойса, онда DELETE тіркесі
деңгейінің триггері кестеден қанша жол жойылатынына тəуелсіз бір
рет қана шақырылады.
Триггердің айқындау кезінде тіркеске дейін немесе кейін - (trigger
timing) триггердің орындалу сəтін көрсету керек. BEFORE жəне
AFTER тіркес триггерлеріне жəне жол триггерлеріне қолданбалы.
INSTEAD-OF (орнына) — Oracle қолданатын триггердің тағы бір
тҥрі.
INSTEAD-OF триггерлері тек Oracle8i редакциясында қолжетімді.
Олар көп кестелі жəне объектті көріністерде пайдаланылуы мҥмкін.
Олар басқа триггерлерге қарағанда DML-тіркестері (INSERT, UPDATE
жəне DELETE) орындаудың орнына қолданылады.
Көріністі INSERT, UPDATE жəне DELETE көмегімен қалыпты
кесте ретінде тҥрлендіруге болады жəне тиісті өзгеріс ҥшін INSTEAD-
OF триггер іске қосылады. INSTEAD-OF триггерлер əрбір өзгертілетін
жол ҥшін активтендіріледі.
INSTEAD-OF триггерлерінің мҥмкіндіктерін көрсету ҥшін əрбір
бөлімнің менеджерлерін атап өтетін триггерді (view manager_info)
жасаймыз:
CREATE VIEW manager_info AS
SELECT d.deptno, d.deptname, e.empno, e.empname
FROM emp e, dept d
WHERE e.empno = d.manager_num;
Енді көріністегі ендірмені өңдейтін INSTEAD-OF триггерін
айқындаймыз.
view
manager_info-ге
ендірме
dept
кестенің
manager_num бағанын жаңарту операциясына трансляциялануы
мүмкін.
Триггерде бөлім менеджері көрсеткен бөлімде ең болмағанда бір
жҧмысшы жҧмыс істеу керектігін көрсететін шектеуді айқындауға
болады.
CREATE TRIGGER manager_info_insert
INSTEAD OF INSERT ON manager_info
--жаңа менеджер туралы ақпарат
REFERENCING NEW AS n
FOR EACH ROW
DECLARE
empCount NUMBER;
BEGIN
/* Бірінші тексеру бөлім жҧмысшыларының саны бірден артық
екенін растау ҥшін орындалады */
SELECT COUNT(*) INTO empCount
FROM emp e
WHERE e.deptno =:n.deptno;
/* Егер жҧмысшы жеткілікті болса, онда оны менеджер қылу
керек*/
IF empCount >= 1 THEN
UPDATE dept d SET
manager_num = :n.empno
WHERE d.deptno = :n.deptno;
END IF;
END;
Достарыңызбен бөлісу: |