Reševanje časovno zahtevnih opravil z orodjem ORACLE

Size: px
Start display at page:

Download "Reševanje časovno zahtevnih opravil z orodjem ORACLE"

Transcription

1 Ervin Črešnjovnjak Reševanje časovno zahtevnih opravil z orodjem ORACLE Diplomsko delo Maribor, junij 2011

2

3 I Diplomsko delo univerzitetnega študijskega programa REŠEVANJE ČASOVNO ZAHTEVNIH OPRAVIL Z ORODJEM ORACLE Študent: Študijski program: Smer: Mentor: Lektorica: Ervin Črešnjovnjak UNI računalništvo in informatika programska oprema red. prof. dr. Marjan Mernik, uni. dipl. inž. rač. in inf. Ingrid Hari, uni. dipl. slov. Maribor, junij 2011

4 II

5 III ZAHVALA Zahvaljujem se mentorju red. prof. dr. Marjanu Merniku za usmerjanje pri nastanku diplomskega dela. Prav tako se zahvaljujem asist. dr. Tomažu Kosarju, ki me je ves čas nastanka mojega diplomskega dela strokovno vodil in mi bil v veliko pomoč. Posebno zahvalo posvečam tudi družini, ki mi je stala ob strani, me spodbujala pri študiju in pri nastajanju diplomskega dela.

6 IV REŠEVANJE ČASOVNO ZAHTEVNIH OPRAVIL Z ORODJEM ORACLE Ključne besede: ORACLE, PL/SQL, optimizacija opravil, Oracle Forms UDK: (043.2) Povzetek V diplomskem delu smo obravnavali okolje ORACLE, preučili najpogostejše pasti, težave pri kodiranju algoritmov, opravil v jeziku PL/SQL, katerih zaželjeno je kar se da hitro izvajanje, posledično optimalno izrabljanje razpoložljivih računalniških virov in našli odgovore, koncepte, modele, ki so privedli do pohitritev oz. optimalnega izvanjanja opravil. Ker smo potrebovali za potrebe optimizacij tudi določene gradnike jezika PL/SQL, smo jih preučili in na kratko predstavili, predvsem njihov namen uporabe ter izrabo njihovih specifičnih lastnosti za potrebe doseganja želenih optimizacij. Osredotočili smo se na delo z nizi podatkov, predvsem na primerjavo nizov med seboj, na pohitritev opravil z razdeljevanjem samega opravila na več pod opravil, ki so se izvajale paralelno oz. sočasno, na mehanizme, gradnike, ki so za dosego tega cilja potrebni, preučili optimizacijo prekinitve časovno zahtevnega opravila za potrebe opravljanja še dodatnih opravil z metodo vpeljave čakalnih vrst in proženja teh dodatnih opravil v ozadju in preučili možnost izvajanja poslovnih procesov znotraj okenskega okolja Oracle Forms v ozadju.

7 V PROBLEM SOLVING OF TIME CRITICAL TASKS WITH TOOL ORACLE Ključne besede: ORACLE, PL/SQL, Tasks Optimization, Oracle Forms UDK: (043.2) Abstract In this diploma we discussed about ORACLE environment, to analize the most common problems by coding algorithms, tasks in PL/SQL language, where optimal execution time and usage of computer resources is crucial. To get optimal utilization of available computer resources, we developed concepts, models, which can deliver optimal execution of tasks. For developing of optimization models, concepts, several constructs of PL/SQL language were needed, which were briefly presented and their special features required for optimization process exposed. We focused specially on string comparision, execution time optimization of tasks with parallel execution of independent subtasks, presentation of constructs needed for this objective, solving problems of adding extra operation to time critical task with queuing and execution of added operation in background and explore possibility of Oracle Forms environment to run business process in background.

8 VI VSEBINA 1 UVOD NEKAJ BESED O OPTIMIZACIJAH JEZIK PL/SQL JEZIK ORACLE SQL OSNOVNA ZGRADBA IN DELOVANJE JEZIKA PL/SQL OPTIMIZACIJE V JEZIKU PL/SQL JARO-WINKLER ALGORITEM Optimizacija algoritma SIMULACIJA VEČNITENJA Predstavitev paketa DBMS_SCHEDULER Razbitje opravila na podopravila in sočasno izvajanje podopravil Simulacija niti Nadzorni mehanizmi Čakalne vrste in proženje niti v ozadju Izvedba v okolju Oracle Forms PRAKTIČNI PRIMERI UPORABE ISKANJE ZADETKOV NA ČRNI LISTI ZA POTREBE PREPREČEVANJE PRANJA DENARJA PREGLED KOMITENTOV NA ČRNI LISTI KNJIŽENJE PLAČILNIH NALOGOV IN PREVERJANJE PREJEMNIKA S ČRNO LISTO SKLEP VIRI, LITERATURA... 78

9 VII 8 PRILOGE SEZNAM SLIK SEZNAM PREGLEDNIC SEZNAM PRIMEROV NASLOV ŠTUDENTA KRATEK ŽIVLJENJEPIS... 82

10 VIII UPORABLJENE KRATICE ANSI (American National Standards Institute) BS DB (Database) DBMS (Database Management System) DCL (Data Control Language) DDL (Data Definition Language) DML (Data Manipulation Language) DQL (Data Query Language) EU FBE (Banking Federation of the EU) IBM (Internation Business Machines) ISO (International Standard Organization) PL (Procedural Language) PPD PPDFT RDBMS (Relational Database Management System) RS SQL (Structured Query Language) TCL (Transaction Control Language) XML (Extensible Markup Language) ZPPDFT Ameriški nacionalni inštitut za standarde Banka Slovenije Podatkovna baza Sistem za upravljanje s podatkovno bazo Jezik za nadzor podatkov Jezik za definiranje podatkov Jezik za ravnanje s podatki Jezik za poizvedbe Evropska unija Evropsko bančno združenje Korporacija IBM Mednarodna organizacija za standarde Proceduralni jezik Preprečevanje pranja denarja Preprečevanje pranja denarja in financiranja terorizma Sistem za upravljanje z relacijsko podatkovno bazo Republika Slovenija Strukturirani povpraševalni jezik Jezik za nadzor transakcij Razširljiv označevalni jezik Zakon o preprečevanju pranja denarja in financiranja terorizma

11 Reševanje časovno zahtevnih opravil z orodjem ORACLE 1 1 UVOD Velikokrat se srečamo z opravili, pri katerih je ključnega pomena čim hitrejše izvajanje in optimalno izkoriščanje razpoložljivih virov. Da bi opravilo kar se da pohitrili, se lotimo tako imenovane optimizacije. Optimizacija ni nujna zgolj za pohitritev opravil, pri katerih je ključen čas izvajanja, ampak je optimizacija tudi dobra, kot tudi zaželena praksa samega kodiranja, ki bi jo moral osvojiti vsak razvijalec algoritmov oz. programske opreme. Ker je v ORACLE okolju veliko aplikacij že implementiranih, kot tudi veliko še v nastajanju, predvsem v jeziku PL/SQL in okenskem okolju Oracle Forms, smo v diplomski nalogi vstopili v»svet«oracle, se spoznali s programskim jezikom PL/SQL in okenskim orodjem Oracle Forms s ciljem razvoja konceptov, modelov, ki bi privedli do pohitritev in optimalnega izvajanja opravil znotraj okolja ORACLE. Postavili smo se v realne težave in izzive razvijalcev programske opreme v jeziku PL/SQL in jih z različnimi prijemi razrešili, optimizirali ter na ta način razvili iskane koncepte, modele. Za dosego tega cilja, bi lahko razvoj rešitev razdelili nekako v tri faze. V prvi fazi smo se poglobili v sam jezik PL/SQL, v njegove lastnosti, obstoječe gradnike, razsežnosti, ki smo jih v drugi fazi nadgradili z znanjem in izkušnjami drugih jezikov, predvsem objektno usmerjenih jezikov. Tako smo v jeziku PL/SQL razvili nove gradnike, ki razširjajo zmožnosti jezika PL/SQL. S simulacijo določenih dodatnih funkcionalnosti objektno usmerjenih jezikov, Ki jih jezik PL/SQL prej ni imel, se niso zgolj razširile funkcionalnosti jezika PL/SQL, ampak so se omogočile tudi določene optimizacije opravil. Te so bile prej znane le za objektno usmerjene jezike, ki posledično spodbujajo večjo mero kreativnosti pri implementaciji storitev razvijalcem programske opreme v jeziku PL/SQL. Tretja, zadnja faza, predstavlja razširitev, prenos novo nastalih, dodatno razvitih zmožnostih jezika PL/SQL na okensko razvojno okolje Oracle Forms. Pri dostopanju in manipulaciji podatkov s strukturiranim povpraševalnim jezikom SQL, v našem primeru s strani podjetja ORACLE nekoliko razširjenim povpraševalnim jezikom PL/SQL, ki se shranjujejo v relacijsko podatkovno bazo, je običajno velika frekvenca dela

12 Reševanje časovno zahtevnih opravil z orodjem ORACLE 2 oz. manipulacije z nizi znakov. Velikokrat je za implementacijo določenih storitev v jeziku PL/SQL potrebna primerjava nizov znakov med seboj oz. iskana ocena njihove medsebojne podobnosti, kar seveda ni tako enostavno opravilo. Zaradi te težnje smo se lotili implementacije že zelo znanega algoritma Jaro-Winkler, ga implementirali v jeziku PL/SQL ter ga v kasnejši fazi še nekoliko optimizirali. Vse to z namenom, da bi omogočili v jeziku PL/SQL storitve za kakovostno medsebojno primerjavo nizov med seboj. Glede na predhodna dela in izkušnje v objektno usmerjenih jezikih, smo v jeziku PL/SQL pogrešali prednosti dela z nitmi. Predvsem smo si zaželeli, da bi lahko poljubno opravilo razdelili na več neodvisnih odsekov in jih izvajali paralelno oz. sočasno ter tako pohitrili izvajanje samega opravila. Z določenim raziskovanjem jezika PL/SQL smo prišli do ideje, kako bi lahko simulirali nitno delovanje v jeziku PL/SQL. To smo udejanjili ter implementirali storitve, mehanizme in gradnike za delo z nitmi oz. njihovo simulacijo v jeziku PL/SQL. Velikokrat tudi to ni dovolj, oz. ni možna razdelitev opravila na pod opravila. Kaj pa če je potrebno že na tako časovno zahtevno opravilo obesiti še dodatno breme, opravila? Kaj tedaj? Za potrebe reševanja tovrstnih problemov, smo vpeljali v jezik PL/SQL koncept čakalnih vrst in izvajanje teh dodatnih bremen, opravil v ozadju. Ker se nismo želeli sprijazniti, da vse te novo nastale zmožnosti jezika PL/SQL, le ne bi imele omejeno domeno uporabe zgolj za potrebe razvoja poslovne logike v relacijski podatkovni bazi, smo z uporabo določenih gradnikov tudi omogočili njihovo uporabo na nivoju oken, v okenskem razvojnem okolju Oracle Forms. Za realno implementacijo oz. praktično demonstracijo uporabe teh novonastalih storitev jezika PL/SQL, smo se osredotočili na bančne storitve, kjer je trenutno velika potreba po implementaciji storitev za preprečevanje pranja denarja. Tako je bil naš zadan cilj implementacija segmenta storitev za preprečevanja pranja denarja, kjer je čas izvajanja ključen in pojavljena nujna potreba po optimizacijah. Ukvarjali smo se s problemom primerjanja poljubnega imena z zapisom na črni listi, na kateri so zavedene osebe, s katerimi je prepovedano sklepati poslovno razmerje oz. kakršnokoli poslovanje, z iskanjem zadetkov na črni listi velike gmote komitentov in z optimizacijo vpeljave dodatnega opravila/bremena na storitev knjiženja plačilnih nalogov ter iskanje zadetkov na črni listi prejemnikov plačilnih nalogov.

13 Reševanje časovno zahtevnih opravil z orodjem ORACLE 3 Diplomsko delo smo razdelili na šest poglavij. Uvodnemu delu sledi nekaj besed o optimizacijah, kjer spoznamo pomen samega pojma optimizacija, nato pa že v naslednjem, tretjem poglavju, vstopimo v»svet«oracle. V tretjem poglavju predstavimo jezik PL/SQL, ki predstavlja središče našega ustvarjanja in je njegovo poznavanje ključnega pomena. Največji poudarek smo namenili četrtemu poglavju, ki je najobsežnejše in tudi najpomembnejše poglavje. V četrtem poglavju predstavimo optimizacije v jeziku PL/SQL, kjer so predstavljene rešitve, koncepti, modeli optimizacij implementiranih v jeziku PL/SQL. Ker so za dosego cilja, razvoja konceptov, modelov optimizacij bili potrebni določeni gradniki jezika PL/SQL, jih tudi tukaj na kratko predstavimo, predvsem njihov namen uporabe ter izrabo njihovih specifičnih lastnosti za potrebe doseganja želenih optimizacij. V tem poglavju smo zajeli dve ključni podpoglavji o implementiranih optimizacijah v jeziku PL/SQL, podpoglavje Jaro-Winkler algoritem, kjer smo obdelali primerjavo nizov znakov med seboj in podpoglavje simulacija večnitenja, funkcionalnost, ki je prenesena iz objektno usmerjenih jezikov. Peto poglavje predstavlja praktični del diplomskega dela, praktične primere uporabe našega raziskovanja, kjer smo se osredotočili na bančne storitve, na implementacijo storitev za preprečevanje pranja denarja. V zadnjem, šestem poglavju smo povzeli cilje, dosežke, ki smo jih z implementacijo zadanih storitev v jeziku PL/SQL pridobili in podali sklepne misli.

14 Reševanje časovno zahtevnih opravil z orodjem ORACLE 4 2 NEKAJ BESED O OPTIMIZACIJAH V računalništvu je programska optimizacija ali optimizacija programske opreme proces, s katerim spremenimo oz. izpopolnimo sistem programske opreme, tako da z določenih pogledov, ki so za nas v tistem trenutku ključnega pomena, deluje bolj učinkovito oz. zaseda manj razpoložljivih virov. Pravimo, da je računalniški program optimiziran, če se izvaja hitreje ali je zmožen uporabe manjše kapacitete računalniškega pomnilnika ali drugih računalniških virov. Kakorkoli se večkrat zamenjuje izraz optimizirano delovanje z izrazom optimalnega delovanja, redkokdaj z optimizacijo dosežemo optimalno delovanje določenega procesa. Optimiziran sistem bi lahko bil kvečjemu optimalen v specifičnem okolju delovanja, oz. aplikaciji za katero je bil optimiziran in bi tako lahko v drugem okolju bil le redkokdaj tudi optimalen. Tudi interesi lahko odigrajo ključno vlogo, npr. kaj za nekoga glede na njegove cilje in interese pomeni optimalno delovanje in posledično kakšna optimizacija je za to potrebna, lahko pa tudi odigra ključno vlogo samo okolje delovanja. Včasih je za nekoga, oz. za neko okolje najpomembnejše oz. primarno zmanjšanje časa izvedbe določenega opravila, kljub ceni večje porabe pomnilnika. V nekaterih primerih pa se osredotočimo spet na čim manjšo porabo pomnilnika in temu primerno algoritem nekoliko upočasnimo. Zaradi tega interesi in razpoložljivost virov odigrajo ključno vlogo pri optimizacijah sistemov, ker običajno ni moč pokriti vseh pogledov, interesov in so tako tudi inženirji sistemov primorani sklepati kompromise, kaj je za določen sistem in potrebe v tistem trenutku res optimalno.

15 Reševanje časovno zahtevnih opravil z orodjem ORACLE 5 Slika 2.1: Cilj procesa optimizacije. Proces optimizacije lahko vpeljemo na različnih nivojih [22]: model Predstavlja optimizacijo na najvišjem nivoju, optimizacijo v fazi arhitekturne zasnove sistema. Arhitekturna zasnova sistema ima največji vpliv na uspešnost grajenega sistema, tukaj lahko največ pridobimo z izbiro najustreznejšega, najučinkovitejšega algoritma in s samo njegovo implementacijo, s pisanjem kvalitetne programske kode. Izbira algoritma je ključnega pomena pri načrtovanju in je tudi prva stvar, o kateri se pri grajenju modela odločamo. V nekaterih primerih optimizacija temelji na izpopolnjenih algoritmih, ki so posebej namenjeni, grajeni za določene specifične primere, in so tako za potrebe sklepanja določenih kompromisov, uporabljeni določeni»triki«v njihovi implementaciji. Tak algoritem pa je tudi težje razumljiv in na koncu lahko vsebuje več napak. izvorna koda Izboljšanje učinkovitosti algoritmov dosežemo tudi z izogibanjem se pisanja nekakovostne programske kode in z izogibanjem t.i.»slowdowns 1 «. 1 Izogibanje»slowdowns«pomeni izogibati se gradnikom programskega jezika in konceptom gradnje programske kode, ki bi lahko privedli do nazaželenega upočasnjevanja pri izvajanju programske kode.

16 Reševanje časovno zahtevnih opravil z orodjem ORACLE 6 prevajalnik Prevajalnik s fazo optimizacije 2 poskuša zagotoviti optimiziranost izvršljivega programa vsaj do te mere, kolikor lahko zagotovi na podlagi zbranih informacij o strukturi programa in njegovega podatkovnega toka. zbirni jezik Pisanje kode na najnižjem nivoju, z uporabo zbirnega jezika narejenega za specifično strojno opremo in ob izrabi celotnega razpoložljivega repertoarja strojnih navodil, ki jih ponuja zbirnik, lahko vodi do najbolj učinkovite in kompaktne kode. Zaradi tega so predvsem operacijski sistemi za vgrajene sisteme, pisani v zbirnem jeziku, medtem ko programi običajno niso, razen mogoče krajših. Programi so v večini zapisani v višje nivojskih programskih jezikih 3 in potem prevedeni v zbirni jezik, kjer so potem bili samo dodatno izpopolnjeni, optimizirani v zbirnem jeziku. Dandanes je ob uporabi modernih prevajalnikov in tolikšno kompleksnostjo kot jo ponujajo današnji računalniški procesorji, že zelo težko napisati kodo, ki bi bila bolj optimizirana kot jo pa generirajo prevajalniki. Tudi zato se le redkokdaj zatečemo k dodatni optimizaciji na tem nivoju. Z drugega vidika pa tudi velikokrat optimizacije na tem nivoju niso dobrodošle, kajti optimizacija za specifično strojno opremo bi bila namenska programska oprema za določeno vrsto računalniških naprav, običajno pa to ni prioriteta, prej je prioriteta doseči zmožnost izvajanja programa na več različnih računalniških napravah. 2 Optimizacija prevajalnika [3] je proces s katerim se izhod prevajalnika izboljša, tako da se zminimizirajo ali maksimizirajo določeni atributi izvedljivega programa. Najpogostejša zahteva je, da se zmanjša čas, ki je potreben za izvršitev programa. 3 Višjenivojski programski jeziki [29] so programski jeziki, ki so približani programerju in imajo veliko že vgrajenih, predpripravljenih knjižnic, gradnikov za lažji in hitrejši razvoj programske opreme. So prenosljivi in niso odvisni od interne strojne kode konkretnega računalnika in se s pomočjo prevajalnika ali interpreterja prevedejo v strojni jezik dotične računalniške naprave, kjer se lahko šele potem izvajajo.

