Э. В. Фуфаев, Д. Э. Фуфаев



жүктеу 10,13 Mb.
Pdf просмотр
бет75/93
Дата19.11.2018
өлшемі10,13 Mb.
#21568
түріОқулық
1   ...   71   72   73   74   75   76   77   78   ...   93

Ескертпе.  Өзгерістер  журналының  файлына  (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; 


жүктеу 10,13 Mb.

Достарыңызбен бөлісу:
1   ...   71   72   73   74   75   76   77   78   ...   93




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау