Oracle Tipps & Tricks: Kako da spojim zapise (rekorde) u jedan string? [How to make a string out of records?]

September 21, 2009 – Dejan

U ovom članku ću napisati rješenje za problem - kako spojiti više zapisa u jedan string.

Kao primjer ću uzeti jedan “real world case”, kojeg i ja lično imam u svakodnevnoj praksi.

Naime, imam tabelu, koja sadrži popis aplikacija i podatke o osobama, koje rade na toj aplikaciji. Kada nešto mijenjam u bazi, moram putem E-Maila obavijestiti sve osobe zadužene za određenu aplikaciju. Naravno da bih mogao napisati jednu petlju i pomoću UTL_MAIL slati pojedinačno E-Mail svakome, ali sam za ovu, a i druge svrhe, odlučio napisati funkciju, koja mi vraća selektovane zapise (u ovom slučaju ime, prezime i E-Mail adresu) spojene u jedan string.

Potrebno je najprije kreirati uskladištenu proceduru ili funkciju, koja prima dva parametra (REF CURSOR i delimiter), a kao rezultat vraća “zaljepljeni” string, tj. sve selektovane zapise spojene u jedan string.

  CREATE OR REPLACE FUNCTION sfJoinRecords
  (
      pCursor IN sys_refcursor,
      pDelimiter IN VARCHAR2 := ','
  ) RETURN VARCHAR2
  IS
    lvTempValue   VARCHAR2(32767);
    lvReturnValue  VARCHAR2(32767);

  BEGIN
    LOOP
      FETCH pCursor INTO lvTempValue;

      EXIT WHEN pCursor%NOTFOUND;

      IF lvReturnValue IS NOT NULL THEN
          lvReturnValue := lvReturnValue || pDelimiter;
      END IF;

      lvReturnValue := lvReturnValue || lvTempValue;

    END LOOP;

    CLOSE pCursor;

    RETURN lvReturnValue;
  END sfJoinRecords;
  /

Korištenje ove funkcije izgleda ovako:

  SELECT ap.first_name,
         ap.last_name,
         ap.email_address
    FROM tb_apps_persons ap
   WHERE ap.app_id = 8
     AND ap.email_address IS NOT NULL;
FIRST_NAME LAST_NAME  EMAIL_ADDRESS
---------- ---------- -----------------------------------
Pero       Peric      pero.peric@bazepodataka.net
Marko      Markovic   marko.markovic@bazepodataka.net
Laza       Lazic      laza.lazic@bazepodataka.net
  SELECT DISTINCT
                  ap.first_name ||' '||
                  ap.last_name ||' <' ||
                  ap.email_address ||'>'
               as persons
             FROM tb_apps_persons ap
            WHERE ap.app_id = 8
              AND ap.email_address IS NOT NULL;
PERSONS
--------------------------------------------------
Laza Lazic <laza.lazic@bazepodataka.net>
Pero Peric <pero.peric@bazepodataka.net>
Marko Markovic <marko.markovic@bazepodataka.net>
SELECT sfJoinRecords(
         CURSOR(
           SELECT DISTINCT
                  ap.first_name ||' '||
                  ap.last_name ||' <' ||
                  ap.email_address ||'>'
             FROM tb_apps_persons ap
            WHERE ap.app_id = 8
              AND ap.email_address IS NOT NULL),
       ',') as persons
  FROM dual;
PERSONS
-------------------------------------------------------------------------------------------------------------------
Laza Lazic <laza.lazic@bazepodataka.net>,Pero Peric <pero.peric@bazepodataka.net>,Marko Markovic <marko.markovic@bazepodataka.net>

Naravno da se ova funkcija može koristiti za bezbroj drugih stvari, pa ako ju budete koristili u praksi, napišite u komentaru za šta ju koristite, kako bi i drugi dobili ideju ili iskoristili tu metodu.