17 Reševanje časovno zahtevnih opravil z orodjem ORACLE 7 v času izvajanja Da bi presegli zmožnosti klasičnih prevajalnikov, imajo»just-in-time 4 «prevajalniki in programerji zbirnega jezika, omogočeno dinamično spreminjanja določenih parametrov za potrebe optimiziranja v času izvajanja. Poznamo platformno 5 odvisne in neodvisne optimizacije ter temu primerne tudi tehnike optimizacije programske kode. Platformno neodvisne tehnike so učinkovite na več ali manj vseh platformah, medtem ko platformno odvisne pa zgolj na specifičnih platformah, s specifičnimi lastnostmi. Včasih so tudi omejene zgolj na eno platformo ali celo na en tip računalniškega procesorja. Platformno neodvisne tehnike optimizacij se pojavljajo na nivoju prevajanja in vključujejo osnovne tehnike optimizacije (optimizacije teka zank, redukcija klicev podprogramov, optimizacija učinkovitosti rutin za delo s pomnilnikom, redukcija pogojnih stavkov, itd.), ki imajo enak vpliv optimiziranosti na več ali manj vse tipe računalniških procesorjev in arhitektur. Osnovni cilj platformno neodvisnih tehnik je optimizacija skozi postopek zmanjšanja dolžin inštrukcij potrebnih za izvedbo programa in zmanjšana, optimizirana, uporaba delovnega pomnilnika. Po drugi strani pa je za platformno odvisne tehnike značilno razporejanje inštrukcij, paralelizem inštrukcij in podatkov ter optimizacija delovanja predpomnilnika (ponastavljanje parametrov, ki se razlikujejo glede na različne platforme), ki je specifična za določeno platformo. Glede na tip računalniškega procesorja, je lahko optimalna razporeditev inštrukcij tudi različna. 4»Just-in-time«prevajanje (JIT) [7] ali dinamično prevajanje, je metoda, s pomočjo katere lahko izboljšamo zmogljivost izvajanja računalniških programov. Računalniški programi so imeli dva načina izvajalne operacije, interpretirano in statično. Interpretirana metoda prevaja program iz višjenivojskega jezika v strojni jezik sproti med izvajanjem, medtem ko statična enkrat pred samim izvajanjem.»just-in-time«prevajanje pa je nekakšen hibrid, kjer se koda prevaja sproti in shranjuje v predpomnilnik, z namenom zmanjšanja vpliva na zmogljivost izvajanja. 5 Pod platformo razumemo računalniški sistem, s specifično arhitekturo, v katero je povezan določen tip računalniškega procesorja, tip delovnega pomnilnika, mogoče tudi določen tip predpomnika, vhodno/izhodne enote, itd. Platforma je tudi lahko označena z določenim tipom operacijskega sistema.

18 Reševanje časovno zahtevnih opravil z orodjem ORACLE 8 Ocena učinkovitosti algoritma Računske naloge je možno na več načinov izvesti, implementirati in posledično doseči različne učinkovitosti. Poglejmo si naslednja dva primera izračuna vsote vseh celih števil med 1 in N. Primer 1: Izračun vsote celih števil med 1 in N z zanko Primer 2: Izračun vsote celih števil med 1 in N s formulo Drugi primer smo preoblikovali, tako da smo zanko za izračun vsote nadomestili z uporabo matematične formule, ki nam prav tako vrne enak rezultat. Tako smo opravili optimizacijo izračuna vsote celih števil med 1 in N, ampak velja poudariti, da optimizirana verzija algoritma (primer 2) ni vedno optimalnejša od prve verzije (primer 1). Če bi bil N zelo malo celo število in bi uporabljena arhitektura sistema, strojna oprema hitreje opravljala operacijo vsote kot pa operacije množenja in premikanje bitov (deljenje), bi bila optimizirana verzija celo na koncu počasnejša, kar pa navaja platformno odvisnost. Poglejmo si kaj je algoritemska učinkovitost.

19 Reševanje časovno zahtevnih opravil z orodjem ORACLE 9 Algoritemsko učinkovitost [1] uporabljamo za opis lastnosti algoritmov, ki predstavljajo zasedenost posameznih računalniških virov ob izvajanju algoritma. Algoritemsko učinkovitost lahko razumemo kot analogen proces procesa produktivnosti inženirjev računalniških programov, algoritmov, kjer je njihov cilj zmanjšanje uporabe računalniških virov in izvajalnega časa do neke sprejemljive, optimalne meje. Za ta namen pa so nastale t.i. programske matrike. Najbolj pogosto uporabljene programske matrike so: hitrost ali izvajalni čas predstavlja čas, ki ga algoritem potrebuje za svojo izvedbo, prostor velikost porabljenega delovnega ali trajnega pomnilnika, ki ga algoritem porablja za izvajanje svojih operacij, velikost prenosa potrebna velikost pasovne širine operacij, velikost zunanjega pomnilnika velikost porabe začasnega prostora za potrebe dokončanja operacij, po končanju operacije poraba velikosti zunanjega pomnilnika, ki ga za daljši čas zaseda algoritem, za potrebe shranjevanja svojih izhodov ali za ohranjanje svojih stanj v času življenjske dobe algoritma, zmogljivost na Watt 6 in skupna poraba energije potrebne za delovanje izbrane strojne opreme. Ozka grla Proces optimizacije velikokrat zahteva iskanje t.i. ozkih grl, iskanje kritičnega dela programske kode, ki porablja največ računalniških virov. Običajno velja načelo»pareto«, ki pravi: 20% programske kode je odgovorne za 80% rezultatov. V računalništvu lahko načelo»pareto«tudi prenesemo na optimizacijo računalniških virov: algoritem za potrebe svoje izvedbe zasede 80% potrebnih računalniških virov v 20% svojih operacij. V programskem inženirstvu je običajno bolj poznano naslednje razmerje: 90% izvajalnega časa računalniškega programa je porabljenega v 10% programske kode (znano kot pravilo 6 Zmogljivost na Watt [16] je mera učinkovitosti energije na določeno računalniško arhitekturo ali strojno opremo. Je merilo, ki pove koliko preračunov je možno izvesti na računalniku z enim Watt-om energije

20 Reševanje časovno zahtevnih opravil z orodjem ORACLE 10 90/10). V svetu računalništva, pri odkrivanju ozkih grl, se velikokrat lahko zamislimo nad naslednjo izjavo, trditvijo:»bottlenecks occur in suprising places, so don't try to second guess and put in a speed hack until you have proven that's where the bottlenecks is.«(rob Pike) (slo.: Ozka grla se pojavijo na presenetljivih mestih, zato ne poskušaj ponovno ugibati, ampak se podaj v hitrostno izboljševanje, dokler ne dokažeš, da je to ozko grlo.) Kompleksnejši algoritmi in podatkovne strukture so primernejši za opravila z veliko količino podatkov, medtem ko so enostavnejši algoritmi primernejši za manjše količine podatkov. Nastavitve, inicializacija in druga potrebna opravila za delo z veliko količino podatkov lahko prednosti pred enostavnejšimi algoritmi izničijo. V nekaterih primerih tudi povečanje pomnilnika lahko pomaga pri hitrejšem izvajanju programa. Tako pridobimo zmožnost, da lahko program v pomnilnik shrani večjo količino podatkov. Vzemimo kot primer proces filtriranja znotraj datoteke: če ima program za potrebe filtriranja v pomnilniku zmožnost shranjevanja le ene vrstice datoteke (posledično opravljanje procesa filtriranja le na njej) je to počasnejši proces, kot pa če bi arhitektura računalnika dovoljevala shranjevanje celotne datoteke v pomnilnik. Optimizacija ima tudi svoje slabe strani. Ena od teh je, da lahko zmanjša berljivost programske kode in doda kodo, potrebno le za izboljšanje učinkovitosti. To pa lahko poveča kompleksnost programa ali sistema in posledično oteži vzdrževanje ter razhroščevanje kode. Zaradi tega običajno sledi izpopolnjevanje in optimizacija kode na zadnji razvojni fazi. Zamisliti se velja mogoče tudi nad naslednjima dvema izjavama:»we should forget about small efficiency, say about 97% of the time: premature optimization is the root of all evil.«(donald Knuth) (slo.: Pozabiti bi morali na majhne doprinose k učinkovitosti, približno v 97% velja: prezgodnja optimizacija je lahko vir vsega zla.)

21 Reševanje časovno zahtevnih opravil z orodjem ORACLE 11»In established engineering disciplines a 12% improvement, easily obtained, is never considered marginal and I belive the same viewpoint should prevail in software engineering.«(donald Knuth) (slo.: Pri vzpostavitvah inženirskih disciplin je 12% izboljšanj lahko dosegljivih, katere nikoli ne bi smele biti obravnavane kot marginalne in jaz verjamem, da bi moral prevladati enak pogled na to tudi v programskem inženirstvu.) Prezgodnja optimizacija je fraza, ki opisuje stanje, ko imajo razvijalčevi pomisleki glede zmogljivosti programa ali algoritma vpliv že na samo gradnjo zasnove, implementacijo. Tako stanje se potem tudi odraža na obliko, kakovost programske kode, ki je zaradi razvijalčeve zaslepljenosti z optimizacijo, pogostokrat kompleksnejša in ne več tako jasna kot bi lahko bila. Alternativa temu pristopu je izgradnja zasnove, programske kode in potem kasnejša vključitev procesa merjenja zmogljivosti ter odkrivanja delov programske kode, ki pa so potrebni vključevanja procesa optimizacije. V tej fazi, ko je zasnova programske kode jasna, berljiva, je običajno potem tudi lažje merjenje zmogljivosti, odkrivanje kritičnih delov programske kode in posledično tudi lažja vpeljava procesa optimizacije, kot pa pri prezgodnji optimizaciji. V praksi je običajno potrebno imeti že ob snovanju programskega produkta postavljene cilje o želeni zmogljivosti, katere potem razvijalec ob implementaciji upošteva in temu primerno tudi izpelje proces optimizacije.

22 Reševanje časovno zahtevnih opravil z orodjem ORACLE 12 3 JEZIK PL/SQL Jezik PL/SQL je bil razvit s strani korporacije ORACLE. Kratica je sestavljena iz dveh delov, prvi del ki ga predstavlja kratica PL, stoji za besedno zvezo proceduralni jezik (angl. Procedural Language), medtem ko drugi del kratice SQL, za strukturirani povpraševalni jezik (angl. Structured Query Language). Že iz pomena kratice PL/SQL, sestavljene iz dveh delov, je razvidno da gre za nekakšno mešanico dveh programskih jezikov, katera predstavlja razširitev strukturiranega povpraševalnega jezika SQL. Temu primerno pa bomo tudi poglavje razdelili na dve podpoglavji, kjer bomo posebej predstavili jezik Oracle SQL in potem njegovo razširitev, naš ciljni jezik PL/SQL. Slika 3.1: Logotip korporacije ORACLE. 3.1 Jezik Oracle SQL Strukturirani povpraševalni jezik SQL [26], je jezik, ki predstavlja vmesnik relacijskega podatkovnega sistema. Je najbolj razširjeni jezik namenjen delu z relacijskimi podatkovnimi bazami. SQL je bil v letu 1970 s strani korporacije IBM razvit za sistem»ibm System R 7 «in je postal de facto 8 standard, kot tudi ISO in ANSI standard. 7»IBM System R«[5] je sistem podatkovne baze, ki je bil plod razvojnega projekta laboratorija Jose Research (sedaj IBM A lmaden Research Center), korporacije IBM v letu To je bil prelomen projekt, ki je skozi»system R«predstavil jezik SQL in od takrat dalje postal standard za strukturirani povpraševalni jezik relacijskih podatkovnih baz. 8 De facto standard [4] je izdelek ali sistem, ki je dosegel prevladujoči položaj s strani javnega sprejemanja na tržišču.

23 Reševanje časovno zahtevnih opravil z orodjem ORACLE 13 Podatkovna baza korporacije ORACLE (Oracle DB), je relacijska podatkovna baza, katera temelji na relacijskem podatkovnem modelu. Za ta model je značilno, da so podatki združeni v vrstice in stolpce tabel. Stolpci in vrstice so logično povezani preko enoličnih stolpcev, n-teric, ki jim pravimo ključi. Povezave pa imenujemo relacije. Upravljanje podatkovne baze, ki temelji na relacijskem podatkovnem modelu, je možno preko sistema za upravljanje z relacijsko podatkovno bazo (RDBMS) [24]. RDBMS predstavlja osnovo za jezik SQL in za vse najbolj razširjene relacijske podatkovne baze, prav tako Oracle DB. Primer 3: Relacijski podatkovni model. Jezik SQL je deklarativni jezik, namenjen manipulaciji s podatki (kreiranje, spreminjanje, branje, itd.). Razvijalcu omogoča pisanje deklaracij, ki jih preda podatkovni bazi (»serverside 9 «). Pri deklarativnih jezikih je potrebno določiti zveze (relacije) med vhodnimi podatki in rezultati. Dobimo jih s pomočjo vprašanj (poizvedbe). Postopki poizvedovanj so vgrajeni v programski jezik in jih ni potrebno poznati. Taki jeziki so najbližji človeškemu načinu razmišljanja. 9 S»server-side«označujemo operacije, katere se v razmerju strežnik-odjemalec izvedejo na strežniški strani. S strani odjemalca se pošlje zahteva za izvedbo določene operacije strežniku, ki jo potem izvede.

24 Reševanje časovno zahtevnih opravil z orodjem ORACLE 14 Glede na namen ukazov jezik SQL [14] delimo na naslednje podjezike: jezik za definiranje podatkov DDL Omogoča kreiranje in spreminjane opisa podatkov. Primeri ukazov v Oracle DB: create, drop, truncate, alter. jezik za ravnanje s podatki DML Omogoča dodajanje, brisanje in spreminjanje podatkov. Primeri ukazov v Oracle DB: delete, insert, update. jezik za poizvedbe DQL Omogoča izvajanje poizvedb. Primer ukaza v Oracle DB: select. jezik za nadzor podatkov DCL Omogoča opredeljevanje in nadzor dostopa do podatkov. Primera ukazov v Oracle DB: grant, revoke. jezik za nadzor transakcij TCL Omogoča proženje in preklic izvajanja transakcij. Primeri ukazov v Oracle DB: commit, rollback, savepoint. 3.2 Osnovna zgradba in delovanje jezika PL/SQL SQL je deklarativni jezik in ne more izvajati proceduralne kode, vejitve, iteracije, sekvenčnih stavkov in podprogramov. S takšnimi konstrukti bi lahko razvijalec zapisal svoj postopek za izračun želenih rezultatov. Da bi prešli to mejo, je korporacija ORACLE razvila jezik PL/SQL [17], ki razširja jezik SQL in relacijsko podatkovno bazo Oracle DB. PL/SQL je eden izmed treh jezikov, skupaj z jezikom SQL in Java 10, ki so vgrajeni v relacijsko podatkovno bazo Oracle DB. PL/SQL je proceduralni jezik, ki je bil posebej zgrajen za to, da bi omogočal učinkovitejšo procesiranje podatkov shranjenih v relacijski podatkovni bazi Oracle DB. PL/SQL programska koda se prav tako kot pri jeziku SQL 10 Java je objektno usmerjeni programski jezik, ki je bil razvit leta 1995 s strani podjetja Sun Microsystems, sedaj v lasti korporacije ORACLE, ki temelji na enostavnem objektnem modelu, razredih. Javanske aplikacije so prevedene v bitno kodo, katera se potem lahko preko javinega navideznega stroja (JVM Java Virtual Machine) izvajajo na katerikoli računalniški arhitekturi.

25 Reševanje časovno zahtevnih opravil z orodjem ORACLE 15 izvaja v podatkovni bazi in tako jezik avtomatično podeduje robustnost, varnost in prenosljivost podatkovne baze Oracle DB. PL/SQL ni zgolj proceduralni jezik. Poleg vseh običajnih značilnosti proceduralnih jezikov, omogoča nekatere koncepte objektno usmerjenega programiranja ter zmožnost enostavne integriracije z jezikom SQL, kar pa je posledica mešanja dveh jezikov, PL in SQL. Slika 3.2: Jezik Oracle PL/SQL. Razlike med SQL in PL/SQL SQL je zmožen izvajati en stavek naenkrat, medtem ko se PL/SQL izvaja kot blok programske kode, SQL pove podatkovni bazi kaj naj naredi, PL/SQL pa pove podatkovni bazi kako naj naredi, SQL generira poizvedbe (DML in DDL stavki), medtem ko PL/SQL generira podatkovne bloke, prožilce, funkcije, procedure in pakete, v PL/SQL kodo je možno vključevanje SQL deklaracij, medtem ko v SQL ni možno vključevati PL/SQL programske kode. Struktura jezika PL/SQL Osnovni gradnik PL/SQL programske kode je blok iz katerih so sestavljeni programi napisani v jeziku PL/SQL. Bloki v programu so lahko tudi ugnezdeni (eden v drugem), vsak blok pa običajno vsebuje del programske kode zapisane v jeziku PL/SQL, katere namen je realizacija določene naloge programa.

26 Reševanje časovno zahtevnih opravil z orodjem ORACLE 16 Primer 4: Vzorec PL/SQL bloka. Iz zgornjega primera bloka (primer 4) je razvidno, da je zgolj izvajalna sekcija obvezna, medtem ko so vse ostale sekcije opcijske. V blokih jezika PL/SQL pa uporaba vseh ukazov jezika SQL ni dovoljena oz. omogočena. Predvsem ukazi jezika DDL (CREATE, DROP, ALTER). Možno jih je uporabiti le skozi dinamično kreiranje SQL stavkov oz. neposredni dostop do jezika SQL (ukaz EXECUTE IMMEDIATE 'sql stavek'). V blokih PL/SQL pa je možno uporabiti ukaze SELECT, INSERT, UPDATE, DELETE in še nekaj drugih ukazov za manipulacijo s podatki ter ukaze za nadzor transakcij. Omenili bi še naslednjo posebnost: v jeziku PL/SQL ne moremo uporabiti SELECT stavka, katerega rezultat vsebuje več vrstic. To posebnost SELECT stavka, kot tudi dinamično kreiranje SQL ukazov, bomo podrobneje razložili pri razlagi kurzorjev. Večvrstične komentarje v PL/SQL jeziku ograjujemo z naslednjo sintakso: /* komentar */, enovrstični komentar pa z -- komentar. Kot je razvidno iz zgornjega primera (primer 4), je v PL/SQL bloku možna uporaba različnih sekcij. Deklarativna sekcija služi za definiranje spremenljivk, kurzorjev, lokalnih podprogramov, tipov in objektov, katere uporabljamo v preostalih sekcijah. Izvajalna sekcija lahko vsebuje konstrukte, gradnike, kot so prireditve, vejitve, iteracije, podprograme in njihove klice, prožilce, pakete, objekte, idr. V sekciji za upravljanje izjem, pa je zapisana potrebna PL/SQL koda za nadzor in upravljanje izjem.

27 Reševanje časovno zahtevnih opravil z orodjem ORACLE 17 Spremenljivke in podatkovni tipi jezika PL/SQL Med izvajanim programom jezika PL/SQL in podatkovno bazo Oracle DB se informacije prenašajo preko spremenljivk. Vsaka spremenljivka pa je kot v drugih programskih jezikih, povezana z določenim tipom oz. je ob kreiranju spremenljivke definiran njen tip, s tem pa hkrati njena zaloga oz. nabor vrednosti, ki jih lahko zavzema. Definicija tipa spremenljivke se opravi v deklarativni sekciji PL/SQL bloka. Primer 5: Definicija tipa spremenljivke v jeziku PL/SQL. V zgornjem primeru definicije tipa spremenljivke (primer 5) so ponazorjeni različni tipi definicije spremenljivk, kot tudi kako se sploh definira spremenljivka v jeziku PL/SQL. Spremenljivko definiramo z naslednjo sintakso: Ime Spremenljivke tip Spremenljivke [(s) (c [, d])] [: = privzeta Vrednost]; S tipom spremenljivke (tip Spremenljivke) povemo kakšno zalogo vrednosti bo imela naša spremenljivka (primer 5, definicija 1). Zalogo vrednosti spremenljivke lahko še opcijsko

28 Reševanje časovno zahtevnih opravil z orodjem ORACLE 18 dodatno omejimo, spremenljivko varchar znakovnega tipa s številom znakov (primer 5, definicija 2, spremenljivka naziv Oseba 2), medtem ko numerično spremenljivko lahko omejimo s številom celih števil in še dodatno opcijsko s številom decimalnih mest (primer 5, definicija 2, spremenljivka id Oseba 2). Pri sami definiciji spremenljivke lahko tudi napovemo privzeto vrednost spremenljivke. To napovemo z navedbo znakov:= ob tipu, kar smo storili v našem primeru 5, pri definiciji 3. Omeniti velja prireditev vrednosti NULL, ki pomeni prazno vrednost oz. takšna spremenljivka nima vrednosti. To vrednost spremenljivka dobi tudi privzeto, če incializacijske vrednosti eksplicitno ne definiramo. Vrednost NULL ni namenjena zgolj za prirejanje, lahko jo uporabimo tudi kot definicijo za prazen blok, ki ne izvaja nobene akcije. Tip spremenljivke je možno definirati na več različnih načinov: uporabimo enega izmed tipov definiranih v podatkovni bazi Oracle DB (primer 5, definicija 1-3), uporabimo generičen tip jezika PL/SQL, ki ima v svojem naboru še BOOLEAN kot dodaten osnovni tip (primer 5, definicija 4) in dodaten nabor kompleksnejših tipov, za podatkovni tip uporabimo stolpec tabele v podatkovni bazi Oracle DB (primer 5, definicija 5). Za tovrstno definicijo tipa spremenljivke uporabimo naslednjo sintakso: ime Spremenljivke ime Tabele. ime Stolpca % TYPE; S tem povemo, da bo naša spremenljivka imela enak podatkovni tip kot ga ima naveden stolpec tabele. Uporaba take definicije spremenljivke je zelo priročen, predvsem ko se spremenljivka navezuje na vrednosti tega stolpca. Ob morebitni spremembi podatkovnega tipa tega stolpca pridobimo tudi avtomatično spreminjanje zaloge vrednosti spremenljivke. Tip spremenljivke lahko predstavlja vrstica tabele z vsemi pripadajočimi stolpci. Taka spremenljivka potem predstavlja nekakšen objekt, ki je tip vrstice tabele in je sestavljen iz vseh stolpcev tabele s pripadajočimi tipi (angl. record type). Sintaksa take definicije spremenljivke je podobna definiciji spremenljivke s pomočjo stolpca tabele, le da se tukaj uporablja rezervirana beseda ROWTYPE (primer 5, definicija 6).

29 Reševanje časovno zahtevnih opravil z orodjem ORACLE 19 Slika 3.3: Vgrajeni podatkovni tipi jezika PL/SQL. Kurzorji Ker se kurzorji nanašajo na ukaz SELECT jezika SQL, bomo najprej predstavili slednji ukaz. S pomočjo ukaza SELECT sestavimo poizvedbo, katere rezultat so podatki določene tabele oz. podatki večih tabel. Pridobitev želenih podatkov omejimo znotraj SELECT ukaza z relacijami med tabelami, pogoji in stolpci tabel. V jeziku PL/SQL se rezultat stavka SELECT shranjuje v spremenljivko (z rezervirano besedo INTO). Torej poizvedba SELECT ukaza v jeziku PL/SQL mora temeljiti na enovrstičnem rezultatu, kar pa predstavlja omejitev. Prejšnjo omejitev ukaza SELECT pa nam odpravljajo kurzorji. S pomočjo kurzorja je moč poizvedovati po rezultatu, ki vsebuje več vrstic in jih je možno sekvenčno prebirati. Ta funkcionalnost razširja ukaz SELECT. Torej iz kurzorja je moč zajeti eno vrstico podatkov, jih obdelati in se po potrebi kontrolirano premakniti na naslednjo vrstico. Ta postopek se lahko izvaja vse dokler se ne pregledajo (obdelajo) vse vrstice rezultata kurzorja. Kurzor si lahko predstavljamo kot nekakšno zanko nad poizvedenimi podatki, katere osnovo predstavlja SELECT stavek jezika SQL.

30 Reševanje časovno zahtevnih opravil z orodjem ORACLE 20 Primer 6: Definicija in uporaba kurzorja v jeziku PL/SQL. Včasih bi tudi za potrebe razširitve programa potrebovali dinamično kreiranje SQL ukazov, znotraj PL/SQL bloka. Na ta način se lahko izognemo podvajanju SQL kode. Kreiranje dinamičnih SQL stavkov je mogoče preko neposrednega dostopa do jezika SQL, ki ga lahko predstavimo z naslednjo sintakso: EXECUTE IMMEDIATE sql_stavek [USING vhodni Param] [INTO izhodni Param]; Tako lahko različne SQL ukaze shranimo in po potrebi spreminjamo v spremenljivki znakovnega tipa. Ker s tem ukazom neposredno dostopamo do jezika SQL, lahko tudi izvajamo ukaze jezika DDL, znotraj PL/SQL bloka. Primer 7: DDL ukazi v jeziku PL/SQL, dinamično kreiranje SQL stavkov. Dinamično kreiranje kurzorjev poteka tudi po zelo podobnem postopku. Tudi tukaj se lahko SQL stavek bodisi shrani v spremenljivko bodisi napove kot niz znakov in kot tako posreduje kurzorju. Za dosego tega cilja je najprej potrebno ustvariti referenco na kurzor

31 Reševanje časovno zahtevnih opravil z orodjem ORACLE 21 (TYPE ime_tipa Reference IS REF CURSOR), definirati spremenljivko (sprem Ref Kurzorja ime_tipa Reference), ki bo nosila referenco na želeni kurzor in v kasnejši fazi kurzor odpreti (OPEN sprem Ref Kurzorja FOR sql_stavek) ter ga tudi na koncu uporabe zapreti (CLOSE sprem Ref Kurzorja). Pri odpiranju pa mu posredujemo prej omenjeno dinamiko SQL stavkov. Potrebno je še poskrbeti za pomikanje po posameznih vrsticah, zajemanje podatkov (FETCH sprem Ref Kurzorja INTO izhodne Sprem) in za izhod iz kurzorja, ko so prebrane vse vrstice rezultata kurzorja (EXIT WHEN sprem Ref Kurzorja % NOT_FOUND). Primer 8: Dinamično kreiranje kurzorja v jeziku PL/SQL.

32 Reševanje časovno zahtevnih opravil z orodjem ORACLE 22 Izvajanje kontrole toka v PL/SQL bloku Kontrola toka ali izvajanje PL/SQL bloka, je omogočena z enakimi konstrukti kot pri vseh ostali proceduralnih jeziki, le da se od drugih razlikujejo po sintaksi. Tako je moč kontrole toka bloka izvajati preko različnih vejitev, iteracij, izstopnih direktiv ter seveda tudi klicev pod programov in upravljanja izjem. Z vejitvami [18] lahko glede na definiran pogoj kontroliramo tok izvajanja PL/SQL bloka. Najbolj znani vejitveni stavek je IF, kateri pa ima tudi več izvedenk. Jezik PL/SQL poleg vejitve IF, pozna še vejitev CASE, ki pa ne preusmerja tok izvajanja glede na definiran pogoj kot IF, ampak glede na vrednost določene spremenljivke. Obstaja tudi brezpogojen skok oz. ukaz GOTO, s katerim je moč narediti neposreden skok na del programske kode, ki jo predhodno označimo z določeno označbo (labelo).

33 Reševanje časovno zahtevnih opravil z orodjem ORACLE 23 Primer 9: Definicija vejitev v jeziku PL/SQL. Kontrolo toka izvajamo tudi z iteracijami. To je ponavljajoči se proces, ki se izvaja vse dokler se ne doseže predhodno definiran pogoj, običajno določeno število korakov. Iteracije imenujemo tudi zanke. Jezik PL/SQL omogoča zanke tipa LOOP, WHILE-LOOP in FOR-LOOP. Zanke lahko tudi po potrebi predčasno končamo z ukazom EXIT. Ukaz EXIT lahko vsebuje tudi pogoj (EXIT-WHEN pogoj), kar pa ni nujno (EXIT).

34 Reševanje časovno zahtevnih opravil z orodjem ORACLE 24 Primer 10: Definicija iteracij, zank v jeziku PL/SQL. Kontrolo toka je možno izvajati tudi s klici podprogramov in upravljanjem izjem. Ob klicu podprograma, se izvajanje enostavno preusmeri na programsko kodo klicanega pod programa in po njegovi izvedbi nazaj v klicoči blok. Podobna zadeva pa se tudi zgodi pri upravljanju izjem. V PL/SQL bloku imamo lahko zapisan del kode, ki je namenjen obravnavi določenih izjem in ob morebitni pojavi izjeme, se preusmeri izvajanje v ta del kode. Upravljanje izjem in podprograme bomo podrobneje obravnavali v kasnejših razdelkih tega poglavja. Omenili bi še, da je tudi z ukazom RETURN možno kontrolirati tok izvajanja. Ukaz nas vrne en nivo višje v hierarhičnem klicanju podprogramov. Če smo pa na najvišjem nivoju, torej v glavnem programu, se program z ukazom zaključi, morebitne ukaze, ki si sledijo pod tem ukazom, pa ne izvede.

35 Reševanje časovno zahtevnih opravil z orodjem ORACLE 25 Izjeme v PL/SQL bloku PL/SQL blok je možno tudi razširiti za upravljanje izjem [19], ko namenimo del kode, ki se izvede ob morebitni pojavi različnih izjem pri izvajanju bloka. Del bloka, ki je namenjen upravljanju izjem, označimo z rezervirano besedo EXCEPTION. Ta je razdeljen na upravljanje posameznih izjem. Z WHEN <izjema> THEN obravnavamo posamezno izjemo. Omenili smo, da je PL/SQL bloke možno gnezditi, kar lahko izkoristimo pri upravljanju izjem na posameznih nivojih pod blokov. Primer 11: Razširitev PL/SQL bloka za upravljanje z izjemami. PL/SQL jezik pozna dve vrsti izjem: vgrajene izjeme in uporabniško definirane izjeme. Za potrebe identifikacije vgrajenih izjem, ima PL/SQL organizirane rezervirane besede izjem. Te vsebujejo enolično kodo izjeme in njen opis.

36 Reševanje časovno zahtevnih opravil z orodjem ORACLE 26 Tabela 1: Najbolj pogoste izjeme v jeziku PL/SQL. Rezervirana beseda izjeme SQLCODE vrednost Oracle izjema ACCESS_INTO_NULL ORA CASE_NOT_FOUND ORA COLLECTION_IS_NULL ORA CURSOR_ALREADY_OPEN ORA DUP_VAL_ON_INDEX -1 ORA INVALID_CURSOR ORA INVALID_NUMBER ORA LOGIN_DENIED ORA NO_DATA_FOUND ORA NOT_LOGGED_ON ORA PROGRAM_ERROR ORA ROWTYPE_MISMATCH ORA SELF_IS_NULL ORA STORAGE_ERROR ORA SUBSCRIPT_BEYOND_COUNT ORA SUBSCRIPT_OUTSIDE_LIMIT ORA SYS_INVALID_ROWID ORA TIMEOUT_ON_RESOURCE -51 ORA TOO_MANY_ROWS ORA VALUE_ERROR ORA ZERO_DIVIDE ORA Druga vrsta izjem so uporabniško definirane izjeme. Tako lahko definiramo svoje, specifične izjeme. Te definiramo kot spremenljivke tipa EXCEPTION. V deklarativni sekciji jih, z ukazom RAISE, prožimo. Obravnavamo jih podobno kot vgrajene izjeme, le da namesto rezerviranih besed izjem, uporabimo prej definirane spremenljivke.

37 Reševanje časovno zahtevnih opravil z orodjem ORACLE 27 Primer 12: Uporabniško definirane izjeme v jeziku PL/SQL. Podprogrami jezika PL/SQL Jezik PL/SQL omogoča uporabo dveh vrst podprogramov: funkcije in procedure. Podprogrami se lahko gnezdijo in tako nastajajo lokalni podprogrami. Definira se jih v deklarativni sekciji. Podprogrami v jeziku PL/SQL so lahko sestavljeni iz SQL in PL/SQL stavkov. Lahko vsebujejo parametre in se po prevajanju shranijo v podatkovno bazo Oracle DB, natančneje v Oracle Data Dictionary, kjer so na voljo za nadaljnjo uporabo. Parametri podprogramov so lahko vhodni, izhodni ali kombinirani vhodno-izhodni parametri. S to opredelitvijo parametrov definiramo: katere parametre podprogram zgolj sprejema (rezervirana beseda IN), katere vrača (rezervirana beseda OUT) in kateri so kombinacija obojih (rezervirana beseda IN OUT). Če parametru ne definiramo za kakšno vrsto parametra gre, se privzeti parameter opredeli kot vhodni parameter.

38 Reševanje časovno zahtevnih opravil z orodjem ORACLE 28 Sintaksa deklaracije parametra podprograma je naslednja: ime Parametra [IN OUT IN OUT] podatkovni Tip Funkcije v jeziku PL/SQL morajo obvezno vračati vrednost iz podatkovnega tipa, ki je definiran v glavi funkcije (tip Vracane Vrednosti). Funkcije lahko uporabljamo v stavkih jezika SQL, kar predstavlja glavno razliko v primerjavi s procedurami. Funkcije označimo z rezervirano besedo FUNCTION. Primer 13: Definicija funkcije v jeziku PL/SQL. Procedure v jeziku PL/SQL ne vračajo nobene vrednosti. Lahko pa vrednost vračajo skozi izhodne ali vhodno-izhodne parametre. V večini primerov služijo kot izvajalni del kode, katere zagon zagotovi določeno opravilo. Procedure označimo z rezervirano besedo PROCEDURE.

39 Reševanje časovno zahtevnih opravil z orodjem ORACLE 29 Primer 14: Definicija procedure v jeziku PL/SQL. Knjižnice v jeziku PL/SQL, paketi Programska knjižnica je skupek funkcij, podprogramov, gradnikov, ki kot celota zagotavljajo neko specifično funkcionalnost. Knjižnice je moč vključevati v programsko kodo, s katerimi poenostavimo samo programiranje in vpeljemo koncept modularnosti. Programski jeziki so običajno opremljeni z velikim naborom vgrajenih knjižnic, ki jim pravimo standardne knjižnice. Možno pa je tudi zapisati svoje knjižnice, ki jih lahko uporabimo oz. tudi predamo v uporabo drugim razvijalcem. Pri razvoju knjižnice pa ne smemo pozabiti na vpeljavo določene mere univerzalnosti, ki omogoča, da je njena uporabnost lahko toliko bolj razširjena. Knjižnice v programskem jeziku PL/SQL ne obstajajo, poznamo pa PL/SQL pakete (angl. package) [11]. Ti služijo podobnemu namenu kot knjižnice v drugih programskih jezikih, ki se prav tako kot podprogrami, funkcije in procedure, shranjujejo v Oracle Data Dictionary. Paket je gradnik, ki vsebuje oz. povezuje množico PL/SQL tipov, uporabniško definiranih izjem, konstant, spremenljivk, kurzorjev in podprogramov, v neko smiselno celoto. Torej združuje skupek PL/SQL kod in gradnikov, ki zagotavljajo določen segment

40 Reševanje časovno zahtevnih opravil z orodjem ORACLE 30 storitev. Paket je razdeljen na dva dela: na specifikacijo paketa, Package Specification in na telo paketa, Package Body. Specifikacija paketa, deluje kot vmesnik (angl. interface), v katerem so zapisane le definicije in deklaracije vseh vgrajenih gradnikov, medtem ko ne vsebuje njihove implementacije. Implementacija definiranih konstruktov v specifikaciji paketa, je vsebovana v telesu paketa. Primer 15: Definicija specifikacije paketa v jeziku PL/SQL. Primer 16: Definicija telesa paketa v PL/SQL jeziku.

41 Reševanje časovno zahtevnih opravil z orodjem ORACLE 31 Prednosti in slabosti paketov: paketi kot moduli povezujejo smiselne elemente, tipe, podprograme in druge gradnike, omogočajo kreiranje tipov, spremenljivk in podprogramov, ki so javni (public) ali zasebni (private), omogočajo kapsulacijo, skrivanje poslovne logike, omogočajo objektno usmerjeno programiranje, shranjene vrednosti gradnikov vsebovanih v specifikaciji oz. glavi paketa, imajo omejeno delovanje na nivo seje, kar pomeni, da lahko hkrati več sej uporablja paket, medtem ko vsaka seja operira s svojimi vrednostmi; namreč v vsako sejo se naloži svoja instanca paketa, s svojimi specifičnimi lastnostmi in omogočanjem prej omenjenih konceptov gradnje paketi povečujejo varnost, zmogljivost in predvsem ponovno uporabnost programske kode, ob prvem klicu kateregakoli gradnika paketa (ime Paketa. ime Gradnika) se mora celoten paket iz podatkovne baze Oracle DB naložiti, kar je ob prvem klicu zelo potratno, ampak se obrestuje v kasnejši zaporednih klicih; tedaj so klici opravljeni hitreje, ko se kateri koli gradnik paketa ne prevede (vsebuje neko napako), je celoten paket nepreveden in tako neuporaben. Objektno usmerjeno programiranje v jeziku PL/SQL Objektno usmerjeno programiranje dobiva vedno večji pomen in si je že ustvarilo dominantno uporabo zaradi zmožnosti hitrejšega razvoja kompleksnejših aplikacij. Posebnost pri tovrstnem programiranju je, da omogoča abstraktno ustvarjanje realnih objektov in s tem predstavlja idealno modelirno okolje. Abstrakcije so osnovni mehanizem modelov in tako tudi objektno usmerjenih programskih jezikov. To je način razmišljanja, pri katerem zanemarimo podrobnosti in se osredotočimo na splošne, skupne lastnosti objektov. Poznamo več vrst abstrakcij. Ena izmed teh je abstrakcija metode, s katero skrijemo implementacijo metode in izpostavimo le njeno definicijo. Na račun abstrakcije ni potrebno ob spremembah abstraktne metode tudi

42 Reševanje časovno zahtevnih opravil z orodjem ORACLE 32 spreminjanje klicujočih programov abstraktne metode. Obstaja pa tudi podatkovna abstrakcija, pri kateri definiramo podatkovni tip spremenljivke. Podatkovni tip predstavlja zalogo vrednosti in posledično tudi nabor operacij, ki vračajo rezultate v tej zalogi vrednosti. Pri definiranju podatkovnega tipa spremenljivke nam ni potrebno vedeti kako programski jezik shranjuje te vrednosti oz. kako so implementirane posamezne operacije. Tudi v jeziku PL/SQL je omogočeno objektno usmerjeno programiranje, ki je zasnovano na osnovi uporabe t.i. objektnih tipov, sestavljenih tipov. Ti imajo vgrajene določene interne komponente. Objektni tip (angl. object type) [21], je sestavljeni podatkovni tip, ki kapsulira podatkovno strukturo, skupaj s funkcijami in procedurami potrebnimi za njihovo manipulacijo. Spremenljivke, ki objekt sestavljajo, imenujemo atributi, medtem ko funkcije in procedure, ki opredeljujejo njegovo delovanje, imenujemo metode. Objektni tipi [10] so, tako kot paketi, sestavljeni iz dveh delov: iz specifikacije (angl. object type specification) in telesa (angl. object type body). Specifikacijo predstavlja vmesnik objektnega tipa (angl. interface), ki deklarira podatkovno strukturo (seznam atributov) in operacije (metode) za potrebe manipulacije s podatki, medtem ko telo dokončno, do popolnosti definira metode, ter kot tako vsebuje njihovo implementacijo. 3.4: Struktura objektnega tipa. Vse informacije, ki jih uporabnik takega objektnega tipa potrebuje, so zajete v specifikaciji objektnega tipa. Telo pa si lahko zamislimo kot neko črno škatlo, v kateri so shranjene vse podrobnosti. Torej spremembe telesa objektnega tipa, ne bodo vplivale na programske

43 Reševanje časovno zahtevnih opravil z orodjem ORACLE 33 bloke, ki uporabljajo ta objektni tip. S tem pristopom smo zadostili vsem zahtevam procesa kapsulacije. Primer 17: Definicija specifikacije objektnega tipa v jeziku PL/SQL. Primer 18: Definicija telesa objektnega tipa v jeziku PL/SQL.