Još jedna veoma bitna napomena: ukoliko funkciju koristite u kompleksnijim DML upitima u sklopu nekog paketa, onda ćete vjerovatno morati u specifikaciju paketa (package header) dodati ovo ograničenje:

PRAGMA RESTRICT_REFERENCES(sfJoinRecords, WNDS);

Objašnjenje za WNDS: “Asserts that the subprogram writes no database state (does not modify database tables).”


Oracle Tipps & Tricks: Kako rasparčati niz znakova [How to split a string]

September 15, 2009 – Dejan

Ukoliko imate zadatak da rasparčate neki string (koristiću ovaj uvriježeni naziv umjesto prijevoda “niz znakova”), možete to obaviti na ovaj način.

Za tu svrhu moramo kreirati jednu funkciju, kojoj kao ulazni parametar predajemo string, a koja nam vraća array sa parčadima tog stringa:

CREATE OR REPLACE FUNCTION SplitString
  (pString     IN VARCHAR2,
   pDelimiters IN VARCHAR2
  ) RETURN DBMS_SQL.VARCHAR2S
IS
  StringArray DBMS_SQL.VARCHAR2S;
BEGIN

  WITH tblString AS
      (SELECT pString AS StringToSplit
         FROM dual)
  SELECT SUBSTR(StringToSplit, beg + 1, end_p - beg - 1) token
   BULK COLLECT INTO StringArray
   FROM (SELECT beg,
                lead(beg) OVER (ORDER BY beg) end_p,
                StringToSplit
           FROM (SELECT beg, StringToSplit
                   FROM (SELECT LEVEL beg,
                                StringToSplit
                           FROM tblString
                        CONNECT BY LEVEL <= LENGTH(StringToSplit)
                        )
                   WHERE INSTR(pDelimiters ,SUBSTR(StringToSplit, beg, 1)) > 0
               UNION ALL
                 SELECT 0, StringToSplit
                   FROM tblString
               UNION ALL
                 SELECT LENGTH(StringToSplit) + 1, StringToSplit
                   FROM tblString
                )
         )
    WHERE end_p IS NOT NULL
      AND end_p > beg + 1;

  RETURN StringArray;
END;
/

Primjer korištenja te funkcije izgleda ovako:

DECLARE
  laStringArray dbms_sql.varchar2s;
  lvString VARCHAR2(512) := 'Prvo;parce;dummy;teksta;a;ovo;je;parce;zadnje';
BEGIN
  laStringArray := SplitString(lvString,';');

  -- ispisi zeljenu parcad pojedinacno:
  dbms_output.put_line('Prvo parce stringa: '|| laStringArray(1));
  dbms_output.put_line('Zadnje parce stringa: '|| laStringArray(laStringArray.COUNT));

  -- ili npr. svu parcad pomocu petlje:
  FOR i IN laStringArray.FIRST..laStringArray.LAST
  LOOP
    dbms_output.put_line('Parce br. '|| TO_CHAR(i) ||': '|| laStringArray(i));
  END LOOP;

END;

a rezultat izgleda ovako:

Prvo parce stringa: Prvo
Zadnje parce stringa: zadnje
Parce br. 1: Prvo
Parce br. 2: parce
Parce br. 3: dummy
Parce br. 4: teksta
Parce br. 5: a
Parce br. 6: ovo
Parce br. 7: je
Parce br. 8: parce
Parce br. 9: zadnje

Nadam se da će vam koristiti. :)


Jos o funkciji LEN

September 14, 2009 – Zidar

 

 

Ovoga puta nesto lepo. Verujem da isto radi na svim sistemima.  Ovako je pitanje: odrediti broj pojava nekog karaktera ili grupe karaktera unutar datog stringa. Na primer, koliko ima zareza u stringu ‘a,b,c,d,e,f’’ ?

 

DECLARE @Niz AS varchar(1000)

SET @Niz = ‘a,b,c,d,e,f,g’

 