44 Reševanje časovno zahtevnih opravil z orodjem ORACLE 34 Primer 19: Uporaba objektnega tipa v jeziku PL/SQL. Objektni tipi podpirajo več ali manj vse koncepte objektno usmerjenega programiranja: predefiniranje Metode je moč predefinirati, tako lahko na osnovi iste deklaracije metod, zapišemo metodam popolnoma nov proces delovanja. kapsulacija Koncept objektnega tipa omogoča skrivanje njihove podrobnosti pred uporabniki. Uporabniki skozi specifikacijo objektov poznajo njihov način uporabe (atribute in specifikacije metod), ne pa podrobnosti objektnega tipa (implementacijo).

45 Reševanje časovno zahtevnih opravil z orodjem ORACLE 35 statične metode Objektni tipi podpirajo uporabo statičnih metod. Klicanje statičnih metod je omogočeno že skozi objektni tip in tako ni potrebe po ustvarjanju objekta objektnega tipa. Definiramo jih z rezervirano besedo STATIC. dedovanje Objektni tipi podpirajo enkratno dedovanje. Tako sta poznana objektni nadtip (SuperType - oče) in podtip (SubType sin). Podtipi vsebujejo vse atribute, metode nadtipa (očeta) in seveda opcijsko še svoje dodatne, lahko pa tudi predefinirajo metode nadtipa (očeta). Primer 20: Dedovanje objektnih tipov v jeziku PL/SQL.

46 Reševanje časovno zahtevnih opravil z orodjem ORACLE 36 Seznami v jeziku PL/SQL Tudi PL/SQL omogoča konstrukcijo in uporabo seznamov, ki se imenujejo Collection Types [20], v jeziku PL/SQL. Seznami so v jeziku PL/SQL urejena skupina elementov enakega podatkovnega tipa. Vsak element takega seznama ima edinstveno identifikacijo, ki opredeljuje njegovo pozicijo v seznamu. Torej so neke vrste polja, ki so sestavljena iz objektov bodisi osnovnega tipa, tipa stolpca določene tabele, vrstice tabele bodisi uporabniško definiranega objektnega tipa. Sintaksa kreiranja seznama je naslednja: TYPE ime Seznama AS TABLE OF tip; Primer 21: Definicija seznama v jeziku PL/SQL. Seznami imajo tudi določene vgrajene metode katere omogočajo lažjo uporabo seznama ter vzdrževanje. Tabela 2: Interne metode seznama v jeziku PL/SQL. Ime metode COUNT DELETE EXISTS EXTEND FIRST LAST LIMIT NEXT PRIOR TRIM Opis funkcionalnosti vrne število elementov v seznamu izbriše iz seznama željen element preveri, če obstaja iskan element v seznamu razširi seznam za eno mesto oz. pripravi mesto za nov element vrne prvi element seznama vrne zadnji element seznama vrne možno število elementov seznama vrne naslednji element seznama vrne predhodni element seznama pobriše prazna mesta seznama

47 Reševanje časovno zahtevnih opravil z orodjem ORACLE 37 4 OPTIMIZACIJE V JEZIKU PL/SQL Spoznali smo jezik PL/SQL, sedaj pa bomo prikazali implementacijo opravil. Ker bi želeli, da se naša novo nastala opravila v jeziku PL/SQL izvajajo kar se da hitro, dobro izrabljajo razpoložljive računalniške vire, bomo vpeljali tudi postopek optimizacije. Običajni pristop k optimizaciji, je pisanje čimbolj kakovostne programske kode, izbira najustreznejših gradnikov za dosego želenega cilja in še v zgodnejši fazi, dobro načrtovanje problema. Naš poglavitni cilj ni podajanje smernic kakovostnejšega programiranja v jeziku PL/SQL, zato bomo šli še en korak dlje. Recimo, da smo prvega že tako ali tako osvojili preko spoznavanja jezika PL/SQL. Prikazali smo tudi nekoliko drugače proces optimizacije v jeziku PL/SQL. Prikazali bomo nekaj modelov, konceptov optimizacij, katere je moč uporabiti na najbolj razširjenih problemih, ki nas običajno pestijo. Zakaj govorimo toliko o optimizacijskih modelih? Samo s pisanjem kakovostne programske kode in z izbiro najustreznejših gradnikov, velikokrat ne pridemo do želene mere optimalnega izvajanja opravila. Poudarili bi, da je predvsem pomembno iz kakega modela izhajamo, oz. na katerem gradimo in da je potrebno izvedbo opravila podrobno analizirati ter jo ustrezno podrediti našim ciljem, želenim rezultatom. Včasih pa imamo algoritem, ki je dovolj kakovostno načrtovan in napisan in težko lahko s spremembami na samem algoritmu kaj storimo glede njegove pohitritve. Poiskali smo rešitve, ki prihajajo iz sodobnih objektno usmerjenih jezikov in izpeljali optimizacijske modele, ki omogočajo pohitritev na osnovi paralelne izvedbe odsekov opravila in čakalnih vrst ter jih pripeljali do določene mere univerzalnosti za širšo uporabnost. Pri diplomskem delu smo se osredotočili na problem dela z nizi znakov, predvsem na primerjavo nizov med seboj. Implementirali smo Jaro-Winkler algoritem, ga optimizirali in skozi posamezne faze optimizacij prikazali kako analizirati probleme, algoritme ter jih ustrezno podredili ciljem, želenim rezultatom za potrebe izboljšanja zmogljivosti. Nato smo se ukvarjali z nitmi. Prenesli smo funkcionalnost iz sodobnih objektno usmerjenih jezikov v jezik PL/SQL, s ciljem dosega paralelnega izvajanja opravil. S čakalnimi vrstami

48 Reševanje časovno zahtevnih opravil z orodjem ORACLE 38 smo razširili uporabnost. Tako je moč opravila obtežiti z dodatnimi bremeni in pri tem izgubiti čim manj časa. Na koncu smo tudi to simulacijo večnitenja z določenimi gradniki prenesli na okensko razvojno okolje Oracle Forms. Ker smo za izpeljavo rešitev potrebovali določene pakete jezika PL/SQL, smo jih tudi na kratko predstavili in izpostavili njihove specifične lastnosti, katere smo potrebovali za dosego cilja. 4.1 Jaro-Winkler algoritem Velikokrat naletimo na težavo, ko je potrebno združevati nize znakov med seboj. Povezati je potrebno enake ali celo že dovolj podobne nize znakov. Primer takega opravila predstavlja zbirka podatkov oseb, komitentov, strank, dobaviteljev, študentov ali drugih, ki so shranjeni v podatkovni bazi. Njihova imena pa bi želeli primerjati z drugim virom, ki ni enake kakovosti. Torej lahko prihaja do razlik med imeni obeh virov, čeprav gre za iste osebe - mogoče so v eni bazi uporabljene okrajšave imen, nadimki, ali pa so bile storjene napake. Ključno vprašanje tukaj je, kako imena povezati, saj klasična primerjava (enačenje) nizov znakov med seboj ne bo obrodila dovolj dobrih rezultatov. Pri tem problemu smo mi uporabili Jaro-Winkler algoritem, ki omogoča kakovosten izračun podobnosti dveh nizov. Jaro-Winkler algoritem [6] nam po določenem postopku izračuna Jaro-Winkler razdaljo (Winkler: 1990), ki je mera medsebojne podobnosti dveh nizov. Algoritem je Winklerjeva različica matrike Jaro razdalje (Jaro: 1989, 1995) in se uporablja predvsem za povezovanje dvojnih zapisov. Večja kot je Jaro-Winkler razdalja dveh primerjalnih nizov, bolj sta si niza podobna. Vrednosti Jaro-Winkler razdalje so normalizirane v mejo vrednosti od 0 do 1. Vrednost 0 pomeni, da ni nobene podobnosti med dvema primerjalnima nizoma, medtem ko vrednost 1 predstavlja popolno podobnost oz. popoln zadetek. Matrika Jaro- Winkler razdalje je bila narejena, oz. najbolj priročna za primerjavo krajših nizov, kot so imena oseb.

49 Reševanje časovno zahtevnih opravil z orodjem ORACLE 39 Matematična definicija Jaro-Winkler razdalje: Jaro razdalja d j dveh primerjalnih nizov s 1 in s 2 je: d j 1 m m m t = ( + + ), (4.1) 3 s s 1 2 m kjer je: m - število enakih znakov, t - število transpozicij. Dva znaka iz nizov s 1 in s 2 se upoštevata kot enaka, če velja naslednji izraz oz. nista oddaljena (pozicija znaka v posameznem nizu) za več kot: max( s1, s2 ) 1 2 kjer je:, (4.2) s 1 - število enakih znakov, s 2 - število transpozicij. Vsak znak niza s 1 se primerja z vsemi znaki v nizu s 2. Vrednost, ki jo dobimo, če delimo število enakih znakov (lahko tudi z različnim vrstnim redom) s številom 2, predstavlja število transpozicij. Poglejmo si razlago pojmov kar na primeru. Primerjajmo niza 'CRATE' in 'TRACE': znaki 'R', 'A', 'E' se ujemajo, ker niso preveč oddaljeni. Odštejemo poziciji enakega znaka v obeh nizih. Največja oddaljenost posameznih znakov je v tem primeru lahko največ 1.5 (5/2-1) in sta tako 'T' in 'C' preveč oddaljena (m=3). Ampak če zamenjamo črki 'C' in 'T', dobim iz niza 'CRATE', niz 'TRACE'. Tako zamenjavo znakov imenujemo transpozicija in v našem primeru je t=1. Če pa primerjamo niza 'DwAyNE' in 'DuANE', pa zamenjani znaki niso preveč oddaljeni in tako transpozicija ni potrebna (t=0). Razdalja Jaro-Winkler, v svojo ocenitev podobnosti dveh nizov, vključuje mero predpone p, ki daje večje vrednosti ocenitve podobnosti nizom, katerih znaki se ujemajo že na samem začetku nizov in imajo enako predpono dolžine l.

50 Reševanje časovno zahtevnih opravil z orodjem ORACLE 40 Jaro-Winkler razdalja d w dveh nizov s 1 in s 2 je naslednja d w = d + lp(1 d )), (4.3) j ( j kjer je: d j - Jaro razdalja primerjalnih nizov s 1 in s 2, l - dolžina predpone, ki je lahko dolga največ 4 znake, p - faktor povzpetenja. Faktor povzpetenja p je konstanta, ki napoveduje za koliko je razdalja primerjave zaradi enake predpone dvignjena navzgor. Ta pa ne sme preseči vrednosti 0.25, ker bi tedaj razdalja lahko bila višja kot 1. V Winklerjevem delu je vrednost te konstante enaka 0.1. Poglejmo si na naslednjem primeru (primer 22) kako bi na podlagi prej predstavljenih enačb izračunali Jaro-Winkler razdaljo. Primer 22: Prikaz matematičnega izračuna Jaro-Winkler razdalje. Imamo dva primerjalna niza znakov, niz s 1 'DIXON' in niz s 2 'DICKSONX': D I X O N D I C K S O N X število enakih znakov: m=4 (opozorilo: znaka 'x' nista razpoznana kot enaka znaka, kajti gledamo zgolj okno velikosti največje dovoljene razdalje, v našem primeru 3), dolžina niza s 1: s 1 = 5, dolžina niza s 2: s 2 = 8, transpozicija t: t = 0, Jaro vrednost d j : d j = ( + + ) = , dolžina enake predpone l: l = 2, Jaro-Winkler vrednost d w (p=0.1): d = (2 0.1 ( )) = w

51 Reševanje časovno zahtevnih opravil z orodjem ORACLE 41 Da bi dobili boljši občutek opredelitve pojma podobnih nizov, si poglejmo naslednji primer (primer 23), ki prikazuje primerjavo niza 'ERVIN' z različno podobnimi nizi. V primeru smo tudi označili vrednosti Jaro-Winkler razdalj, ki opredeljujejo t.i. območje podobnih nizov. Primer 23: Približevanje Jaro-Winkler vrednosti k popolnemu zadetku Optimizacija algoritma Razkrili smo, kako deluje Jaro-Winkler algoritem, prikazali matematični postopek izračuna Jaro-Winkler dolžine, s tem pa tudi določene omejitve algoritma. Prikazali bomo kako ga je moč še nekoliko razširiti z namenom, da bi obšli njegove omejitve za specifična opravila. Tako bomo algoritem podrobno analizirali ter ga ustrezno podredili našim ciljem. Prikazali bomo proces optimizacije, ki temelji na podrobni analizi algoritma z iskanjem ozkih grl. Algoritem smo modificirali za potrebe doseganja želenih rezultatov in predvsem optimalnega delovanja v določenem specifičnem okolju.

52 Reševanje časovno zahtevnih opravil z orodjem ORACLE 42 Razširitev algoritma za potrebe izračuna Jaro-Winkler razdalje besednih zvez Kot smo že prej omenili, je Jaro-Winkler algoritem najbolj primeren za primerjavo, oz. izračun razdalje dveh krajših primerjalnih nizov, kot so imena oseb. Če bi želeli opraviti primerjavo besednih zvez, morebiti polnega imena oseb (ime in priimek), je potrebno algoritem razširiti za tovrstne namene. Podoben problem predstavlja iskanje dvojnih zapisov, kjer je iskanje oteženo, če v dveh virih besede niso razporejene v enakem vrstnem redu. Besedne zveze bomo razdelili na posamezne besede [2] in jih medsebojno primerjali z besedami v drugem nizu. Če primerjava besed v prvem nizu sovpada z več kot eno besedo v drugem nizu, bomo privzeli, da beseda sovpada samo s tisto, pri kateri smo dobili največjo vrednost razdalje. Ko smo dobili ocenitev posameznih besed v nizih, lahko proporcialno na število besed in njihovih dolžin izračunamo skupno oceno primerjave. Predpostavke optimizacije algoritma: 1. primerjava besednih zvez, več besed naenkrat, 2. vrstni red primerjalnih nizov besed ni enak. Postopek optimizacije algoritma: 1. besedne zveze v obeh primerjalnih nizih razdelimo na posamezne besede (ločevanje glede na presledek), 2. posamezno besedo prve besedne zveze primerjamo z vsemi besedami vsebovanimi v drugi besedni zvezi, izračunamo njihove posamezne Jaro-Winkler razdalje, 3. sovpadanje dveh besed, opredelimo z največjo vrednostjo izračunane Jaro-Winkler razdalje (različni vrstni red besed), kar predstavlja tudi Jaro-Winkler razdaljo posamezne besede, 4. rezultat Jaro-Winkler razdalje dveh besednih zvez je proporcionalna porazdelitev izračunanih razdalj posameznih besed, ki jih dodatno obtežimo z najmanjšim številom besed v besednih zvezah. Ker računamo vsebnost ene besedne zveze v drugi, vzamemo besedno zvezo z najmanjšim številom besed in na ta način je kljub različnemu število besed, možno doseči popolno ujemanje, vrednost razdalje 1.

53 Reševanje časovno zahtevnih opravil z orodjem ORACLE 43 Iz zgornjega opisnega postopka, pridemo do naslednjih matematičnih enačb: s s d d 1 2 = = w, s w, s { s1,1, s1,2,..., s1, a}, { s, s,..., s }, 1, x 2, y 2,1 = max = max c = min( a, b), 1 w =, c a <= b : d w 2,2 2, b ( dw, s s w s s w s s ) { } x,, d, x,,..., d, x a x,, 1,...,, 1, 2,1 1, 2,2 1, 2, b ( d, d,..., d ), y { 1,..., b}, w, s = w 2, y a, s x= 1 1,1 d w, s w, s x, i 2, y, s 1, 2, a > b : d w w, s 2, y, s = w 1, a b y= 1 d w, s 2, y (4.4) kjer je: s 1 - besedna zveza prvega primerjalnega niza, s 2 - besedna zveza drugega primerjalnega niza, d w,s - Jaro-Winkler razdalja besede v primerjalni besedni zvezi s, c - najmanjše število vsebovanih besed v besednih zvezah, w - utež, porazdelitev razdalj glede na najmanjše število besed, d w - Jaro-Winkler razdalja primerjalnih besednih zvez. Optimizacija algoritma z vpeljavo praga V rezultatu nas bolj zanima mera podobnosti, kot pa sam izračun Jaro-Winkler razdalje. Zaradi tega je smiselna vpeljava praga, ki določa spodnjo meja Jaro-Winkler razdalje, ki je še zanimiva. Tako nize, ki vračajo manjšo Jaro-Winkler razdaljo z našim primerjalnim nizom, kar ignoriramo ali običajno kar enačimo razdaljo z 0. S tem si pomagamo razločevati podobne in nepodobne nize, mi pa bi na osnovi praga, želeli še vpeljati proces optimizacije. Tako ne bi po nepotrebnem izvajali celotnega algoritma in bi že v njegovih predhodnih fazah ocenili ali je moč na podlagi delnih rezultatov doseči želeni prag.

54 Reševanje časovno zahtevnih opravil z orodjem ORACLE 44 Predpostavke optimizacije algoritma: 1. vpeljava praga, 2. primerjava delnih rezultatov; ali lahko dosežemo postavljen prag: 2.1 glede na najmanjše število besed v besednih zvezah, lahko ocenimo najmanjšo vrednost Jaro-Winkler razdalje posamezne besede in ugotovimo, da še lahko dosežemo prag skupne Jaro-Winkler razdalje, 2.2 vse opravljene delne izračune, podredimo zgornji predpostavki (2.1) in na ta način sproti ocenjujemo ali je moč doseči želeni prag. Postopek optimizacije algoritma: 1. določimo prag (konstanto), ki opredeljuje njegovo najmanjšo vrednost, 2. primerjamo karakteristike posameznih besed (iz besednih zvez) in ocenjujemo zmožnost dosega postavljenega praga: 2.1. glede na postavljen prag izračunamo najmanjšo sprejemljivo vrednost Jaro- Winkler razdalje posamezne besede (besedne zveze z najmanjšim številom besed), 2.2. naredimo primerjavo dolžin dveh besed z najmanjšim številom besed v besednih zvezah, ter izločimo iz nadaljnje primerjave nize, ki bi tvorili zanemarljive vrednosti Jaro-Winkler razdalje, 2.3. preverimo, koliko enakih znakov imata primerjalna niza in to število enakih znakov delimo z najmanjšim številom besed v besednih zvezah. Na podlagi rezultata ocenimo, če je s tako enakostjo znakov moč doseči nastavljen prag, 2.4. izračunavamo Jaro-Winkler razdalje posameznih besed v besednih zvezah, jih seštevamo in pregledujemo možnost dosega želenega praga skupne Jaro- Winkler razdalje besednih zvez.

55 Reševanje časovno zahtevnih opravil z orodjem ORACLE 45 Iz zgornjega opisnega postopka, pridemo do naslednjih matematičnih enačb: s s = x d = { s1,1, s1,2,..., s1, x,..., s1, a}, { s, s,..., s,..., s }, { 1,..., a}, y { 1,..., b}, c = min( a, b), d 1 2 m m w, T x, y x, y c, x, y = T c = = m s = s n <= m : d kjer je: s 1 s 2 c T 2,1 d w,t, 1, x [, s ], m 1, x x, y c 2,2 w, k, = ( s c) 2, y 2, y c k= 1 2, y d s 1, c 2, b, n > m : d ( min( s, s ) c) 1, x 2, y + 2 w, k = c k= 1 d s 2, c,, - besedna zveza prvega primerjalnega niza, - besedna zveza drugega primerjalnega niza,, (4.5) - najmanjše število vsebovanih besed v besednih zvezah, - prag Jaro-Winkler razdalje, - mejna Jaro-Winkler razdalja posamezne besede, d x,y - razlika dolžin primerjalnih besed s 1,x in s 2,y glede na c, m x,y - število enakih znakov primerjalni besed s 1,x in s 2,y, m c,x,y - število enakih znakov primerjalni besed s 1,x in s 2,y glede na c, d w,k - seštevek posameznih Jaro-Winkler razdalj besed, od 1 do k. Pogoji za nadaljevanje postopka: d x,y > 0, m c,x,y > (T - 1,5), d w,k + (c-k) d w,t T.

56 Reševanje časovno zahtevnih opravil z orodjem ORACLE : Diagram poteka Jaro-Winkler optimizacije s pragom.

57 Reševanje časovno zahtevnih opravil z orodjem ORACLE Simulacija večnitenja Velikokrat se srečamo z opravili pri katerih nam zmanjkuje idej kako bi jih lahko optimizirali v smislu njihovega delovanja ter izrabe razpoložljivih virov. Sodobni objektno usmerjeni programski jeziki imajo na razpolago koncept, ki mu pravimo večnitenje. S tem konceptom je moč optimizirati opravila, na način razbitja na več neodvisnih odsekov. Izraz je prenesen iz java programiranja, kjer večnitnost oz. večnitenje, (angl. multithreading) [9], pomeni sočasno izvajanje več procesov znotraj istega programa. Pogoj za večnitenje je, da obstaja možnost, da se program razbije na več neodvisnih odsekov. Operacije, ki jih lahko razdelimo na več neodvisnih odsekov, implementiramo v individualnih nitih (angl. threads) [27], ki tečejo paralelno oz. sočasno. Večnitnost poveča propustnost in odzivnost sistema, ker izrablja zmožnost sočasnega izvajanja ukazov sodobnih eno in večprocesorskih sistemov. Torej pošljemo hkrati na procesor več zahtev različnih odsekov kode, ki jih potem obdeluje. Pri večprocesorskih sistemih je zadeva veliko bolj izrabljena, ker imamo tam več procesorjev in je možno paralelno izvajanje niti. Kot dodatek k boljši zmogljivosti pa še pripomore sočasno izvajanje več ukazov na posameznem procesorju. Predstavimo nekaj prednosti večnitenja: večja izraba procesorskega časa, boljša sistemska zanesljivost, izboljšana zmogljivost večprocesorskih sistemov. Torej osnova za večnitenje so niti, nad katerimi so omogočeni vpogledi v stanja, v katerih se v vsakem trenutku nahajajo in izvajajo določene operacije, akcije, potrebne za popoln nadzor nad njimi. Slika 4.2: Koda programa, proces, več niti.

58 Reševanje časovno zahtevnih opravil z orodjem ORACLE 48 ORACLE v jeziku PL/SQL ne omogoča tovrstnega koncepta. Mi smo ta koncept v jeziku PL/SQL simulirali. Pomagali smo si s paketom DBMS_SCHEDULER v jeziku PL/SQL Predstavitev paketa DBMS_SCHEDULER Paket DBMS_SCHEDULER[12] omogoča časovno porazdeljevanje opravil na ORACLE strežniku in celovito kontrolo nad njimi. Prvoten paket za tovrstne namene DBMS_JOB, prejšnje verzije Oracle DB, je bil, zaradi premajhne učinkovitosti nad izvajanjem in časovnim prazdeljevanjem opravil, s tem paketom nadgrajen. Opravilom lahko definiramo njihov čas zagona, ponovitveni interval in druge parametre, ki definirajo vsebino in zagon samega opravila. Opravilo je lahko podprogram, procedura, funkcija in tudi binarna ali ukazna skripta. Osnovni namen paketa je ustvarjanje opravil in ponastavljanje različnega časa njihovega zagona, kar omogoča še kompleksnejše operacije nad časovnim razporejanjem opravil. Opravilo se ob nastavljenem času zagona avtomatsko zažene. Izvajanje opravil je kontrolirano, zavedeno v posebne tabele, ki omogočajo pregled nad njihovim izvajanjem. Morebitne napake ob zagonu ali izvajanju, kdaj in kako dolgo se je opravilo izvajalo, itd. Paket vsebuje več gradnikov in podprogramov, ki omogočajo kreiranje opravil. Oglejmo si gradnike, ki so za nas pomembni: PROGRAM programska koda opravila, ki se bo izvajala, se naloži v pomnilnik strežnika, PROGRAM ARGUMENT vhodni parameter programske kode opravila, SCHEDULE definira frekvenco in čas zagona enega ali več opravil, JOB predstavlja eno opravilo in njene nastavitvene parametre zagona. Podrobneje jih bomo obravnavali skozi predstavitve posameznih podprogramov paketa.

59 Reševanje časovno zahtevnih opravil z orodjem ORACLE 49 Tabela 3: Pomembnejše metode paketa DBMS_SCHEDULER. Metoda CREATE_JOB Procedura ustvari opravilo. Definiramo lahko razpoznavno ime, ime programa za zagon, čas zagona, ponovitveni interval-frekvenco, vključevanje, izključevanje in komentar opravila. DROP_JOB Procedura izbriše opravilo. Definirati je potrebno ime opravila in ponastaviti zastavico,; v primeru, da naj opravilo izbriše, tudi če je v izvajanju. STOP_JOB Procedura ustavi zagon opravil, ga pa ne izbriše iz razporejevalnika opravil. Definirati je potrebno ime opravila in ponastaviti zastavico, če se naj opravilo ustavi, tudi če je v izvajanju. CREATE_PROGRAM Procedura naloži v pomnilnik strežnika programsko kodo, ki jo imenujemo program in jo lahko preko razporejevalnika opravil zaganjamo. Definiramo razpoznavno ime, tip, vsebnost, število argumentov, vključevanje/izključevanje in komentar programa. DEFINE_PROGRAM_ARGUMENT S proceduro definiramo posamezen argument programa. Preko vhodnih argumentov je potrebno definirati, program za katerega gre, številčni vrstni red, ime, tip in privzeto vrednost argumenta. CREATE_SCHEDULE S proceduro definiramo konstrukt SCHEDULE, ki definira frekvenco in zagonski čas opravil znotraj konstrukta. DROP_SCHEDULE S proceduro predhodno definiran konstrukt SCHEDULE izbrišemo. Definirati je potrebno ime konstrukta in ponastaviti zastavico, če naj opravila izbriše, tudi če so katera v izvajanju. SET_JOB_ARGUMENT_VALUE S proceduro definiramo vrednosti posameznih parametrov opravila. Definirati je potrebno ime opravila, ime argumenta in njegovo vrednost. ENABLE S proceduro vključimo željen konstrukt, ki ga specificiramo z njegovim imenom. Običajno so konstrukti ob definiciji izključeni in jih tako pred vključitvijo ni moč uporabiti. Sintaksa DBMS_SCHEDULER.Create_job( job_name => 'DEMO_JOB_SCHEDULE',program_name => 'DEMO_PROGRAM',start_date => '01/01/ :00 AM',repeat_interval => 'FREQ=DAILY',enabled => TRUE,comments => 'Demo for job schedule.'); DBMS_SCHEDULER.Drop_job ( job_name => 'DEMO_JOB_SCHEDULE',,force => FALSE); DBMS_SCHEDULER.STOP_JOB ( job_name=> 'DEMO_JOB_SCHEDULE',,force => FALSE); DBMS_SCHEDULER.Create_program ( program_name => 'DEMO_JOB_SCHEDULE',program_type => 'STORED_PROCEDURE',program_action => 'package.procedure',number_of_arguments => 1,enabled => FALSE,comments => 'Demo for job schedule.'); DBMS_SCHEDULER.Define_program_argument ( program_name => 'DEMO_JOB_SCHEDULE',argument_position => 1,argument_name => 'arg1',argument_type => 'VARCHAR2',default_value => 'default' ); DBMS_SCHEDULER.Create_schedule( schedule_name => 'DEMO_SCHEDULE',start_date => '01/01/ :00:00',repeat_interval => 'FREQ=WEEKLY',comments => 'Weekly at 22:00'); DBMS_SCHEDULER.Drop_schedule( schedule_name => 'DEMO_SCHEDULE',force => TRUE ); DBMS_SCHEDULER.Set_job_argument_value( job_name => 'DEMO_JOB1',argument_name => 'arg1',argument_value => 'arg1_val'); DBMS_SCHEDULER.Enable( name => 'DEMO_ENABLE1'); ORACLE omogoča za potrebe paketa DBMS_SCHEDULER tudi pregled (monitoring) nad razporejanjem in izvajanjem opravil. V ta namen ima Oracle DB 10g zgrajene

60 Reševanje časovno zahtevnih opravil z orodjem ORACLE 50 določene tabele, oz. hitre tabele (angl. view), v katerih se zbirajo najrazličnejše informacije o prej predstavljenih gradnikih, o časovnem razporejanju opravil in njihovem izvajanju: DBA_SCHEDULER_JOB_RUN (izvedena opravila), DBA_SCHEDULER_RUNNING_JOBS (opravila, ki trenutno tečejo), DBA_SCHEDULER_JOB_LOG (logiranje o izvajanju opravil), DBA_SCHEDULER_SCHEDULES (ustvarjeni, naloženi gradniki SCHEDULE), DBA_SCHEDULER_JOBS (ustvarjena opravila), DBA_SCHEDULER_PROGRAMS (naloženi programi opravil), DBA_SCHEDULER_PROGRAM_ARGS (argumenti naloženih programov). Omenili bi še, da so za njihov vpogled potrebne administracijske pravice. 4.3: DBMS_SCHEDULER, pregled nad izvajanjem opravil. Vsako opravilo, ki ga prožimo preko časovnega razporejevalnika opravil, dobi svojo sejo (angl. session). Kaj pa to pomeni? Znotraj vsake seje se zgradi s strani strežnika okolje (angl. environment), v katerem se izvajajo aktivnosti (opravila) nad strežnikom. Torej vsako opravilo dobi svojo sejo, v kateri se izvaja. Najpomembnejše pa je, da ne moti drugih sočasno izvajanih opravil. Ta posebnost nam pomaga simulirati želeno večnitenje.

61 Reševanje časovno zahtevnih opravil z orodjem ORACLE Razbitje opravila na podopravila in sočasno izvajanje podopravil Kot smo že prej omenili, rabimo za večnitenje zmožnost razbitja opravil na več neodvisnih odsekov, t.i. podopravil. Pri taki organizaciji okolja kot je ORACLE, pa je razbitje opravil zaradi podatkov shranjenih v podatkovni bazi, oz. razvoja poslovne logike, ki temelji na njih, na podopravila toliko bolj mogoče. Vsaka tabela v podatkovni bazi, ima za enolično identifikacijo posamezne vrstice, definirane primarne in sekundarne (tuje) ključe. V primeru, da nam taka organizacija odpove, se lahko tudi sklicujemo na označevalnik vrstice ROWNUM, ki ga kot privzetega dobi vsaka vrstica tabele. Ta označevalnik vrstice prav tako enolično definira posamezno vrstico (zaporedje vrstic). Tako je v ORACLE okolje, možno vpeljati razločevanje posameznih odsekov podatkov, le obdelave je potrebno primerno temu preoblikovati Simulacija niti Za simulacijo večnitnosti bomo tako morali definirati oz. simulirati konstrukt nit (angl. Thread) [28]. Nit mora v prvi vrsti biti sposobna neodvisnega izvajanja od drugih delov programske kode in posedovati zmožnost vzporednega izvajanja z drugimi nitmi. Ta teza pa nas napeljuje na to, kar smo že na koncu prejšnjega poglavja omenili. Opravila znotraj časovnega razporejevalnika se izvajajo vsaka v svojem okolju, torej neodvisno od drugih delov kode. Prvemu delu teze smo zadostili. Potrebno je poskrbeti še za sočasno izvajanje niti. Če nastavimo zagon večih opravil na isti čas, smo zadostili tudi drugemu delu teze, saj se bodo tako vse začele izvajati ob istem času.

62 Reševanje časovno zahtevnih opravil z orodjem ORACLE 52 Kaj vse torej potrebujemo: zapisan podprogram v jeziku PL/SQL, ki bo opravil obdelavo enega odseka; običajno bo odsek omejen s vhodnimi parametri, s pomočjo časovnega razporejevalnika, paketa DBMS_SCHEDULER, ustvarimo konstrukt PROGRAM, ki bo v pomnilnik strežnika naložil prej zapisano programsko kodo podprograma in mu po potrebi tudi definiramo njegove pripadajoče vhodne parametre, ustvarimo opravilo, konstrukt JOB, ki bo ob določenem času zagnal naš prej definiram program s pripadajočimi vrednostmi vhodnih parametrov. Za takojšnjo izvedbo opravila nastavimo, ob klicu metode Create_job, parametra repeat_interval in start_date na NULL. Sedaj, ko smo zadostili vsem pogojem prejšnje teze in navedli kaj vse potrebujemo, lahko definiramo naš konstrukt niti v jeziku PL/SQL.

63 Reševanje časovno zahtevnih opravil z orodjem ORACLE 53 Primer 24: Definicija niti v jeziku PL/SQL. Predpostavimo, da imamo opravilo, ki ga je možno razdeliti na več neodvisnih odsekov. Posamezne odseke bomo implementirali s prej definiranim konstruktom niti. V praksi običajno tovrsten koncept ni najbolj domač za PL/SQL programerje. Opravilo bi želeli

64 Reševanje časovno zahtevnih opravil z orodjem ORACLE 54 klicati kot klasičen podprogram, ne da bi se ukvarjali s posameznimi nitmi. Poenostavitev opravimo na način, da ustvarimo povezovalno okolje, t.j., člen med posameznimi nitmi, ki jih bo dinamično ustvarjalo, bedelo nad njihovim izvajanjem in ustrezno ukrepalo na morebitne izjeme ter združevalo rezultate posameznih niti. Ob predstavitvi jezika PL/SQL smo med drugim predstavili gradnik paket, PACKAGE. Paket združuje nek skupek PL/SQL kode in gradnikov, ki zagotavlja določen segment storitev in v našem primeru bi to lahko bila manipulacija z nitmi. Kar pa je najpomembneje je to, da ima gradnik paket omejeno delovanje na sejo. Torej vsaka seja operira s svojo ustvarjeno instanco paketa, kar z drugimi besedami pomeni, da vsaka seja dobi svoj paket in operira s svojimi, lastnimi vrednostmi, stanji. Torej znotraj paketa, t.i. povezovalnega okolja, bomo ustvarili vse potrebne mehanizme za učinkovito delo, manipulacijo z nitmi. Sedaj pa lahko za uporabnike te simulacije večnitnega delovanja v jeziku PL/SQL, uporabo tudi nekoliko poenostavimo. Najprej bomo ustvarili podprogram, ki bo vršil obdelavo enega odseka, segmenta, nato bomo definirali konstanto, ki pa bo predstavljala na koliko posameznih odsekov se naj opravilo razbije. Na koncu pa bomo ustvarili podprogram, ki bo dinamično generiral niti posameznega odseka in tako z globalnega, uporabnikovega vidika, predstavljal naše opravilo.

65 Reševanje časovno zahtevnih opravil z orodjem ORACLE 55 Slika 4.4: Izvajanje opravila z nitmi. Predstavljen koncept simulacije večnitenja si lahko tudi predstavljamo, kot da se več uporabnikov prijavi na ORACLE sistem. Vsak ima svojo sejo, v kateri za nas izvaja en odsek opravila. Zgleda zelo preprosto in mogoče zares ne vidimo pravega doprinosa tega koncepta. Ker ORACLE strežnik izvaja že večnitenje na sistemskem nivoju, mi pa pošiljamo več vzporednih zahtev v izvajanje na strežnik, prisilimo strežnik, da jih obravnava naenkrat in jih vključi v svoj proces večnitenja na sistemskem nivoju. Torej gre za neke vrste prehod iz simulacije večnitenja na PL/SQL nivoju v pravo večnitenje na sistemskem nivoju.

66 Reševanje časovno zahtevnih opravil z orodjem ORACLE 56 Slika 4.5: Časovni vidik sočasnega izvajanja večih niti. Za ugotavljanje težav pri izvajanju niti v povezovalno okolje nad nitmi uvedemo nadzorne mehanizme, ki bodo bdeli nad samim njihovim izvajanjem Nadzorni mehanizmi Da bi lahko izvajali popoln nadzor nad nitmi, uvedemo koncept monitorjev. Monitor je nadzorno okno, ki hrani vse informacije izvajajočih se niti in vrši kontrolo nad izvajanjem, ter poskrbi za njihovo sinhronizacijo. Monitor na eni strani predstavlja hranjenje in spremljanje informacije o definiranih nitih, kot so identifikacija, opis, namen, skupina niti (lahko je tudi sestavni del skupka večih niti), čas izvajanja, podatki o morebitnih izjemah (do katerih lahko pride ob samem izvajanju) in stanje, v katerem se nahaja v vsakem trenutku. Drugo stran monitorja pa predstavlja nadzorno-sinhronizacijski mehanizem, ki v vsakem trenutku odreagira na posamezna njihova stanja. Da dejansko realiziramo en tak monitor, je potrebno uvesti naslednje gradnike: tvoriti seznam informacij o izvajanju niti, ustvariti nadzorno-sinhronizacijski del: o vpeljava stanj niti, o uporaba vgrajenih podprogramov paketa DBMS_SCHEDULER, o implementacija kontrolnega mehanizma, kontrolna nit, o implementacija očiščevalnega mehanizem, očiščevalna nit.

67 Reševanje časovno zahtevnih opravil z orodjem ORACLE 57 Najprej je potrebno narediti ustrezen entitetno-relacijski model za hrambo informacij o nitih, medtem ko za začasno hrambo potrebnih podatkov lahko služi vpeljava ustreznih objektnih tipov v povezovalnem okolju. Nato dogradimo naše niti, tako da se bodo ustrezne informacije ob samem izvajanju tudi zapisovale. Ker smo že prej omenili, so za potrebe paketa DBMS_SCHEDULER že vnaprej definirane tabele za pregled nad izvajanjem opravil, lahko določene informacije, ki so za nas pomembne. Črpamo kar iz njih, jih prenašamo v naš monitor in dodamo še dodatne, za nas pomembne informacije. Najlažja rešitev je vpeljava hitrih tabel (angl. view), ker tako ne podvajamo zapisov. Slika 4.6: Monitor, dodatne informacije za potrebe pregleda nad izvajanjem niti. Sedaj lahko v vsakem trenutku (angl. real-time) spremljamo izvajanje posameznih niti. Za popolni monitor pa nam manjka samo še nadzorno-sinhronizacijski mehanizem. Omenili smo, da ima vsaka nit stanje [8]. Stanja, v katerih se lahko nit nahaja, so: NEW, RUNNABLE, DEAD, BLOCKED, COMPLETED. Prehajanju niti iz enega stanja v druga, pravimo življenjski cikel niti. Slika 4.7: Življenjski cikel niti.

68 Reševanje časovno zahtevnih opravil z orodjem ORACLE 58 Razložimo posamezna stanja niti. Nit se v stanje NEW postavi na začetku, ko se ustvari. Takoj, ko se začne izvajati, se prestavi v stanje RUNNABLE. Prehajanje v vsa naslednja stanja pa je povezano z njihovim izvajanjem. Stanje DEAD pomeni, da je prišlo do napake pri izvajanju niti in pomeni tudi konec življenja niti. V stanje BLOCKED se postavi v primeru napake na eni izmed soodvisnih niti (ta je v stanju DEAD) in se izvajanje niti prisilno zaustavi. V nekaterih primerih je možen tudi prehod iz stanja BLOCKED nazaj v stanje RUNNABLE, tako da nit nadaljuje opravilo od mesta, kjer je prej bila zaustavljena. V vsakem primeru pa se pa prej ponovno zažene soodvisna nit, pri kateri je prišlo do napake. V končno, tudi najbolj zaželeno stanje COMPLETED, se nit postavi, ko se do konca uspešno izvede. To stanje prav tako odraža konec življenja niti. V vsako izmed stanj, lahko nit preide iz določenih razlogov in na vsako stanje moramo imeti tudi ustrezen odgovor. Tej tezi pravimo kar popolni nadzor nad nitmi (angl. full control on threads). Nadzorni mehanizem bo sestavljen iz dveh dodatnih niti. Prva nit se bo imenovala nadzorna nit (angl. control thread), druga pa očiščevalna nit (angl. garbage collector-thread). Tudi ti dve niti bomo definirali na enak način. Program za kontrolno nit bo izvajal pregled nad nitmi, postavljal njihova stanja in ustrezno reagiral na njih. Ena od reakcij kontrolne niti na stanja bo proženje očiščevalne niti. Ko bo posamezna nit prišla do konca (zaključena, blokirana ali napaka), bo kontrolna nit sprožila očiščevalno nit. Naloga programa očiščevalne niti je sproščanje sistemskih virov. V našem primeru bo očiščevalna nit brisala posamezne niti, ki so še prisotne v razporejevalniku opravil. Ena izmed operacij v očiščevalni niti bo proženje metode Drop_job paketa DBMS_SCHEDULER. Implementacijo nadzorno-sinhronizacijskega mehanizma nam v veliki meri olajšajo predstavljene vgrajene metode paketa DBMS_SCHEDULER (poglavje 4.2.1). Omogočajo nam nadzor in kontrolo nad opravili, posledično pa manipulacijo z našimi nitmi. Tako za potrebe implementacije prisilnih prekinitev niti, uporabljamo metodi Stop_job in Drop_job.

69 Reševanje časovno zahtevnih opravil z orodjem ORACLE 59 Slika 4.8: Simulacija niti in nadzornega mehanizma v jeziku PL/SQL.

70 Reševanje časovno zahtevnih opravil z orodjem ORACLE Čakalne vrste in proženje niti v ozadju Zamislimo si, da imamo časovno problematično opravilo. Opravilo se mora izvesti kolikor hitro se le da, nanj pa vežemo še dodatno opravilo. Postavljeni smo pred zelo velik izziv. Reševanje tovrstnih težav smo si zamislili z naslednjim konceptom: uvedbo čakalnih vrst [15] in izvajanje dodatnega bremena v ozadju, v nitih. Čakalne vrste same po sebi ne rešujejo težav, kajti bremena bi se tam le kopičila in čakala na t.i. strežbo. Čakalno vrsto smo uvedli zaradi možnosti strežbe dodatnih opravil, ki so običajno istega tipa, lahko pa tudi različnega tipa, odvisno od tega, kako bomo zasnovali koncept in predvsem kakšne so naše zahteve. Dodatna opravila bomo navedli v čakalno vrsto. Za strežbo bomo ustvarili dodatno nit, ki bo, po vrstnem redu tako kot so bremena prihajala v čakalno vrsto [23], jih jemala iz čakalne vrste in pošiljala v strežbo. Dodatna nit dejansko ne bo bremen jemala iz čakalne vrste, ampak bo zapisane informacije o bremenu prebrala iz čakalne vrste. Iz teh informacij bo ustvarila ustrezno nit, ki bo specifično opravilo izvedla. Nit bo informacije zapisane o bremenu izbrisala iz čakalne vrste in ponavljala ta postopek na preostalih bremenih v čakalni vrsti. Torej gre za zapis informacij o identifikaciji bremena v čakalno vrsto in izvajanju dodatnega bremena v ozadju. S tem pa smo osnovno opravilo obremenili le za toliko časa, kolikor ga je potrebovalo, da je informacije o dodatnem opravilu zapisalo v čakalno vrsto. S tem pa je izgubilo relativno malo časa. Dosegli smo ne le izvajanje strežb v ozadju, ampak dejansko izvajanje večih opravil naenkrat. Slika 4.9: Koncept dodatnega opravila s čakalno vrsto in izvajanjem niti v ozadju.

71 Reševanje časovno zahtevnih opravil z orodjem ORACLE Izvedba v okolju Oracle Forms 6.0 Orodje Oracle Forms [13] je namenjeno razvoju grafičnih oz. uporabniških vmesnikov (GUI) v okolju ORACLE. Orodje omogoča razvijanje vnosnih ter preglednih mask, ki služijo upravljanju s poslovnimi procesi. Okna se povežejo s podatki podatkovne baze Oracle DB preko blokov, ki predstavljajo posamezno tabelo ali tudi skupek tabel. Za potrebe manipulacije s podatki in izvedbo želenih akcij, so na voljo raznovrstni prožilci (angl. trigger) v katerih pišemo PL/SQL kodo in kličemo poslovno logiko iz podatkovne baze Oracle DB. Prožilci vsebujejo tudi nekaj gradnikov, ki so namenjeni predvsem upravljanju grafične podobe oken ter manipulaciji njihovega obnašanja. Omenili smo, da lahko v Oracle Forms kličemo poslovno logiko, oz. gradnike zgrajene v podatkovni bazi Oracle DB. Torej že v osnovi nam omogoča klicanje konceptov predstavljenih v prejšnjih poglavjih, ampak s tem se zgolj izvede določen proces na nivoju podatkovne baze. Proženje simulacije večnitenja iz okolja Oracle Forms je na ta način omogočeno. S tem se res začne izvajati nit v ozadju, ampak okolje Oracle Forms izgubi stik. V tem primeru ne dobimo povratne informacije o izvršitvi niti. Da pa lahko spremljamo izvršitev prožene niti, lahko za te namene uporabimo gradnik TIMER, ki je sestavni del Oracle Forms 6.0 okolja. Gradnik TIMER nam omogoča specificiranje želenega časovnega zamika, po katerem se proži prožilec When-Timer-Expired. Torej gre za časovno kontrolirano proženja nekega dogodka, specifično prožilca When-Timer-Expired. Tako lahko v omenjeni prožilec dodamo programsko kodo, kodo jezika PL/SQL, ki se bo po prej specificiranem časovnem zamiku začela izvajati. Dodatna posebnost tega gradnika je, da se izvaja v ozadju, prav tako kot naše niti, in tako ne onemogoča izvedbo drugih akcij na oknu.

72 Reševanje časovno zahtevnih opravil z orodjem ORACLE 62 Primer 25: Definicija gradnika TIMER v Oracle Forms okolju. Primer 26: Poslušanje prožilca When-Timer-Expired v Oracle Forms okolju. Primer 27: Uničevanje objekta TIMER v Oracle Forms okolju. Navedli smo, da za spremljanje, kontroliranje in sinhroniziranje niti imamo ustvarjeno povezovalno okolje (paket). Torej so vse informacije skrite znotraj našega povezovalnega

73 Reševanje časovno zahtevnih opravil z orodjem ORACLE 63 okolja. Da pa bi v nedogled pogledovali v povezovalno okolje, ne bi s tem nič pridobili. Tako bi samo ustvarjali proces na oknu, ki bi nam pa onemogočal izvedbo drugih akcij (ob izvajanju klasičnega procesa na oknu, je okno vse do njegove popolne izvedbe v stanju čakanja). Ker pa ima gradnik TIMER to posebnost, da se izvaja v ozadju in da mu lahko specificiramo določen časovni zamik, pa je za naše potrebe idealen. Tako bomo sedaj ustvarili gradnik TIMER, mu določili nek predviden časovni zamik, po katerem bo sprožil prožilec When-Timer-Expired, in v njega dodali PL/SQL kodo, ki bo poizvedovala v povezovalnem okolju o izvedbi naše niti. Ko se bo izvedla nit, pa bomo zaključili delovanje gradnika TIMER, saj ga ne bomo več potrebovali. Ob ponovni zahtevi zagona niti, pa ga ponovno ustvarimo. Sedaj se lahko procesi izvajajo večnitno, posledično pa lahko tudi ta koncept implementacije prenesemo na večnitno delovanje samih. Vso poslovno logiko enega okna implementiramo v naših nitih, poslušamo delovanje niti s pomočjo gradnika TIMER, s čimer pa dosežemo, da se vsako okno izvaja zase in deluje v svojem okolju delovanja niti, neodvisno od drugih oken.

74 Reševanje časovno zahtevnih opravil z orodjem ORACLE 64 Slika 4.10: Diagram poteka poslušanja izvedbe niti.

75 Reševanje časovno zahtevnih opravil z orodjem ORACLE 65 5 PRAKTIČNI PRIMERI UPORABE V tem delu diplomskega dela bomo predstavili praktične primere uporabe, v katerih smo prej predstavljene optimizacije uporabili, oz. jih implementirali. Osredotočili smo se na implementacijo storitev za potrebe preprečevanja pranja denarja (PPD) v bančnem informacijskem sistemu, ki temelji na osnovi podatkovne baze Oracle DB, jezika PL/SQL in okenskem okolju Oracle Forms. Pranje denarja je aktivnost [25], s katero se na videz spremeni izvor nezakonito pridobljenega denarja in zgleda, kot da je bil pridobljen na zakonit način. Finančne inštitucije so eden izmed najbolj izpostavljenih kanalov. Za učinkovit spopad s to vrsto problematike so se države članice EU zavezale, da okrepijo aktivnosti na tem področju. Državni zbor Republike Slovenije (RS) je v skladu z evropsko zakonodajo sprejel Zakon o preprečevanju pranja denarja in financiranja terorizma (ZPPDFT) [30], kjer je Banka Slovenije (BS) pristojna za nadzor nad izvajanjem določb zakona v bančnem sektorju, hkrati pa ji je dodeljena tudi vloga prekrškovnega organa. Za celovito in sistematično izvajanje vseh predpisanih zahtev na področju preprečevanja pranja denarja in financiranja terorizma (PPDFT), se je temu primerno oblikoval sistem za PPDFT. Slika 5.1: Sistem za preprečevanje pranja denarja in financiranje terorizma.

76 Reševanje časovno zahtevnih opravil z orodjem ORACLE 66 Pregled stranke je ključni element v tem sistemu, kjer se s pregledom stranke na verodostojen način ugotovi in potrdi identiteto stranke ter spozna namen oziroma predvideno naravo poslovnega razmerja z razlogom, da zmanjša tveganje poslovanja s stranko. Poznamo tri različne preglede strank, ki se ločijo po tem, kakšno raven tveganja predstavlja stranka, oz. samo poslovno razmerje med stranko in banko. Osredotočili smo se na običajen pregled stranke, ki je tudi najbolj pogost oz. aktualen pregled stranke. Tabela 4: Ukrepi za potrebe preprečevanja pranja denarja, običajen pregled stranke. Ena izmed aktivnosti običajnega pregleda stranke je preverjanje seznama Evropskega bančnega združenja (FBE). FBE pripravlja konsolidirano bazo oseb, oz. t.i. črno listo. Črna lista zajema seznam vseh oseb, fizičnih in pravnih, zoper katere so uvedeni mednarodni omejevalni ukrepi prepovedi opravljanja finančnih storitev. FBE pripravlja in posodablja to bazo podatkov ter jo tudi javno objavlja, da je dostopna določenim z zakonom predpisanim inštitucijam, med katerimi so tudi banke. Črna lista je dostopna v elektronski obliki in je zapisana v jeziku XML 11. Vse implementacije naših storitev, so zgrajene okrog te črne liste, kjer gre predvsem za raznovrstna iskanja sovpadanja oseb, strank, poslovnih partnerjev z zapisi na črni listi. 11 Elektronska povezava:

77 Reševanje časovno zahtevnih opravil z orodjem ORACLE 67 Slika 5.2: Izsek objavljene črne liste. 5.1 Iskanje zadetkov na črni listi za potrebe preprečevanje pranja denarja Ko smo uvozili črno listo v podatkovno bazo, je bilo potrebno omogočiti iskanje poljubnih oseb na črni listi. Za ta namen smo implementirali zgoraj predstavljen modificiran Jaro- Winkler algoritem. Tako vanj pošiljamo kot vhodne parametre iskalno osebo (ime in priimek) in na drugi strani pa niz po niz iz črne liste. Sekvenčno obdelujemo zavedena imena v podatkovni bazi črne liste in iščemo morebitne zadetke, kar smo omejili s pragom. Uporabniški vmesnik smo razvili v Oracle Forms okolju, ki omogoča uporabniško manipulacijo iskanja, vpis iskane osebe in pregled nad zadetki. V okno smo vgradili simulacijo večnitenja. Na ta način se je proces iskanja izvajal v ozadju in tudi implementiral večnitno delovanje oken.

78 Reševanje časovno zahtevnih opravil z orodjem ORACLE 68

79 Reševanje časovno zahtevnih opravil z orodjem ORACLE : Izsek implementacije Jaro-Winkler algoritma.

80 Reševanje časovno zahtevnih opravil z orodjem ORACLE : Izsek razširitve Jaro-Winkler algoritma za besedne zveze.

81 Reševanje časovno zahtevnih opravil z orodjem ORACLE 71 Slika 5.5: Iskanje po črni listi, večnitno delovanje oken. 5.2 Pregled komitentov na črni listi Za PPD je bilo potrebno omogočiti primerjavo vseh komitentov s črno listo, vedno ko pride do posodobitve črne liste. Podatkovna baza komitentov je bila relativno velika in jo je bilo potrebno prečesati in poiskati morebitna ujemanja, kar pa je predstavljalo zelo potratno opravilo. Lotili smo se implementacije simulacije večnitenja, ustvarili storitev in pregledovali komitente odsekovno, z večimi nitmi, ki so se izvajale v ozadju in na koncu združile. Ker komitente označujemo z identifikacijskimi številkami, ki enolično definirajo posameznega komitenta, smo lahko na relativno preprost način razdelili obdelavo komitentov na več enakih delov. Tako smo s pomočjo uporabe paketa DBMS_SCHEDULER ustvarili ustrezen konstrukt PROGRAM, ki pregleda določen segment komitentov. Na podlagi tega, storitev pregleda komitentov dinamično kreira več niti, ki se bodo izvajale sočasno. Za potrebe nadzora nad nitmi, sinhronizacije in združevanja niti, smo ustvarili povezovalno okolje in implementirali prej predstavljeni koncept monitorja.

82 Reševanje časovno zahtevnih opravil z orodjem ORACLE 72 Slika 5.6: Izsek povezovalnega okolja, paketa.

83 Reševanje časovno zahtevnih opravil z orodjem ORACLE 73 Slika 5.7: Izsek storitve pregledovanja komitentov na črni listi, kreiranje niti.

84 Reševanje časovno zahtevnih opravil z orodjem ORACLE Knjiženje plačilnih nalogov in preverjanje prejemnika s črno listo Bili smo postavljeni pred zelo veliko težavo. Imeli smo knjiženje plačilnih nalogov, katerih gostota je velika in je zato zelo pomemben čas izvajanja. Morali pa smo še dodati, vpeljati primerjanje, bodisi nalogodajalca ali prejemnika bodisi celo obeh s črne liste. Reševanje težave smo se lotili s pomočjo uvedbe čakalnih vrst in preverjanjem s črno listo z izvajanjem niti v ozadju. Knjiženje plačilnih nalogov se izvaja v določenih časovnih presledkih, torej se izvaja večkrat in zaradi izkoristka te lastnosti opravila, smo tudi za potrebe pohitrenja opravila, nekoliko modificirali Jaro-Winkler algoritem ter izvedbo celotnega opravila, knjiženja plačilnih nalogov. Slika 5.8: Diagram poteka knjiženja plačilnih nalogov in preverjanje s črno listo. Izvedbo knjiženja plačilnih nalogov in preverjanje s črno listo, lahko povzamemo v naslednjih korakih: 1. pregled tabele potrjevanj nizov, če je že bil tak niz v preverjanju, se vrne takoj povratna informacija, če ne, pa se zavede v tabelo, 2. ta korak se zgodi le v primeru, če niz še ni bil pregledan. Pregleda se črna lista, kjer gre zgolj za hiter vpogled obstoja morebitnih zadetkov na črni listi in

85 Reševanje časovno zahtevnih opravil z orodjem ORACLE 75 iskanje prvega zapisa, ki bi lahko vrnil zadovoljivo oceno primerjave (modifikacija Jaro-Winkler algoritma). Če ni nobenega takega zapisa, se vrne takojšnja povratna informacija, 3. zgodi se v primeru, ko hiter vpogled najde kak ustrezen zapis na črni listi. V čakalno vrsto se pošlje zahteva po temeljitem pregledu, oz. po zbiranju rezultatov, knjiženje pa izpusti trenutni nalog in nadaljuje s preostalimi, 4. od koraka 4 dalje, se vsi procesi izvajajo v ozadju, v nitih. V tem koraku vzame proces zbiranja rezultatov, zahtevo za pregled iz čakalne vrste in začne z novo nitjo v ozadju zbirati rezultate, kar navajata naslednja dva koraka, 5. branje črne liste, 6. zapisovanje preverjanja v tabelo potrjevanj nizov, tako da bo proces knjiženja imel v naslednjem ciklu povratno informacijo o preverjanju nalogodajalca in prejemnika. Slika 5.9: Čakalna vrsta transakcij za potrebe knjiženje plačilnih nalogov.

86 Reševanje časovno zahtevnih opravil z orodjem ORACLE 76 6 SKLEP Namen diplomske naloge je bila predstavitev ORACLE okolja in prikaz konceptov optimizacije znotraj tega okolja. V diplomskem delu smo se na kratko seznanili z jezikom SQL, nekaterimi poglavitnimi lastnostmi in gradniki jezika PL/SQL in nazadnje še predstavili okensko razvojno okolje Oracle Forms. Glavni del diplomskega dela je bil razvoj optimizacij, ki omogočajo večjo mero kreativnosti znotraj tega okolja. Ko smo vstopili v okolje ORACLE, ga spoznavali, smo pri reševanju raznovrstnih problemov, začutili določeno mero pomanjkanja nekaterih konceptov in gradnikov, ki smo jih poznali od prej, v drugih okoljih. Ampak skozi spoznavanje okolja, so se nam porodile določene ideje, da je tudi tu mogoče določene gradnike in koncepte, na nekoliko drugačen način simulirati, kar nam je dalo določeno mero zagona za njihovo realizacijo. Za referenco smo si vzeli druge programske jezike, predvsem objektno usmerjene, črpali iz njih določena znanja in izkušnje ter jih prenesli v ORACLE okolje. Tako smo poskušali simulirati večnitno delovanje znotraj jezika PL/SQL, kar prej ni poznal in na koncu ga še prenesli v Oracle Forms okolje. Skozi več optimizacij Jaro-Winkler algoritma smo prikazali, kako se je na podlagi dovolj dobre analize problema, možno lotiti procesa optimizacije na relativno preprost način in delovanje algoritmov približati problemom ter tako pohitriti njihovo delovanje, izrabo razpoložljivih virov. Izpostavili bi tudi reševanje problema pri dodajanja dodatnega bremena k že časovno problematičnemu opravilu, s katerim se velikokrat srečamo. Predstavili smo reševanje tovrstnih problemov z uvedbo čakalnih vrst in izvajanjem bremen v ozadju. V zadnjem poglavju smo predstavili težave, pri katerih so tovrstni koncepti bili uporabljeni in sicer ob izgradnji aplikacije za preprečevanje pranja denarja. Tako smo v diplomskem delu prikazali realno implementacijo prej predstavljenih konceptov optimizacije.

87 Reševanje časovno zahtevnih opravil z orodjem ORACLE 77 Aplikacijo za preprečevanje pranja denarja smo razvijali za podjetje PROBANKA d.d., jo integrirali v njihovo okolje in tudi uspešno predali v uporabo.

88 Reševanje časovno zahtevnih opravil z orodjem ORACLE 78 7 VIRI, LITERATURA [1] Algorithmic efficiency: [2] Algorithms on strings, Maxime Crochemore, Christophe Hancart, Thierry Lecroq, Cambridge University Press, [3] Compiler optimization: [4] De facto standard: [5] IBM System R: [6] Jaro-Winkler distance: [7] Just-in-time compilation: [8] Multithreading: [9] Multithreading Definition: [10] Oracle Database Object-Relational Developer's Guide 11g Release 1 (11.1), Using PL/SQL With Object Types: [11] Oracle Database PL/SQL Packages and Types Reference 10g Release 2, DBMS_SCHEDULER: [12] Oracle DBMS_SCHEDULER, Version 11.1: [13] Oracle Forms Developer, Getting Started for Windows, Release 6i, January, [14] Oracle SQL in 10 Minutes Asim Abbasi: [15] Oracle 9i Application Developer's Guide Advanced Queuing, Introduction to Oracle Advanced Queuing: [16] Performance_per_watt: [17] PL/SQL: [18] PL/SQL FAQ: [19] PL/SQL User's Guide and Reference Release 2 (9.2), Handling PL/SQL Errors: [20] PL/SQL User's Guide and Reference Release 2 (9.2), PL/SQL Collections and Records: [21] PL/SQL User's Guide and Reference Release 2 (9.2), PL/SQL Object Types: [22] Program optimization: [23] Queueing theory:

89 Reševanje časovno zahtevnih opravil z orodjem ORACLE 79 [24] Relational database management system: [25] Strategija preprečevanje pranja denarja, Mary Slapnik, Banka Celje, Anton Dvoršek, Fakulteta za varnostne vede, Univerza v Mariboru: kriminalisticne_in_forenzicne_preiskave/slapnik_dvorsek.doc.pdf. [26] Structured Query Language SQL: [27] Thread (computer science): [28] Threading in Java and C#: A Focused Language Comparison, Shannon Hardt: [29] Visokonivojski programski jezik: [30] Zakon o preprečevanju pranja denarja (ZPPDen-1):

90 Reševanje časovno zahtevnih opravil z orodjem ORACLE 80 8 PRILOGE 8.1 Seznam slik Slika 2.1: Cilj procesa optimizacije Slika 3.1: Logotip korporacije ORACLE Slika 3.2: Jezik ORACLE PL/SQL Slika 3.3: Vgrajeni podatkovni tipi jezika PL/SQL : Struktura objektnega tipa : DBMS_SCHEDULER, pregled nad izvajanjem opravil Slika 4.4: Izvajanje opravila z nitmi Slika 4.5: Časovni vidik sočasnega izvajanja večih niti Slika 4.6: Monitor, dodatne informacije za potrebe pregleda nad izvajanjem niti Slika 4.7: Življenjski cikel niti Slika 4.9: Koncept dodatnega opravila s čakalno vrsto in izvajanjem niti v ozadju Slika 4.10: Diagram poteka poslušanja izvedbe niti Slika 5.1: Sistem za preprečevanje pranja denarja in financiranje terorizma Slika 5.2: Izsek objavljene črne liste Slika 5.6: Izsek povezovalnega okolja, paketa Slika 5.7: Izsek storitve pregledovanja komitentov na črni listi, kreiranje niti Slika 5.8: Diagram poteka knjiženja plačilnih nalogov in preverjanje s črno listo Slika 5.9: Čakalna vrsta transakcij za potrebe knjiženje plačilnih nalogov

91 Reševanje časovno zahtevnih opravil z orodjem ORACLE Seznam preglednic Tabela 1: Najbolj pogoste izjeme v jeziku PL/SQL Tabela 2: Interne metode seznama v jeziku PL/SQL Tabela 3: Pomembnejše metode paketa DBMS_SCHEDULER Tabela 4: Ukrepi za potrebe preprečevanja pranja denarja, običajen pregled stranke Seznam primerov Primer 2: Izračun vsote celih števil med 1 in N s formulo... 8 Primer 3: Relacijski podatkovni model Primer 4: Vzorec PL/SQL bloka Primer 6: Definicija in uporaba kurzorja v jeziku PL/SQL Primer 7: DDL ukazi v jeziku PL/SQL, dinamično kreiranje SQL stavkov Primer 8: Dinamično kreiranje kurzorja v jeziku PL/SQL Primer 9: Definicija vejitev v jeziku PL/SQL Primer 10: Definicija iteracij, zank v jeziku PL/SQL Primer 12: Uporabniško definirane izjeme v jeziku PL/SQL Primer 13: Definicija funkcije v jeziku PL/SQL Primer 14: Definicija procedure v jeziku PL/SQL Primer 15: Definicija specifikacije paketa v jeziku PL/SQL Primer 16: Definicija telesa paketa v PL/SQL jeziku Primer 17: Definicija specifikacije objektnega tipa v jeziku PL/SQL Primer 18: Definicija telesa objektnega tipa v jeziku PL/SQL Primer 20: Dedovanje objektnih tipov v jeziku PL/SQL Primer 21: Definicija seznama v jeziku PL/SQL

92 Reševanje časovno zahtevnih opravil z orodjem ORACLE 82 Primer 22: Prikaz matematičnega izračuna Jaro-Winkler razdalje Primer 23: Približevanje Jaro-Winkler vrednosti k popolnemu zadetku Primer 24: Definicija niti v jeziku PL/SQL Primer 26: Poslušanje prožilca When-Timer-Expired v Oracle Forms okolju Primer 27: Uničevanje objekta TIMER v Oracle Forms okolju Naslov študenta Ime in priimek: Ervin Črešnjovnjak Naslov: Stara ulica 10 Pošta: 9000 Murska Sobota Elektronska pošta: ervin.cresnjovnjak@yahoo.com 8.5 Kratek življenjepis Rojen: Šolanje: v Murski Soboti Osnovna šola I Murska Sobota, Srednja elektro-računalniška šola Maribor, UM FERI Maribor (UNI Rač. in inf., smer programska oprema)

93 Reševanje časovno zahtevnih opravil z orodjem ORACLE 83

94 Reševanje časovno zahtevnih opravil z orodjem ORACLE 84

95 Reševanje časovno zahtevnih opravil z orodjem ORACLE 85

IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK

IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK UDK621.3:(53+54+621 +66), ISSN0352-9045 Informacije MIDEM 39(2009)2, Ljubljana IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK Sasa Klampfer, Joze Mohorko, Zarko Cucej University

More information

DB2 podatkovna baza v praksi

DB2 podatkovna baza v praksi DB2 podatkovna baza v praksi Aljoša Trivan, Mikropis holding d.o.o. aljosa.trivan@mikropis.si 2007 IBM Corporation Agenda Mikropis Splošno Fleksibilnost Vzdrževanje Backup SQL objekti in SQL stavki Novosti

More information

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje doc.dr. Mira Trebar 2 Vaja 1 (11.10.2010) Vaje so obvezne (delo v laboratoriju + doma) S1: Logisim MIPS procesor eno-cikelna izvedba ( logisim ) MIPS

More information

Prirejanje in preverjanje tipov

Prirejanje in preverjanje tipov Uvod v C# Drugi del Dedovanje Sintaksa Prirejanje in preverjanje tipov Kaste preverjenih tipov Prekrivanje metod Dinamično povezovanje (poenostavljeno) Skrivanje Dinamično povezovanje (s skrivanjem) Fragile

More information

RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA

RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA POPRBAZA je namenjen večji reorganizaciji podatkov v računalnikovem spominu. Reorganizacijo narekujejo bodisi zakonske spremembe, bodisi novosti v programu. Zato je

More information

Session:E07 GALIO - DB2 index advisor, how we implemented it and what we get from self-made expert tool

Session:E07 GALIO - DB2 index advisor, how we implemented it and what we get from self-made expert tool Session:E07 GALIO - DB2 index advisor, how we implemented it and Viktor Kovačević, MSc Hermes Softlab 6th October 2009 14:15 (60') Platform: UDB / LUW OUTLINE Application & Database tuning Self made index

More information

Sistemske zahteve za SAOP

Sistemske zahteve za SAOP Sistemske zahteve za SAOP Samostojna delovna postaja višji). icenter je ERP sistem, ki zagotavlja popolno kontrolo nad vsemi poslovnimi procesi v podjetju. V tej postavitvi je SAOP icenter nameščen na

More information

Hitra rast hranjenih podatkov

Hitra rast hranjenih podatkov Tomaž Borštnar - član uredništva računalniške revije Monitor od začetka (oktober 1991; ne-pc okolja (Unix, etc) - sodelavec YUNAC in ARNES od začetka - postavil in upravljal večino strežnikov na SiOL -

More information

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije Obrazec P-5 Specifikacije 30K250316» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije KAZALO VSEBINE 1. Predmet javnega naročila...3 1.1. SKLOP-1: STORITEV VZDRŽEVANJA ORACLE LICENČNE

More information

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA Državni izpitni center *M16178113* SPOMLADANSKI IZPITNI ROK NAVODILA ZA OCENJEVANJE Četrtek, 2. junij 2016 SPLOŠNA MATURA RIC 2016 M161-781-1-3 2 IZPITNA POLA 1 1 1 2 1 3 3 4 1 5 3 6 2 7 1 8 1 9 1 10 3

More information

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode RMZ - Materials and Geoenvironment, Vol. 53, No. 2, pp. 221-227, 2006 221 Calculation of volume with the use of NTF method Izračun volumnov z uporabo NTF metode Milivoj Vulić 1, Anes Durgutović 2 1 Faculty

More information

Q: Do You made a backup before upgrade? A: Only cowards make backups!

Q: Do You made a backup before upgrade? A: Only cowards make backups! Q: Do You made a backup before upgrade? You z malo - you A: Only cowards make backups! Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies.

More information

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF RMZ Materials and Geoenvironment, Vol. 55, No. 1, pp. 127-134, 2008 127 How we calculate volume with the use of NTF method Kako izračunamo volumen z uporabo metode NTF An e s Du r g u t o v i ć 1, Mi l

More information

E R S Š G L J U B L J A N A Š O L S K O L E T O

E R S Š G L J U B L J A N A Š O L S K O L E T O Datotečni sistem E R S Š G L J U B L J A N A Š O L S K O L E T O 2 0 1 0 / 1 1 Vsebina Programska oprema Sistemska programska oprema Operacijski sistem Lupina (shell) Datotečni sistem Programska oprema

More information

Obravnava izjem (exception handling)

Obravnava izjem (exception handling) Obravnava izjem (exception handling) Ko umre programer Uvod Ne glede na to, kako dobro smo načrtovali nek program, je še vedno možnost, da lahko med izvajanjem pride do kakšnih napak. Dobro načrtovan program

More information

Tehnike programiranja PREDAVANJE 9 Uvod v binarni svet in računalništvo

Tehnike programiranja PREDAVANJE 9 Uvod v binarni svet in računalništvo Tehnike programiranja PREDAVANJE 9 Uvod v binarni svet in računalništvo Predavanje 9 Uvod v binarni svet Birnarna aritmetika Polprevodniške tehnologije Računalnik Mikroprocesor ldos.fe.uni-lj.si >študij

More information

Strukturirani poizvedovalni jezik SQL

Strukturirani poizvedovalni jezik SQL Računalništvo Strukturirani poizvedovalni jezik SQL Danijel Skočaj, Evelin Vatovec Krmac Univerza v Ljubljani Fakulteta za pomorstvo in promet Literatura: Evelin Vatovec Krmac, Računalništvo in informatika,

More information

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike Strojni vid pri tehnoloških meritvah formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike formati slike in branje slike slika je običajno

More information

Razvoj jezika za iskanje, povezovanje in predstavitev podatkov

Razvoj jezika za iskanje, povezovanje in predstavitev podatkov UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Ernest Štukelj Razvoj jezika za iskanje, povezovanje in predstavitev podatkov DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU SMER PROGRAMSKA OPREMA

More information

Ljubljana,

Ljubljana, Ljubljana, 9. 4. 2018 Katalog znanj in vzorci nalog za izbirni izpit za vpis na magistrski študij Računalništvo in informatika 2018/2019 0 KATALOG ZNANJ ZA IZBIRNI IZPIT ZA VPIS NA MAGISTRSKI ŠTUDIJ RAČUNALNIŠTVO

More information

Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x

Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x 1 Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x 2 družina standardov, ki opisujejo delovanje lokalnih (LAN) in mestnih (MAN) omrežij delo opravljano v delovnih skupinah več na

More information

Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js)

Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js) Vodnik skozi Google Analytics Beta verzija 1. del prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js) Ta vodnik je povzetek Googe vodiča ' Tracking Code Migration Guide Switching from urchin.js