– Koliko zareza ima u varijabli @Niz?

SELECT LEN(@Niz) - LEN(REPLACE(@Niz,‘,’,))

Ovo bi moglo biti korisno kada saljete niz procedure, pa onda procedura taj niz treba da insertuje u tabelu….

 

Posto je i razmak znak, tako je i kratak blog-entry ipak blog-entry.

 

J

 


MS SQL: Da li je razmak punopravan znak?

September 9, 2009 – Zidar

Svi SQL sistemi i programski jezici imaju funkciju za izracunavanje duzine stringa. U MS SQL tu ulogu ima funkcija LEN. Valjda i najveci pocetnik zna da izvrsi ovo:

SELECT LEN('abc')

i dobije rezultat 3.  Hajde da prosirimo string ‘abc’, ovako:

SELECT LEN('abc        x')

Rezultat je 12.  Ako odbacimo ‘x’ na kraju, ja bih ocekivao da dobijem duzimu 11. I razmaci su karakteri, inace bi ih funkcija LEN zanemarila u prethodnom primeru, zar ne? Pokusajmo dakle ovo:

SELECT LEN('abc        ')

Ooops, rezultat je 3.  A ocekivali smo 11. Trk u Books On line, da vidimo sta pise, kad ono - nista. Nema ni pomena da se LEN ovako ponasa. OK, mozad se to smatra za opste poznatu stvar, jer u nekim drugim sistemima se LEN ponasa slicno.  Ja doduse ne poznajem druge sistem toliko detljno.  Jedini database sistem koji poznajem bolje nego MS SQL je Access. I gle cuda, u Accesu LEN ne zanemaruje razmake na kraju stringa.

Dobro, prihvatimo realnost, MS SQL zanemaruje razmake na kraju stringa u funkciji LEN. Kako onda da dobijem, pravu duzinu stringa? Moze na vise nacina. Nacin prvi: dodati neki znak na string kome racunamo duzinu, pa od rezultat oduzeti 1. Ovako nekako:

SELECT LEN('abc        '+'X') - 1

Radi. Vraca rezultat 11. Lepo, ali ko ce se toga setiti bas svaki put…. Zato postoji diraktan nacin - upotreba funkcije DATALENGTH. Nisam siguran da je ova funkcija po SQL standardu, ali nema veze, vrsi posao:

SELECT DATALENGTH('abc        ')

Dobili smo tacan rezultat - 11. Ipak, pre nego sto u glavi zacrtamo ‘Ne koristi LEN nikada, umesto LEN koristi DATALENGTH, i nemaj drugog Boga osim toga’, razumno je pretpostaviti da je DATLENGTH skuplja za izvrsavanje nego LEN, sto u nekim kverijima moze biti od znacaja.

O, i jos jedna stvar na kraju. Razmaci na pocetku stringa se uzimaju u obzir, LEN ih ne zanemaruje. Ko zeli, moze da proba i uveri se sam.

Naravoucenije: za MS SQL razmak je gradjanin nizeg reda, pa se ponekad zanemaruje. Medjutim, kao i svuda, ako s egradjanin nizeg reda postavi na neku vodecu poziciju, sitem pocinje da ga uvazava. MS Access je znaci vise naklonjen univerzalnoj jendakosti, bar kad je funkcija LEN u pitanju, pa razmake tretira kao i sve druge znakove, bez zizuzetka, bez obzira na poziciju.

Kad je  MICROSFT u pitnju sve je moguce.

:-)


Recenzija knjige: Linux Recipes for Oracle DBAs

September 5, 2009 – Dejan

Nakon kraće ljetne pauze u čitanju stručne Oracle literature nastavljam u revijalnom tonu sa novom recenzijom (da! na godišnji odmor nisam ponio niti jednu Oracle knjigu!! :)).