More information

Hierarhično načrtovanje. Načrtovanje digitalnih el. sistemov. Deklaracija komponent. Komponente

Hierarhično načrtovanje. Načrtovanje digitalnih el. sistemov. Deklaracija komponent. Komponente Laboratorij za načrtovanje integriranih vezij Fakulteta za elektrotehniko Univerza v Ljubljani Hierarhično načrtovanje Andrej Trost Načrtovanje digitalnih el. sistemov Načrtovanje vezij v jeziku VHDL Komponente,

More information

Prometno načrtovanje xdsl

Prometno načrtovanje xdsl Prometno načrtovanje xdsl 1 Kazalo Prometno načrtovanje naročniške zanke Prometno načrtovanje MSAN Izbira agregacijskega modela Izbira opreme 2 Potrebe po pasovni širini Zahtevana pasovna širina na uporabnika

More information

Transakcije v MariaDB/MySQL (transakcija A)

Transakcije v MariaDB/MySQL (transakcija A) Transakcije v MariaDB/MySQL (transakcija A) Pomožni elementi In [1]: # pyodbc import pyodbc try: cn1.close() except: pass # MariaDB/MySQL conn = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=localhost;DATABASE=sandbox;UID=tu

More information

Navodila za interaktivne naloge Bober

Navodila za interaktivne naloge Bober Avtorji dokumenta: Dean Gostiša , Lovro Podgoršek Verzija dokumentacije: 1.1 Datum in kraj: 24. 7. 2013, Ljubljana Navodila za interaktivne naloge Bober Uvod 1.

More information

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54 Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54 Boštjan Lemut Prva povezava na L-54 s povezovalnim kablom povežemo mrežna vmesnika na računalniku in L-54 v brskalniku vpišemo

More information

Lotus Quickr Najhitrejši način izmenjave poslovne vsebine

Lotus Quickr Najhitrejši način izmenjave poslovne vsebine Lotus Quickr Najhitrejši način izmenjave poslovne vsebine Zoran Povh, IT specialist zoran.povh@si.ibm.com 2007 IBM Corporation Vsebina Kaj je Lotus Quickr? Integracija z namiznimi programi Skupinski prostori

More information

Podatkovno procesiranje v relacijskih sistemih

Podatkovno procesiranje v relacijskih sistemih Podatkovno procesiranje v relacijskih sistemih Iztok Savnik, FAMNIT. Vsebina Vgnezden SQL Dinamični SQL Shranjene procedure in funkcije Prožilci Vgnezden SQL Pristop: Vgnezdi SQL stavke v gostiteljski

More information

Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja

Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja Navodila za vaje pri predmetu Internetne tehnologije VAJA 2 Dušan

More information

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig Boštjan Lemut Prva povezava na L-54 s povezovalnim kablom povežemo mrežna vmesnika na računalniku in L-54

More information

PROGRAMIRANJE II: KONCEPTI PROGRAMSKIH JEZIKOV

PROGRAMIRANJE II: KONCEPTI PROGRAMSKIH JEZIKOV 1 U N I V E R Z A N A P R I M O R S K E M Fakulteta za matematiko, naravoslovje in informacijske tehnologije Iztok Savnik SKRIPTA ZA PREDMET PROGRAMIRANJE II: KONCEPTI PROGRAMSKIH JEZIKOV ŠTUDIJSKI PROGRAM

More information

Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje.

Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje. Delo z datotekami Razred File Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje. Deklaracija objekta File poteka tako: File ime = new File(pot_do_datoteke_in_ime);

More information

Osnove programskega jezika C++

Osnove programskega jezika C++ Osnove programskega jezika C++ 1 O S N O V E P R O G R A M I R A N J A V C + + U P O R A B A P R O G R A M A CODE::B L O C K S programski stavek Nekaj osnovnih pojmov (1.) definicija, deklaracija, ukaz

More information

Naslavljanje v IP. Miran Meža

Naslavljanje v IP. Miran Meža Naslavljanje v IP Miran Meža Omrežje vseh omrežij Avtonomni sistem Avtonomni sistem Avtonomni sistem Avtonomni sistem Avtonomni sistem Avtonomni sistem Omrežje vseh omrežij Usmerjanje prometa: poznati

More information

Računalnik INFORMATIKA 1. LETNIK ŽILBERT TIVADAR

Računalnik INFORMATIKA 1. LETNIK ŽILBERT TIVADAR Računalnik INFORMATIKA 1. LETNIK ŽILBERT TIVADAR Kaj je računalnik? osrednji in najpomembnejši del informacijske tehnologije; pripomoček, ki olajša naše delo; računalnik nenehno ponavlja štiri opravila:

More information

Uvod v programiranje v zbirnem jeziku

Uvod v programiranje v zbirnem jeziku Uvod v programiranje v zbirnem jeziku Programerjev pogled na zgradbo računalnika Primer: procesorji družine Intel x86 Programer vidi naslednje stanje : EIP Programski števec (naslov naslednjega ukaza)

More information

PODATKOVNE BAZE NOSQL

PODATKOVNE BAZE NOSQL PODATKOVNE BAZE NOSQL Aljaž Zrnec, Dejan Lavbič, Lovro Šubelj, Slavko Žitnik, Aleš Kumer, Marko Bajec Univerza v Ljubljani, Fakulteta za računalništvo in informatiko, Laboratorij za podatkovne tehnologije,

More information

Hierarhično načrtovanje. Načrtovanje digitalnih el. sistemov. Deklaracija komponent. Komponente

Hierarhično načrtovanje. Načrtovanje digitalnih el. sistemov. Deklaracija komponent. Komponente Laboratorij za načrtovanje integriranih vezij Fakulteta za elektrotehniko Univerza v Ljubljani Hierarhično načrtovanje Andrej Trost Načrtovanje digitalnih el. sistemov Načrtovanje vezij v jeziku VHDL Komponente,

More information

UDF for volume calculation with the use of NTF method. Lastne Excel funkcije za izračun prostornin po NTF metodi

UDF for volume calculation with the use of NTF method. Lastne Excel funkcije za izračun prostornin po NTF metodi RMZ Materials and Geoenvironment, Vol. 54, No. 3, pp.419-425, 2007 419 UDF for volume calculation with the use of NTF method Lastne Excel funkcije za izračun prostornin po NTF metodi Mi l i v o j Vu l

More information

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov ABBYY rešitve za prepoznavo in klasifikacijo dokumentov preabbyy FlexiCapture 9.0. Overview. 1 doc: 10977 Lokalna prisotnost ABBYY: Moscow, Russia; Munich, Germany; Bracknell, UK; Kiev, Ukraine; Milpitas,

More information

TI C2000: Družina za vgrajene (embedded) aplikacije

TI C2000: Družina za vgrajene (embedded) aplikacije CPU MIPS RAM (words) ROM (words) Flash (words) BootROM (words) Event Manager CAP/QEP TIMER PM(CMP) ADC TIMER Resolution 12 # ofchan 16 Conv time McBSP EXMIF atch Dog SPI SCI (UART) CAN Volts (V) # I/O

More information

Programiranje II. Iztok Savnik, FAMNIT. Februar, 2013.

Programiranje II. Iztok Savnik, FAMNIT. Februar, 2013. Programiranje II Iztok Savnik, FAMNIT Februar, 2013. 1 Vsebina Potek predmeta Pregled razvoja programskih jezikov Koncepti programskih jezikov Meta-jezik Nekatere primerjave Cilji predmeta Kaj se dogaja

More information

Predstavitev teksta v računalniku

Predstavitev teksta v računalniku Predstavitev teksta v računalniku Za tekst, ki ga vidimo na zaslonu računalnika, sta potrebna dva koraka 1. Najprej je potrebno določiti, kako so črke in še nekateri drugi ne-numerični znaki predstavljeni

More information

Navodila za nastavitev varne povezave po protokolu SSH

Navodila za nastavitev varne povezave po protokolu SSH Datum: 28. 9. 2010 Navodila za nastavitev varne povezave po protokolu SSH 1. Pogoji za zagotovitev varne povezave po protokolu SSH Za uspešno zagotovitev in nastavitev varne povezave po protokolu SSH je

More information

Analiza uporabe GWT za razvoj spletnih aplikacij

Analiza uporabe GWT za razvoj spletnih aplikacij Univerza v Ljubljani Fakulteta za računalništvo in informatiko Saša Makorič Analiza uporabe GWT za razvoj spletnih aplikacij DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN

More information

Preverjanje pravilnosti programov z odvisnimi tipi v programskem jeziku Idris

Preverjanje pravilnosti programov z odvisnimi tipi v programskem jeziku Idris Univerza v Ljubljani Fakulteta za računalništvo in informatiko Blaž Repas Preverjanje pravilnosti programov z odvisnimi tipi v programskem jeziku Idris DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE

More information

RAZVOJ GENERATORJA POSLOVNIH SPLETNIH APLIKACIJ

RAZVOJ GENERATORJA POSLOVNIH SPLETNIH APLIKACIJ UNIVERZA V MARIBORU FAKULTETA ZA ORGANIZACIJSKE VEDE Smer: Informatika v organizaciji in managementu RAZVOJ GENERATORJA POSLOVNIH SPLETNIH APLIKACIJ Mentor: izr. prof. dr. Robert Leskovar Kandidat: Boštjan