Ovaj put je na red došla izvanredna knjiga, koja opisuje simbiozu Oraclea i Linuxa - “Linux Recipes for Oracle DBAs“, čiji autori su Darl Kuhn, Charles Kim i Bernard Lopuz.

Ja sam lično prvo “production” iskustvo sa Oracle bazom imao na platformi IBM AIX, a zadnje 3-4 godine sam u kontaktu isključivo sa Windows platformom, tako da sam malo zahrđao na području Linuxa/Unixa. Međutim, zbog trenutne restrukture u firmi, koja obuhvata i migraciju nekoliko Oracle baza na IBM AIX platformu, prinuđen sam da opet aktivnije zaplivam u Linux/Unix vode.


Odabrao sam ovu knjigu, jer sam od nekoliko osoba čuo da sadrži mnogo konkretnih “real-world” slučajeva po principu “problem - rješenje”, odnosno “pitanje - odgovor”. Kratki opis na prvoj korici knjige odlično predstavlja kompletan sadržaj knjige: “Real-world solutions for the interesection of Linux and Oracle technologies“. Meni ti kratki i praktični savjeti  odlično odgovaraju, jer nemam želju, niti vremena da čitam knjige sa opširnim objašnjenjima šta čemu služi i kako se koriste pojedine Linux komande.

Pored osnovnih banalnih stvari, npr. kako se logovati na Linux server ili kako izlistati sadržaj nekog direktorija ili datoteke, navedeno je mnoštvo praktičnih primjera kako:
- podesiti shell i pisati shell skripte
- upravljati Linux procesima
- kreirati i podesiti korisničke naloge i grupe, potrebne za instalaciju i administracije Oracle softwarea
- kreirati direktorije i datoteke, te kako editovati neku datoteku koristeći vi editor
- analizirati i konfigurisati sistemske resurse (CPU, I/O, memoriju i td.)
- implementirati Oracle ASM i Oracle RAC na Linuxu
i td.

Saznao sam i da Oracle nudi nekoliko dodatnih alata zastupljenih na Linuxu, ali ne i na Windowsu (npr. OS Watcher). Naučio sam i kako se koristi cron za podešavanje automatskog izvršavanja neke operacije, zatim kako koristiti screen i mnogo drugih jednostavnijih, a korisnih savjeta.

Na zadnjoj korici knjige piše “User Level: Beginner-Intermediate“, što daje ohrabrenje onima bez velikog iskustva sa Linuxom - npr.  meni. :)

Dakle, nakon čitanja ove knjige, mogu slobodno reći, da bih se mogao bez ikakvog straha spojiti na bilo koji Linux server i obavljati administraciju Oracle baze na njemu.

Plašim se jedino da se koristeći Linux i konzolni text terminal ne odviknem od korištenja miša. :)

Ocjena: 10/10


Oracle 11gR2 vani - spremno čeka svoju šansu u produkciji! :)

September 2, 2009 – msutic

Iako sam ovu vijest već vidio na mnogo blogova ne bi bilo u redu da se zaobiđe ovaj blog.

Što reći, Oracle 11gR2 možete skinuti na stranicama OTN-a - skidaj i trenutno je dostupna samo verzija za Linux.

Više informacija o tome što nam 11gR2 nudi možete pogledati u dokumentaciji.

Sad se čeka verzija Solaris OS i onda 11-cu lagano puštamo u produkciju.

Neka testiranje počne :)


Ispiti za Oracle sertifikate se više neće polagati preko Prometrica

September 1, 2009 – Dejan

Tek danas naletih na informaciju, da se ispiti za sve Oracle sertifikate neće više moći polagati u Prometric testnim centrima, nego je Oracle našao novog partnera - Pearson VUE.

Navodno će za sve kandidate prelazak sa Prometrica na Pearson VUE biti transparentan i moći će se i dalje u novom sistemu koristiti trenutni testing ID od Prometrica. Sve informacije o prethodnim ispitima i sertifikatima će biti sačuvane i prenesene u novi sistem.

Usput se ukida dosadašnji “Hands On Course Requirement Forms” sistem i uvodi se novi sistem pod nazivom “Course Submission”. Da li je to samo novi naziv ili će se nešto bitno promijeniti, vidjeće se uskoro.

Više informacija možete pročitati u službenoj obavijesti:
http://www.oracle.com/global/us/education/certification/exam_vendor.html


Records and Collections - Part I

August 27, 2009 – Noctua4u

Često u programerskim razgovorima dođe do nesporazuma oko nekih stvari koje postoje svuda (i u razvojnim jezicima i u bazama), koje se ponašaju na istovetan ili približno istovetan način, ali se nazivaju drugačije.

Jedan od najčešćih kamena spoticanja u razgovorima, a ne retko i u realizaciji, je struktura podataka poznata kao…  Hm, u programskim jezicima se sreće kao RecordSet, Sets, Bags, Lookup tables, Arrays, Records…

Za početak, definisaćemo šta je šta, čemu služi, kako izgleda, i upoznaćemo se sa osnovnim pojmovima.

Stalna praksa je prenos podataka na relaciji DB - KLIJENT. Dvosmerno. (Pod KLIJENT podrazumevam bilo koji programski jezik, aplikaciju, skript… bilo šta što pristupa i koristi bazu).

U većem broju slučajeva, mnogo toga se može završiti jednostavnim pozivom procedura/funcija. Vi ih pozovete, one vam vrate rezultat (ili nešto odrade pa vrate rezultat).
Lepo i jednostavno.
Ali šta raditi kada je KLIJENTU potrebno mnogo rezultata? Logično rešenje je proslediti sve tražene podatke.
Kako? Pomoću recordseta.

Da bi koristili recordset, potrebno je “napraviti” novi tip podataka koji predstavlja strukturu informacija koje prenosite tj, sa kojima radite.

Kod Oracle-a, u te svrhe postoje PL/SQL collections i Records:

  • Kolekcija (Collection - Zbirka, kolekcija) je uređena grupa podataka ISTOG tipa.
  • Record (Record - Zapis, slog) je grupa podataka, pri čemu svaki podatak ima svoje IME i svoj TIP.

Pri čemu Kolekcije mogu da budu:

  • Associative arrays (asocijativni nizovi) -  Sadrže proizvoljan broj elemenata kojima se pristupa brojem ili imenom. Možemo reći da je to skup Ključ-Vrednost parova pri čemu je svaki Ključ jedinstven i koristi se da bi se dobila Vrednost (npr: mojNiz(”prvi_element”) := 1 ili mojNiz(1) := 1).
    Kod Oracle-a ova struktura podataka je poznatijia kao “index-by tables” dok su u drugim programskim jezicima poznatiji (a i po funkcionalnosti približniji) kao “hash tables“.
  • Nested tables (ugnježdene tabele) - Sadrže proizvoljan broj elemenata sekvencionalno numerisanih. Element može da bude bilo koji tip (Number, Varchar, Record, PL/SQL Type…).
  • Varrays (variable-size arrays) - Sadrže fiksan broj elemenata sekvencionalno numerisanih.

Record je tip podataka koji se sastoji od grupe polja. Slično kolonama u redu tabele. Kao što je ranije pomenuto, svako polje ima sve ime i svoj tip. Moguće je koristiti %ROWTYPE za deklaraciju PL/SQL record-a koji predstavlja red fizičke tabele u bazi a moguće je i pobrojati potrebne kolone.

Iako su kolekcije/record jednodimenzionalni tipovi podataka, moguće je kreirati višedimenzionalnu strukturu praveći kolekciju čiji su elemenati takođe kolekcije.