More information

Algoritmi in podatkovne strukture 2. Urejanje (sorting)

Algoritmi in podatkovne strukture 2. Urejanje (sorting) Algoritmi in podatkovne strukture 2 Urejanje (sorting) osnove, metode deli in vladaj, kopica Andrej Brodnik: Algoritmi in podatkovne strukture 2 / Urejanje (sorting) osnove, metode deli in vladaj, kopica

More information

ERCOlight LUM je energetsko visoko učinkovita svetilka za visoke prostore z možnostjo številnih različnih modifikacij.

ERCOlight LUM je energetsko visoko učinkovita svetilka za visoke prostore z možnostjo številnih različnih modifikacij. Object Installation Project number Date 1 Luminaire data 1.5 Somar International Ltd, Eluma ME-OP4/4L/50 P5 (ME-OP4/4L/50) 1.5.1 Data sheet Ena svetilka, pet različnih možnosti : Eluma Lighting : Comparison

More information

Uvod v svetovni splet

Uvod v svetovni splet Univerza v Ljubljani Fakulteta za gradbeništvo in geodezijo Uvod v svetovni splet Računalništvo in informatika, GR-UNI, GR-VSŠ Tehnična dokumentacija in informatika, VKI-UNI št. leto 2007/08, 1. semester

More information

sodobne poslovnoinformacijske rešitve Birokrat Kratka navodila za namestitev demo verzije programa Birokrat

sodobne poslovnoinformacijske rešitve   Birokrat Kratka navodila za namestitev demo verzije programa Birokrat sodobne poslovnoinformacijske rešitve www.andersen.si Birokrat Kratka navodila za namestitev demo verzije programa Birokrat Kratka navodila za namestitev demo verzije programa Birokrat Pošiljamo vam demo

More information

Objective Caml version

Objective Caml version Poglavje 1 Ocaml Koncepte, ki se pojavljajo v programskih jezikih, je najlažje razumeti z njihovo uporabo. Zato bomo v prvi lekciji spoznali moderno zasnovan programski jezik, ki je opremljen z bogatim

More information

Abstrakcije v modelih in jezikih

Abstrakcije v modelih in jezikih Abstrakcije v modelih in jezikih Iztok Savnik 1 Abstrakcije Kaj so abstrakcije? Kako uporabljamo abstrakcije pri modeliranju? Kako so definirani gradniki podatkovnih modelov? 2 Oxford (Hornby) abstract

More information

Primerjava orodij za razvoj mobilnih aplikacij

Primerjava orodij za razvoj mobilnih aplikacij UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Miloš Jovanov Primerjava orodij za razvoj mobilnih aplikacij DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO

More information

Vgradnja objektno usmerjenih gradnikov v programski jezik PINS

Vgradnja objektno usmerjenih gradnikov v programski jezik PINS Univerza v Ljubljani Fakulteta za računalništvo in informatiko Toni Kocjan Turk Vgradnja objektno usmerjenih gradnikov v programski jezik PINS DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE

More information

Učinkovita rešitev za izdelavo zaščitnih kopij z deduplikacijo in replikacijo

Učinkovita rešitev za izdelavo zaščitnih kopij z deduplikacijo in replikacijo Učinkovita rešitev za izdelavo zaščitnih kopij z deduplikacijo in replikacijo Študija primera uvedbe sistema EMC DataDomain v podjetju Si.mobil Janez Narobe Janez.narobe@simobil.si Rok Krisper rok.krisper@snt.si

More information

Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript

Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript Predavanje 2 Ponovitev Predavanje 1 Naloge Uvod v JavaScript Pravila Primeri Priprava na laboratorijske vaje Pregled orodij ldos.fe.uni-lj.si >študij

More information

Primerjava in analiza učinkovitosti podatkovnih baz DB2 in MySQL

Primerjava in analiza učinkovitosti podatkovnih baz DB2 in MySQL Univerza v Ljubljani Fakulteta za računalništvo in informatiko Nedim Husaković Primerjava in analiza učinkovitosti podatkovnih baz DB2 in MySQL DIPLOMSKO DELO VISOKOŠOLSKI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++

Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++ Univerza v Ljubljani Fakulteta za računalništvo in informatiko Tadej Golobič Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++ DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI

More information

Osnove programskega jezika C

Osnove programskega jezika C Rok Vrabič, Lovro Kuščer Osnove programskega jezika C Gradivo za vaje pri predmetih Mehatronski sistemi in Diskretni krmilni sistemi Ljubljana, 2014 Kazalo 0 Uvod... 1 1 Prvi C program... 2 1.1 Zgodovina

More information

ZASNOVA IN IZVEDBA RAČUNSKEGA JEDRA OPENCL Z VEZJEM FPGA

ZASNOVA IN IZVEDBA RAČUNSKEGA JEDRA OPENCL Z VEZJEM FPGA Univerza v Ljubljani Fakulteta za elektrotehniko Domen Maraž ZASNOVA IN IZVEDBA RAČUNSKEGA JEDRA OPENCL Z VEZJEM FPGA Diplomsko delo visokošolskega strokovnega študija Mentor: prof. dr. Andrej Žemva Ljubljana,

More information

C in Java. Šolski center Celje Splošna in strokovna gimnazija Lava. Raziskovalna naloga. Mentor: Mojmir KLOVAR, univ. dipl. inž.

C in Java. Šolski center Celje Splošna in strokovna gimnazija Lava. Raziskovalna naloga. Mentor: Mojmir KLOVAR, univ. dipl. inž. Šolski center Celje Splošna in strokovna gimnazija Lava C in Java Raziskovalna naloga Mentor: Mojmir KLOVAR, univ. dipl. inž. Avtorja: Staš ŽNIDAR 4.F Jurij REPAR 4.F Celje, marec 2006 Kazalo Kazalo...

More information

Primerjava uporabe SOAP in REST za potrebe povezave mobilnih naprav s spletnimi storitvami

Primerjava uporabe SOAP in REST za potrebe povezave mobilnih naprav s spletnimi storitvami Univerza v Ljubljani Fakulteta za računalništvo in informatiko Matjaž Rajnar Primerjava uporabe SOAP in REST za potrebe povezave mobilnih naprav s spletnimi storitvami DIPLOMSKO DELO NA UNIVERZITETNEM

More information

Metode logičnega snovanja Programabilne logične naprave in VHDL. Miha Moškon

Metode logičnega snovanja Programabilne logične naprave in VHDL. Miha Moškon Metode logičnega snovanja Programabilne logične naprave in VHDL Miha Moškon Programabilne logične naprave Metode logičnega snovanja, 1. laboratorijska vaja 2 Programabilna logična vezja V času proizvodnje

More information

Funkcije, neskončna zaporedja in java

Funkcije, neskončna zaporedja in java Funkcije, neskončna zaporedja in java LALGinar, 4. oktober 2013 Luka Fürst Funkcijsko programiranje Funkcije kot osnovni gradniki funkcije kot argumenti funkcij funkcije, ki vračajo funkcije Funkcijsko

More information

PL/SQL. Exception. When the PL/SQL engine cannot execute the PLSQL block it raise an error. Every Oracle error has an error number

PL/SQL. Exception. When the PL/SQL engine cannot execute the PLSQL block it raise an error. Every Oracle error has an error number PL/SQL Exception When the PL/SQL engine cannot execute the PLSQL block it raise an error. Every Oracle error has an error number Exceptions must be handled by name. PL/SQL predefines some common Oracle

More information

Vmesnik za vodenje sistema Lego Mindstorms v razvojnem okolju Siemens Step7

Vmesnik za vodenje sistema Lego Mindstorms v razvojnem okolju Siemens Step7 Univerza v Ljubljani Fakulteta za računalništvo in informatiko Martin Šimac Vmesnik za vodenje sistema Lego Mindstorms v razvojnem okolju Siemens Step7 DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

Poglavje 3. SUPB in načini dostopa do podatkov

Poglavje 3. SUPB in načini dostopa do podatkov Poglavje 3 SUPB in načini dostopa do podatkov SUPB in načini dostopa do podatkov SUPB: kompleksna zbirka programov, ki v okviru podatkovnega sistema skrbijo za podatke in zagotavlja uporabnikom dostop

More information

Delo z grafi v relacijskih in sodobnih nerelacijskih podatkovnih bazah

Delo z grafi v relacijskih in sodobnih nerelacijskih podatkovnih bazah Univerza v Ljubljani Fakulteta za računalništvo in informatiko Blaž Malej Delo z grafi v relacijskih in sodobnih nerelacijskih podatkovnih bazah DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

OBVLADOVANJE PREOBREMENITEV VIROV ERP PRI IZVAJANJU PAKETNIH OBDELAV

OBVLADOVANJE PREOBREMENITEV VIROV ERP PRI IZVAJANJU PAKETNIH OBDELAV UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Blaž Hafnar OBVLADOVANJE PREOBREMENITEV VIROV ERP PRI IZVAJANJU PAKETNIH OBDELAV MAGISTRSKO DELO Mentor: prof. dr. Nikolaj Zimic Ljubljana,

More information

Razvoj aplikacij na platformi Google App Engine

Razvoj aplikacij na platformi Google App Engine UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Jure Vrščaj Razvoj aplikacij na platformi Google App Engine DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: prof. dr. Janez Demšar Ljubljana,

More information

Programski jezik Java

Programski jezik Java Programski jezik Java Interno gradivo za predmet Algoritmi in programski jeziki (4. letnik) ArrayList (neprečiščeno besedilo) ArrayList Java class ArrayList(java.util.ArrayList) je hiter in za uporabo

More information

Predelava javanskega navideznega stroja za štetje ukazov zložne kode

Predelava javanskega navideznega stroja za štetje ukazov zložne kode Univerza v Ljubljani Fakulteta za računalništvo in informatiko Nikolaj Janko Predelava javanskega navideznega stroja za štetje ukazov zložne kode DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

Uporaba strežnika SharePoint za vodenje poteka dela pri izvajanju kompleksnih projektov

Uporaba strežnika SharePoint za vodenje poteka dela pri izvajanju kompleksnih projektov Univerza v Ljubljani Fakulteta za računalništvo in informatiko Roman Orač Uporaba strežnika SharePoint za vodenje poteka dela pri izvajanju kompleksnih projektov DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI

More information

Integracija povpraševanj nerelacijskih podatkovnih baz in doseganje visoke razpoložljivosti v računalniškem oblaku

Integracija povpraševanj nerelacijskih podatkovnih baz in doseganje visoke razpoložljivosti v računalniškem oblaku UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Matej Rojko Integracija povpraševanj nerelacijskih podatkovnih baz in doseganje visoke razpoložljivosti v računalniškem oblaku MAGISTRSKO

More information

PLSQL 9i Index. Section Title Page

PLSQL 9i Index. Section Title Page One PLSQL Introduction 2 Procedural Language for SQL 3 Two PLSQL Structure 5 Basic Structure of PLSQL 6 The Declaration Section in PLSQL 7 Local Variables in PLSQL 8 Naming Local Variables in PLSQL 10

More information

Nataša Knez. Primerjava relacijske in NoSQL podatkovne baze in opredelitev kriterijev za pomoč pri izbiri najprimernejše podatkovne baze

Nataša Knez. Primerjava relacijske in NoSQL podatkovne baze in opredelitev kriterijev za pomoč pri izbiri najprimernejše podatkovne baze UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Nataša Knez Primerjava relacijske in NoSQL podatkovne baze in opredelitev kriterijev za pomoč pri izbiri najprimernejše podatkovne baze DIPLOMSKO

More information

Postavitev privatnega oblaka z VMware vcloud

Postavitev privatnega oblaka z VMware vcloud Univerza v Ljubljani Fakulteta za računalništvo in informatiko Pece Adjievski Postavitev privatnega oblaka z VMware vcloud DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: prof. dr. Matjaž Branko Jurič

More information

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Matjaž Poljanšek DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Matjaž Poljanšek DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Matjaž Poljanšek Analiza modela platforme kot storitve in razvoj aplikacije v oblaku na platformi Google App Engine DIPLOMSKO DELO NA UNIVERZITETNEM

More information

Osnovna navodila za uporabo programskega paketa V3.1 STEP 7 MicroWIN 32

Osnovna navodila za uporabo programskega paketa V3.1 STEP 7 MicroWIN 32 ŠC Novo mesto Višja strokovna šola - elektronika Osnovna navodila za uporabo programskega paketa V3.1 STEP 7 MicroWIN 32 mag., univ. dipl. inž. ŠOLSKI CENTER NOVO MESTO, november 2004 KAZALO stran 1 UVOD...

More information

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Marko Kastelec PRIMERJAVA NAČINOV DOSTOPA DO PODATKOVNE BAZE V PROGRAMSKEM JEZIKU C#

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Marko Kastelec PRIMERJAVA NAČINOV DOSTOPA DO PODATKOVNE BAZE V PROGRAMSKEM JEZIKU C# UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Marko Kastelec PRIMERJAVA NAČINOV DOSTOPA DO PODATKOVNE BAZE V PROGRAMSKEM JEZIKU C# DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

Specification and Implementation of a Light-Weight Internet Content Delivery Platform

Specification and Implementation of a Light-Weight Internet Content Delivery Platform University of Ljubljana Faculty of Computer and Information Science Marko Čeferin Specification and Implementation of a Light-Weight Internet Content Delivery Platform DIPLOMA THESIS First cycle professional

More information

Uvod v evolucijsko računanje

Uvod v evolucijsko računanje Uvod v evolucijsko računanje Bogdan Filipič Odsek za inteligentne sisteme, Institut Jožef Stefan Jamova 39, 1000 Ljubljana bogdan.filipic@ijs.si Predavanje pri predmetih Umetna inteligenca 2 in Evolucijsko

More information

Tomi Erlih VZPOREDNO RAČUNANJE S POMOČJO GRAFIČNE KARTICE

Tomi Erlih VZPOREDNO RAČUNANJE S POMOČJO GRAFIČNE KARTICE UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tomi Erlih VZPOREDNO RAČUNANJE S POMOČJO GRAFIČNE KARTICE DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: doc. dr. Patricio Bulić Ljubljana,

More information

Enterprise modelling with UML

Enterprise modelling with UML Elektrotehniški vestnik 68(2 3): 109 114, 2001 Electrotechnical Review, Ljubljana, Slovenija Enterprise modelling with UML Aljaž Zrnec, Marko Bajec, Marjan Krisper University of Ljubljana, Faculty of Computer

More information

Aleksander Berus Analiza ogrodja MonoGame za medplatformni razvoj iger na mobilnih platformah

Aleksander Berus Analiza ogrodja MonoGame za medplatformni razvoj iger na mobilnih platformah Univerza v Ljubljani Fakulteta za računalništvo in informatiko Aleksander Berus Analiza ogrodja MonoGame za medplatformni razvoj iger na mobilnih platformah DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor:

More information

TEHNIČNA POJASNILA GLEDE IZPOLNJEVANJA ITS POROČIL

TEHNIČNA POJASNILA GLEDE IZPOLNJEVANJA ITS POROČIL TEHNIČNA POJASNILA GLEDE IZPOLNJEVANJA ITS POROČIL Tip dokumenta IT-TN Oznaka dokumenta BS-IT-RA-TN-ITS-dod Verzija dokumenta 1.1 Status dokumenta Datum zadnje spremembe dokumenta 30.01.2014 Zgodovina

More information

Unsupervised learning of scene and object planar parts

Unsupervised learning of scene and object planar parts Elektrotehniški vestnik 74(5): 297 302, 2007 Electrotechnical Review, Ljubljana, Slovenija Unsupervised learning of scene and object planar parts Katarina Mele, Jasna Maver Univerza v Ljubljani, Fakulteta

More information

Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5

Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5 Univerza v Ljubljani Fakulteta za računalništvo in informatiko Roman Gorišek Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5 DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

OGRODJE ZA OPTIMIZACIJO INDEKSOV V MYSQL BAZAH PODATKOV

OGRODJE ZA OPTIMIZACIJO INDEKSOV V MYSQL BAZAH PODATKOV UNIVERZA V LJUBLJANI FAKULTETA ZA ELEKTROTEHNIKO MATJAŽ MRGOLE OGRODJE ZA OPTIMIZACIJO INDEKSOV V MYSQL BAZAH PODATKOV DIPLOMSKO DELO UNIVERZITETNEGA ŠTUDIJA Mentor: doc. dr. Boštjan Murovec Ljubljana,

More information

Podatkovni modeli in jeziki

Podatkovni modeli in jeziki Podatkovni modeli in jeziki 2018/19 Iztok Savnik, FAMNIT 1 Osnovni podatki Naslov: Predavatelj: Vaje: Točke: Komunikacija: Govorilne ure: URL: E-učilnica: Podatkovni modeli in jeziki dr. Iztok Savnik domače

More information

Dostop do podatkov Svetovne banke v orodju Orange

Dostop do podatkov Svetovne banke v orodju Orange Univerza v Ljubljani Fakulteta za računalništvo in informatiko Miha Zidar Dostop do podatkov Svetovne banke v orodju Orange DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM RAČUNALNIŠTVO IN INFORMATIKA Mentor:

More information

Selitev aplikacije iz Oracle Forms v Oracle ADF (Application migration from Oracle Forms to Oracle ADF)

Selitev aplikacije iz Oracle Forms v Oracle ADF (Application migration from Oracle Forms to Oracle ADF) Univerza na Primorskem FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE ZAKLJUČNA NALOGA Selitev aplikacije iz Oracle Forms v Oracle ADF (Application migration from Oracle Forms to Oracle

More information

Poglavje 7. Indeksi z uporabo drevesnih struktur Povzeto po [1]

Poglavje 7. Indeksi z uporabo drevesnih struktur Povzeto po [1] Poglavje 7 Indeksi z uporabo drevesnih struktur Povzeto po [1] - 1 - Indeksi uvod.. Včasih hočemo najti vse zapise, ki imajo določeno vrednost v določenem polju INDEKS je zunanja podatkovna struktura,

More information

2.1 Uvod v podatkovne baze

2.1 Uvod v podatkovne baze 2. Podatkovne baze Uvod v podatkovne baze Predstavitev podatkov Relacijski podatkovni model Povpraševalni jezik SQL Modeliranje podatkov 2.1 Uvod v podatkovne baze Podatkovna osnova informacijskih sistemov

More information

Arhitektura oblaka Upravljanje v oblaku Delovanje v oblaku Arhitekturni okvir računalništva v oblaku

Arhitektura oblaka Upravljanje v oblaku Delovanje v oblaku Arhitekturni okvir računalništva v oblaku 1 Predstavitev 2 Področja delovanja 3 GRC knjižnica 4 Primeri CAI in CCM Aplikacijska varnost 5 CCSK 6 Zaključek Globalna, neprofitna organizacija 23,000+ članov, 100 korporativnih članov, 50 odsekov Gradimo

More information

Razširljiv nadzor velikih oblačnih sistemov

Razširljiv nadzor velikih oblačnih sistemov Univerza v Ljubljani Fakulteta za računalništvo in informatiko Nejc Saje Razširljiv nadzor velikih oblačnih sistemov MAGISTRSKO DELO ŠTUDIJSKI PROGRAM DRUGE STOPNJE RAČUNALNIŠTVO IN INFORMATIKA Mentor:

More information

Časovno omejevanje dostopa do interneta

Časovno omejevanje dostopa do interneta Univerza v Ljubljani Fakulteta za računalništvo in informatiko Edi Medvešček Časovno omejevanje dostopa do interneta DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN

More information

Univerza v Mariboru Fakulteta za organizacijske vede. Programska rešitev za grafično prikazovanje najema in rezervacij vozil

Univerza v Mariboru Fakulteta za organizacijske vede. Programska rešitev za grafično prikazovanje najema in rezervacij vozil Univerza v Mariboru Fakulteta za organizacijske vede Smer: Informatika v organizaciji in managementu Programska rešitev za grafično prikazovanje najema in rezervacij vozil Mentor: doc dr. Werber Borut

More information