Moguće je kreirati i koristiti ih kako na globalnom nivou (na nivou DB, pri čemu se prava korišćenja novo kreiranog tipa/kolekcije dodeljuju na identičan način korisnicima/rolama kao i prava korišćenja tabela ili bilo kog drugog baznog objekta) tako i na lokalnom nivou (u okviru paketa, procedure, funkcije… pri čemu se kreiraju, inicijalizuju i koriste dok se izvršava procedura/funkcija).
Takođe, moguće je prosleđivati ih kako u/iz procedura i funkcija tako i van DB, ka klijentu.

Teorijska, globalna analogija sa postojećim programskim jezicima bi bila:

  • Arrays (u drugim jezicima) < = > Varrays u PL/SQL
  • Set, RecordSet, Record < = > Nested Tables
  • Hash tables, Lookup tables < = > Associative Arrays
  • RecordSet < = > Record

Zašto “teorijska” i zašto se pojedine stvari ponavljaju?
Jednostavno, moguće je, u zavisnosti od potreba, prikazivati strukture na različite načine.

Neke osobine i svojstva kolekcija:

  • Nested tables
    - Mogu biti tip podataka kolone u baznoj (fizičkoj) tabeli
    - Vrednosti indexa (Misli se na Ključ) ne moraju da budu uzastopne
    - Inicijalno nepoznat broj elemenata i njihova vrednost
    - Promena samo nad pojedinim elementima (Update, Delete)
    - Nakon smeštanja u bazu, redosled elemenata ne mora da bude sačuvan (tj. indeksi/ključevi kojima su indeksirani elementi ne moraju da budu sekvencionalni, naročito posle izvesnih operacija)
  • Varrays
    - Mogu biti tip podataka kolone u baznoj (fizičkoj) tabeli
    - Elementi su, obično, svi sekvencionalno ustrojeni.
    - Unapred poznat broj elemenata i njihove vrednost
    - Promena nad svim elementima istovremeno (naročito pogodno za masovan UPDATE)
    - Nakon smeštanja u bazu, sačuvan je redosled.
  • Associative Arrays
    - NE mogu biti tip podataka kolone u baznoj (fizičkoj) tabeli
    - Inicijalno nepoznat broj elemenata i njihova vrednost.
    - Redosled elemenata nije bitan jer im se pristupa po Ključu.
    - Pogodni za relativno mali broj podataka koji se prikupljaju i inicijalizuju u memoriji svaki put kada se pozove procedura/funkcija

Kao zaključak prvog dela, bilo bi poželjno uočiti i upamtiti suštinsku razliku: Kolekcije su grupa podataka ISTOG tipa, a Record je grupa podataka RAZLIČITOG tipa.
Takođe, razlike u kolekcijama su u broju elemenata (poznat, nepoznat), redosledu elemenata (promenljiv i ne narušava se) i načinu pristupa elementima (po imenu ili po poziciji).

U “sledećem broju” malo tehničkih karakteristika, kreiranje, inicijalizacija i korišćenje.


Recenzija knjige: “Beginning Oracle Database 11g Administration”, Iggy Fernandez

August 22, 2009 – msutic

Ukoliko redovito čitate tekstove na ovom blogu, jasno se može vidjeti da ima podosta sadržaja vezanog za tematiku administracije Oracle baza podatka. Možda baš radi tih tekstova odlučite i sami postati db administrator, iako se time niste bavili nikada. Moj vam je savjet da se bez straha upustite u tu avanturu, jer iako se možda posao db administratora čini vrlo kompliciranim, postoje mnoge knjige i članci koji će vam posao učenja maksimalno olakšati.

Jedna od takvih knjiga je i knjiga “Beginning Oracle Database 11g Administration” (Iggy Fernandez).

Neka vas ne zavara naslov u kojem piše 11g. Znanje koje možete dobiti čitajući ovu knjigu je primjenjivo gotovo na sve aktualne verzije Oracle baza podataka.

Dosta uvoda, sad malo detaljnija recenzija.
Prvo što mogu reći za ovu knjigu je da je ovo odlična knjiga za svakog db administratora početnika. Iggy Fernandez je odličan pisac, te je sposoban na vrlo jednostavan način u kratkim crtama objasniti bitne stvari. Sama knjiga nema puno stranica, te je očito da se kroz poglavlja ne ulazi previše u detalje što je odlično za početnike koji ionako te detalje vjerojatno ne bi razumjeli bez radnog iskustva.

Iza svakog poglavlja se nalazi popis knjiga u kojim se može naći nešto više informacija o toj temi za one koji žele znati više. Kroz taj popis Iggy ljude usmjerava na super knjige, te početnici neće morati gubiti dragocjeno vrijeme tražeći dobre knjige u moru informacija. Uz to, Iggy često daje vlastite vrijedne savjete sakupljene iz osobnog radnog iskustva administratora Oracle baza podataka koji mogu biti od iznimne važnosti početnicima.

Knjiga je odlično organizirana stoga vam preporučam da ju čitate od korice do korice, bez preskakivanja tema.

Podijeljena je na četiri dijela:
- Database Concepts
- Database Implementation
- Database Support
- Database Tuning

- Database Concepts
Ovo je poglavlje zanimljivo zbog toga što Iggy u njemu počinje sa objašnjavanjem najosnovnijih, ali jako bitnih, stvari vezanih za baze podataka. Tu ćete naučiti što je baza podataka, a što je zapravo RDBMS (Relational Database Management Systems),te gdje tu možemo svrstati Oracle. Fino je opisano na koji način aplikacije komuniciraju sa bazom podataka, te kratak opis internog mehanizma Oracle RDBMS-a.

- Database Implementation
Ovdje je fino opisano na koji način se ISPRAVNO prvodi implementacija baze podataka. Važno je za razumjeti da za kreiranje baze podataka u produkciji nije dovoljno samo pratiti osnovne “Wizarde” ili izvršiti “CREATE DATABASE” naredbu. Bitno je prije svega planiranje fizičkog i logičkog dizajna kao i mnoge druge stvari na koje se Iggy osvrće kroz cijelo poglavlje.

- Database Support
U ovom poglavlju je fino opisan svakodnevni posao jednog administratora baza podataka. Vrlo je važno za razumjeti da je primarna obaveza jednog db administratora omogućiti da baza zadovolji sve zahtjeve “business”-a. Opisano je zašto je najvažnija obaveza svakog administratora redovito praviti sigurnosne pohrane podataka i biti vješt u vraćanju tih podataka u slučaju katastrofe. Zanimljivo je da ovdje Iggy iznosi neka vlastita iskustva, “Horor priče” kako ih sam naziva, kada su stvari pošle po zlu baš radi loše sigurnosne pohrane podataka.
O ovom se djelu nalazi i najvažnije poglavlje po njemu “The Big Picture and the Ten Deliverables” gdje Iggy navodi kakva je uloga administratora baza podatka u nekom poslovanju tvrtke, tj. u koji sektor bi se on mogao svrstati. Naglasak je stavljen na činjenicu da je vrlo bitno poznavati poslovanje kompanije i znati kakva je vaša uloga u svemu tome. U svakom slučaju VRLO zanimljivo poglavlje koje (po meni) morate pročitati i razumjeti.

- Database Tunning
I za kraj, ovo je po meni i najmanje zanimljivo poglavlje, ali ipak daje početnicima neku grubu sliku o tome kako se izvršava podešavanje raznih svojstava Oracle RDBMS-a ili podešavanje SQL upita. Kroz primjere je opisan proces podešavanja, te bi preporučio da korake iz primjera izvršite na vlastitom računalu, jer najbolje čovjek uči kad sam nešto isproba.

Knjiga s tehničke strane neće biti od veće koristi nekom malo iskusnijem administratoru, ali sa ove poslovne strane će pružiti mnoštvo korisnih informacija. Mnogi iskusni administratori se zbog stečenog samopouzdanja i iskustva često znaju opustiti i ne vodit previše računa o dokumentaciji, detaljnom planiranju i sličnim stvarima što ih može dovesti do problema. U knjizi je dobro opisana važnost dokumentacije i kontrolnih listi (checklist) koje smanjuju stres u radu, smanjuju mogućnost nastanka greški i slično.

A što se tiče početnika - ova knjiga nek vam bude prva u literaturi uz Oracle dokumentaciju. Tek nakon ove knjige se uhvatite čitat knjiga pisanih od strane gospodina Tom Kyte-a.

Ocjena 9/10


Kako instalirati Oracle Client 11g na Windows 7 ?

August 17, 2009 – msutic

U zadnje se vrijeme dosta rijetko sjetim napisati neki tekst zbog nedostatka vremena ili ideja, ali nikako ne mislim odustati od pisanja “blog zapisa”. Inače imam i vlastiti blog na engleskom jeziku (http://msutic.blogspot.com) odakle odabirem interesantne tekstove koje potom zapišem ovdje na hrvatskom jeziku. Ova je stranica jednostavno mnogo popularnija od mog privatnog bloga, te će zbog toga tekstovi koje ovdje zapišem biti dostupniji ljudima. Nadam se da je to u redu :)

U ovom postu bi htio pokazati kako upogoniti Oracle Client 11g aplikaciju na Windowsu 7. Oracle za sada još nije certificirao Windows 7 operativni sustav, te će vam standardna instalacija zbog tog razloga pucati. Ali taj se problem može vrlo lako zaobići.

Naime instalacija klijenta će vam puknuti kod provjere verzije operativnog sustava sa greškom:

Checking operating system requirements …
Expected result: One of 5.0,5.1,5.2,6.0
Actual Result: 6.1
Check complete. The overall result of this check is: Failed <<<<
Problem: Oracle Database 11g is not certified on the current operating system.
Recommendation: Make sure you are installing the software on the correct platform.
========================================================

Da bi se ta provjera zaobišla potrebno je malo izmijeniti refhost.xml datoteku i dodati zapis za Windows 7.

Datoteku refhost.xml se može pronaći na lokaciji:
c:\unpacked_client_installation\win32_11gR1_client\client\stage\prereq\client\refhost.xml

Isječak iz refhost.xml datoteke:

<CERTIFIED_SYSTEMS>
<OPERATING_SYSTEM>
<!–Microsoft Windows 2000–>
<VERSION VALUE="5.0"/>
<SERVICE_PACK VALUE="1"/>
</OPERATING_SYSTEM>
<OPERATING_SYSTEM>
<!–Microsoft Windows XP–>
<VERSION VALUE="5.1"/>
<SERVICE_PACK VALUE="1"/>
</OPERATING_SYSTEM>
<OPERATING_SYSTEM>
<!–Microsoft Windows 2003–>
<VERSION VALUE="5.2"/>
</OPERATING_SYSTEM>
<!–Microsoft Windows Vista–>
<OPERATING_SYSTEM>
<VERSION VALUE="6.0"/>
</OPERATING_SYSTEM>
<!–Microsoft Windows 7–>
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>

</CERTIFIED_SYSTEMS>

Tu sam podebljao zapis koji je potrebno dodati i ponovo inicirati instalaciju. Nakon toga bi sve provjere trebale uspješno proći i instalacija bi trebala završiti bez greške.

Osobno sam testirao samo značajke klijenta koje i inače koristim u svakodnevnom radu, te je sve funkcioniralo besprijekorno. Moguće je da neke stvari kod nekoga neće raditi, ali sa tim se nisam zamarao s obzirom da kod mene funkcionira sve što mi treba.

Eto, sad kad možete instalirati Oracle klijenta ništa vas više ne sprječava da instalirate i isprobate nove Windowse :)