Dva različita listenera na jednom Oracle db serveru

Sunday, 22.03.2009 – msutic

Listener je proces koji omogućava komunikaciju sa Oracle bazom/bazama podataka.

Na mnogim db serverima ćemo najčešće imati jedan (defaultni) listener “LISTENER” koji sluša na (defaultnom) portu 1521.

Ali što ako želimo na jednom db serveru imati dva (ili više) listenera koji “slušaju” za dvije ili više baza podataka?

U ovom kratkom demo testu ću pokazati kako postići takvu situaciju.

Za test sam kreirao dvije različite baze, te ću svakoj od njih dodijeliti odgovarajući listener proces.

(Oracle 11g database)
SID : test11
HOME : /app/oracle/product/11.1.0

(Oracle 10g database)
SID : test10
HOME : /app/oracle/product/10.2.0

sa sqlnet.ora parametrom:

# sqlnet.ora Network Configuration File: /oracle/product/10.2.0/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

Prvo ću konfigurirati listener za 11g bazu podataka.

LISTENER.ORA

# listener.ora Network Configuration File: /app/oracle/product/11.1.0/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER_1
=
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /app/oracle/product/11.1.0)
(PROGRAM = extproc)
)
)


LISTENER_1
=
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = test11))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.10.18)(PORT = 1521))
)
)


TNSNAMES.ORA

# tnsnames.ora Network Configuration File: /app/oracle/product/11.1.0/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

TEST11 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.10.18)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test11)
)
)

U LISTENER.ORA datoteci sam naveo defaultnu putanju za listener proces, postavio ime listenera “SID_LIST_LISTENER_1” i definirao konfiguraciju za “LISTENER_1” listener. Ovdje su vrlo važne postavke adresa/naziv host-a koja je u mom slučaju 10.2.10.18 i port koji će LISTENER_1 koristiti za slušanje – ostavit ću defaultni 1521.

Startati ću LISTENER_1:

$ lsnrctl start LISTENER_1

$ lsnrctl service LISTENER_1

LSNRCTL for Linux: Version 11.1.0.7.0 – Production on 21-MAR-2009 22:59:11

Copyright (c) 1991, 2008, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=test11)))
Services Summary…
Service “PLSExtProc” has 1 instance(s).
Instance “PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service…
Handler(s):
“DEDICATED” established:0 refused:0
LOCAL SERVER
The command completed successfully

Nema db servisa.

PMON dinamički registrira db servis sa listenerom, ali ja ću svejedno forsirati registraciju sa komandom “alter system register”.

$ sqlplus “/as sysdba”

SQL> alter system register;

System altered.

$ lsnrctl status LISTENER_1

LSNRCTL for Linux: Version 11.1.0.7.0 – Production on 21-MAR-2009 23:01:53

Copyright (c) 1991, 2008, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
————————
Alias                     LISTENER_1
Version                   TNSLSNR for Linux: Version 11.1.0.7.0 – Production
Start Date                21-MAR-2009 22:58:54
Uptime                    0 days 0 hr. 2 min. 58 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /app/oracle/product/11.1.0/network/admin/listener.ora
Listener Log File         /app/oracle/diag/tnslsnr/dibidus2/listener_1/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=test11)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.2.10.18)(PORT=1521)))
Services Summary…
Service “PLSExtProc” has 1 instance(s).
Instance “PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service…
Service “test11” has 1 instance(s).
Instance “test11”, status READY, has 1 handler(s) for this service…
Service “test11XDB” has 1 instance(s).
Instance “test11”, status READY, has 1 handler(s) for this service…
Service “test11_XPT” has 1 instance(s).
Instance “test11”, status READY, has 1 handler(s) for this service…
The command completed successfully

Pa ćemo testirati:

$ tnsping test11

TNS Ping Utility for Linux: Version 11.1.0.7.0 – Production on 21-MAR-2009 23:03:19

Copyright (c) 1997, 2008, Oracle.  All rights reserved.

Used parameter files:
/app/oracle/product/11.1.0/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.10.18)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = test11)))
OK (0 msec)

$ sqlplus system/qwertz@test11

SQL*Plus: Release 11.1.0.7.0 – Production on Sat Mar 21 23:03:54 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 – Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

Radi 🙂

A sad da konfiguriramo i drugi listener proces za 10g bazu podataka.

LISTENER.ORA
# listener.ora Network Configuration File: /app/oracle/product/10.2.0/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER_2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /app/oracle/product/10.2.0)
(PROGRAM = extproc)
)
)

LISTENER_2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = test11))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.10.18)(PORT = 1522))
)

TNSNAMES.ORA
TEST10 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.10.18)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME = test10)
)
)

Za LISTENER_2 ću morati promijeniti defaultni port 1521 s obzirom da LISTENER_1 već sluša na tom portu, pa ću u ovom primjeru koristiti 1522 port.

PMON će po default-u registrirati db servis sa listenerom koji sluša na portu 1521 (u našem slučaju LISTENER_1).  Mi nekako moramo natjerati PMON da registrira db servis sa listenerom koji sluša na nekom drugom portu (1522 u našem slučaju).

To možemo postići ako ispravno definiramo LOCAL_LISTENER parametar.

(Iz dokumentacije) LOCAL_LISTENER specifies a network name that resolves to an address or address list of Oracle Net local listeners.

SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=10.2.10.18)(PORT=1522))’ scope=both;

System altered.

Pod local_listener sam specificirao adresu LISTENER_2 listenera i zapisao vrijednost u memoriju i parametar datoteku.

Pa da testiramo:

$ lsnrctl start LISTENER_2

$ sqlplus “/as sysdba”

SQL> alter system register;

System altered.

$ lsnrctl status LISTENER_2

LSNRCTL for Linux: Version 10.2.0.4.0 – Production on 21-MAR-2009 23:19:00

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.2.10.18)(PORT=1522)))
STATUS of the LISTENER
————————
Alias                     LISTENER_2
Version                   TNSLSNR for Linux: Version 10.2.0.4.0 – Production
Start Date                21-MAR-2009 23:18:06
Uptime                    0 days 0 hr. 0 min. 53 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /app/oracle/product/10.2.0/network/admin/listener.ora
Listener Log File         /app/oracle/product/10.2.0/network/log/listener_2.log
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.2.10.18)(PORT=1522)))
Services Summary…
Service “PLSExtProc” has 1 instance(s).
Instance “PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service…
Service “test10” has 1 instance(s).
Instance “test10”, status READY, has 1 handler(s) for this service…
Service “test10XDB” has 1 instance(s).
Instance “test10”, status READY, has 1 handler(s) for this service…
Service “test10_DGB” has 1 instance(s).
Instance “test10”, status READY, has 1 handler(s) for this service…
Service “test10_XPT” has 1 instance(s).
Instance “test10”, status READY, has 1 handler(s) for this service…
The command completed successfully

$ tnsping test10

TNS Ping Utility for Linux: Version 10.2.0.4.0 – Production on 21-MAR-2009 23:19:26

Copyright (c) 1997,  2007, Oracle.  All rights reserved.

Used parameter files:
/app/oracle/product/10.2.0/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.10.18)(PORT = 1522))) (CONNECT_DATA = (SERVICE_NAME = test10)))
OK (0 msec)

$ sqlplus system/qwertz@test10

SQL*Plus: Release 10.2.0.4.0 – Production on Sat Mar 21 23:19:43 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 – Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

Radi 🙂

Listener procesi na db serveru (imam ih dva – LISTENER_1 i LISTENER_2) :
$ ps -ef |grep tnslsnr
oracle     444     1  0 23:18 ?        00:00:00 /app/oracle/product/10.2.0/bin/tnslsnr LISTENER_2 -inherit
oracle     601 31512  0 23:20 pts/3    00:00:00 grep tnslsnr
oracle   31773     1  0 22:58 ?        00:00:00 /app/oracle/product/11.1.0/bin/tnslsnr LISTENER_1 -inherit


Kontinuirani i eksponencijalni rast baze: negativne nuspojave i posljedice

Monday, 16.03.2009 – Dejan

Svakim danom u svakom pogledu Oracle baza sve više raste. Jedan od velikih razloga za brigu svakog administratora Oracle baza podataka… “Zašto!?” – pitate se…
Paaaa… krenimo prvo sa malom retrospektivom:

2005. veličina naše glavne Oracle baze je iznosila oko 170 GB
2006. je porasla na 280 GB
2007. se veličina baze popela na 410 GB
2008. je premašila 650 GB
2009. trenutna veličina baze iznosi oko 970 GB i nezaustavljivo se bliži granici od 1 TB.

Činjenica je da veličina baze kontinuirano i eksponencijalno raste. Tokom vremena se pri povećanju baze dešavaju promjene, koje dovode do negativnih i neželjenih nuspojava, čije posljedice korisnici itekako osjete u svakodnevnom radu sa raznim aplikacijama.

Neke od tih karakterističnih promjena su:
– SQL upiti se izvršavaju sporije/duže
– backup baze traje duže
– export/import podataka traje duže
– nedostatak kapaciteta za skladištenje podataka
– prikupljanje statistika za CBO optimizer traje duže
itd.

Zbog tih nuspojava, koje dovode u pitanje normalno i pravovremeno ispunjavanje svih zadanih poslovnih procesa definisanih uslovima u sklopu SLA (“Service Level Agreement”) ugovora, svaki administrator Oracle baze podataka mora revidirati podešavanja i određene korake u administraciji dotične baze.

Mnoge od tih promjena uzrokuju i glavobolju menadžerima, kada vide koliko su troškovi za održavanje čitave baze eksplodirali. Npr. u 2009. godini je potrebno izdvojiti 5-6 puta više sredstava za smještajni kapacitet (SAN storage ili dodavanje novih hard diskova lokalno na serveru), nego što je bilo potrebno u 2005. godini. Često se mora dodati i još par procesora, a ukoliko se kupuje Oracle licenca po procesoru, onda tek zamislite zabrinuto i smrknuto lice vašeg direktora ili menadžera.

Uočljiva promjena je i ta, da backup baze traje duže nego ranije. Dok je u 2005. godini full backup bio gotov za manje od sat vremena, sada čitav proces traje oko 3-4 sata i to sa tendencijom rasta. Noću se izvršavaju razni automatski procesi (batch jobs), kojima je takođe potrebno sve više vremena za izvršavanje. Ako imate unaprijed definisan “maintenance window” za backup (npr. svake noći od 02 od 06 sati ujutro), bićete prinuđeni da provjerite da li je to vrijeme dovoljno za uspješno obavljanje te operacije, kako ne bi bilo ugroženo normalno dnevno poslovanje. Jedno od rješenja, koje se nameće u slučaju predugog backupa, je korištenje “block change tracking” tehnologije uz inkrementalni full backup na nivou 0 i inkrementalni backup na nivou 1.
Time se trajanje backup operacije svodi sa 3-4 sata na 10-15 minuta (iz dosadašnje prakse bih mogao reći da je za svaki GB promijenjenih blokova u bazi, potreban 1 minut za backup). Napomena: “block change tracking” tehnologija smanjuje peformanse baze za par procenata (max. 5% u slučaju velikog broja DML operacija – unos, obrada ili brisanje podataka).

Nema ništa frustrirajuće, nego kad vas korisnici cimaju sa pritužbama, kako im mnoge operacije oduzimaju mnogo više vremena, nego ranije. “Zašto generisanje ovog izvještaja traje 5 minuta, a ranije je bilo gotovo za minut-dva!?” ili “Hoću da eksportujem ove podatke u Excel, ali koči stalno…” – samo su par primjera iz kolekcije prigovora na usporeno izvršavanje SQL upita. Kako jednom ekonomisti ili knjigovođi objasniti, da sada SQL upiti pretražuje 5-6 puta više podataka nego ranije? Možda nekim laičkim analognim poređenjem? “Da biste došli do cilja, morali ste ranije pretrčati 100 metara. Da biste sada došli do cilja, morate pretrčati 500 m, za što vam treba više vremena i energije.

U zadnjim verzijama Oracle baze (prvenstveno počevši od verzije 9i) na izvršavanje svakog SQL upita glavni uticaj ima i CBO (Cost Based Optimizer), koji određuje način izvršavanja tog upita, a odluke o najbržem i “najjeftinijem” izvršavanju donosi na osnovu sakupljenih statistika svih objekata navedenih u upitu.
Te statistike se odnose na tabele (broj redova u tabeli, broj blokova i prosječna dužina svakog reda), kolone (broj različitih vrijednosti u koloni, histogrami), indekse (broj leaf blokova, nivoa i clustering faktor), kao i na sistem (I/O i CPU karakteristike).
Za sakupljanje tih statistika je zadužen automatski proces (Oracle scheduled job) pod nazivom GATHER_STATS_JOB, koji se standardno izvršava svake noći od 22:00 do 06:00, te vikendom. Nemate pojma, koliko sam ja muka imao sa ovim CBO-om i njegovim tumačenjem sakupljenih statistika, na osnovu kojih je dolazilo do sasvim pogrešnog izvršavanja nekog SQL upita, čime se vrijeme izvršavanja popelo sa par sekundi na par minuta… 

Osim što je CBO bugovit, sakupljanje statistika zahtjeva puno CPU i I/O resursa, a ukoliko imate ogromnu bazu, onda se za mnoge objekte neće pravovremeno stići sakupiti svježe statistike, što opet dovodi do pogrešnog CBO-ovog tumačenja najoptimalnijeg izvršavanja nekog SQL upita. Mi smo morali dodati još jedan automatski proces za eksplicitno sakupljanje važnih i često korištenih tabela u bazi, kako ne bismo morali čekati da GATHER_STATS_JOB obradi i te tabele.

U takvim situacijama je potrebno uložiti dodatni napor za optimizaciju svakog SQL upita, što automatski zahtjeva i više ljudskih resursa, tj. vrijeme jednog iskusnog senior programera ili DBA, a njihovo vrijeme skupo košta. Moja preporuka u svakom slučaju je da postoje dvojica Oracle DBA, a ukoliko imate zahtjevan biznis (npr. Telekom baza u pogonu 24/7), onda taj broj može (da ne kažem mora) biti i veći.

Kako god bilo, rast baze je neizbježan, tako da je revidiranje budžeta za tehničke i ljudske resurse neminovan. Moj savjet je da planirate na vrijeme sve troškove, koji nastaju porastom baze, a pogotovo da provjerite sve stavke ugovora iz SLA, kako ne biste plaćali penale ili snosili nekakve posljedice za pogoršanje poslovnih procesa.


Control file datoteka koruptirana – kako otvoriti bazu?

Thursday, 12.03.2009 – msutic

Pozdrav svima!

Prvo da se samo ukratko predstavim. Moje ime je Marko Šutić i radim kao Oracle DBA u jednoj telekomunikacijskoj tvrtci u Hrvatskoj. Prihvatio sam Dejanov poziv da se pridružim ekipi na blogu i sudjelujem sa vlastitim tekstovima Oracle tematike. Nadam se da će moji tekstovi biti zanimljivi i čitljivi, te da će nekome biti od koristi.
No dosta uvoda, pređimo mi na Oracle tematiku 🙂

DB administrator je osoba koja u tvrtci nosi vrlo veliku odgovornost na leđima. To je osoba koja se brine o podacima što je zapravo najveće blago neke tvrtke. Njegova primarna zadaća je da nikad ne izgubi niti jedan podatak (ukoliko je to moguće) kakva god da se havarija dogodila. Da bi to postigao mora biti vrlo izvježban i siguran kod kreiranja sigurnosnih kopija podataka i vraćanja tih podataka u slučaju nekakvog problema. Ali i kada nemate kvalitetnu sigurnosnu kopiju, nije uvijek sve izgubljeno (nada uvijek postoji :)).

U ovom ću postu pisati o tome kako podići/otvoriti bazu kada zbog raznih razloga ostanete bez vrlo bitne controlfile datoteke.

U virtualnoj mašini ću kreirati OracleXE bazu i na njoj napraviti mali demo test. XE je inače besplatna verzija Oracle baze koju najčešće koriste programeri za neke manje aplikacije. Vrlo je jednostavna za kreiranje i konfiguriranje, te ju najčešće programeri vole instalirati bez konzultacija sa db administratorom.

Kad već spominjem OracleXE bazu odmah ću spomenuti dvije stvari na koje trebate obratiti pozornost nakon “defaultne” instalacije:
1. Uobičajenom instalacijom će se kreirati samo jedna controlfile datoteka!
SAVJET: Bitno je da se controlfile datoteka multipleksira, tj. da se napravi još barem jedna kopija na nekoj drugoj lokaciji.

2. Redo Logovi nisu multipleksirani!
SAVJET: Oracle preporuča da se redo logovi multipleksiraju. Gubitak redo logova može biti katastrofalan ukoliko vam je potreban recovery baze.

Dejan je na vrlo razumljiv način opisao postupak instalacije: http://www.baze-podataka.net/2009/03/10/oracle-xe-kako-zapoceti-sa-oracle-om/

Kolegi se jednom dogodila situacija da mu se koruptirala controlfile datoteka i on više nije bio u stanju podići bazu, s obzirom da nije imao nikakvu kopiju te datoteke.
Kada je controlfile datoteka koruptirana ili ne postoji, baza podataka se neće mount-at s obzirom da se u toj datoteci (između ostalog) nalaze pokazivači na db datoteke.

No ipak postoji način da otvorite bazu čak i kada nemate controlfile datoteku ili je ona koruptirana.
Mali demo test:

Baza OracleXE (10.2.0.1.0) na WinXP OS-u.

Kako trenutno u bazi nemam nikakvih podataka, kreirati ću testnu tablicu sa jednim zapisom:

SQL> create table osoba (id number, ime varchar2(20));

Table created.

SQL> insert into osoba values (5, ‘Marko’);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from osoba;

ID IME
———- ——————–
5 Marko

SQL>

Koruptirati ću controlfile datoteku kako bi simulirao situaciju koja se dogodila kolegi.
Otvorit ću CONTROL.DBF u WordPadu i pobrisat neke zapise.

Sada ću pokušati startup baze:

SQL> startup
ORACLE instance started.

Total System Global Area  188743680 bytes
Fixed Size                  1286460 bytes
Variable Size              62918340 bytes
Database Buffers          121634816 bytes
Redo Buffers                2904064 bytes
ORA-00205: error in identifying control file, check alert log for more info

Kao što se vidi, podigla se instanca ali se nisu mount-ale datoteke zbog koruptirane controlfile datoteke.

–> Iz Alert Log-a
Wed Mar 11 10:38:38 2009
ALTER DATABASE   MOUNT
Wed Mar 11 10:38:38 2009
ORA-00202: control file: ‘C:ORACLEXEORADATAXECONTROL.DBF’

Wed Mar 11 10:38:38 2009
ORA-205 signalled during: ALTER DATABASE   MOUNT…

Kako nemamo kopiju controlfile datoteke morat ćemo ju kreirati ručno, a to radimo na ovaj način:

–> Kreirati ćemo skriptu c:ctlfile.sql sadržaja:

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE “XE” NORESETLOGS  NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ‘C:ORACLEXEAPPORACLEFLASH_RECOVERY_AREAXEONLINELOGO1_MF_1_4VH083H0_.LOG’  SIZE 50M,
GROUP 2 ‘C:ORACLEXEAPPORACLEFLASH_RECOVERY_AREAXEONLINELOGO1_MF_2_4VH0878O_.LOG’  SIZE 50M
DATAFILE
‘C:ORACLEXEORADATAXESYSTEM.DBF’,
‘C:ORACLEXEORADATAXEUNDO.DBF’,
‘C:ORACLEXEORADATAXESYSAUX.DBF’,
‘C:ORACLEXEORADATAXEUSERS.DBF’
CHARACTER SET AL32UTF8
;

Ovdje je bitno ispravno definirati pokazivače na db datoteke ovisno o njihovim nazivima i lokacijama.

I sad pokrećemo kreiranu skriptu:

SQL> @c:ctlfile.sql
ORACLE instance started.

Total System Global Area  188743680 bytes
Fixed Size                  1286460 bytes
Variable Size              62918340 bytes
Database Buffers          121634816 bytes
Redo Buffers                2904064 bytes

Control file created.

Controlfile datoteka je kreirana!

Ukoliko je baza bila spuštena na “normal” ili “immediate” način (ne abort) i ukoliko db datoteke nisu oštećene otvaranje baze bi trebalo proći:

SQL> alter database open;

Database altered.

SQL> select * from osoba;

ID IME
———- ——————–
5 Marko

I eto mog zapisa 🙂


Kako kreirati Oracle Designer Repository?

Wednesday, 11.03.2009 – Dejan

Oracle Designer je CASE razvojni alat i dolazi u sklopu Oracle Developer Suite.

Nakon što ste uspješno obavili dva prethodna koraka (instalacija Oracle XE baze i Developer Suite), možete nastaviti sa kreiranjem Repositorya za Oracle Designer.

Pročitaj kompletan tekst »


Oracle Developer Suite 10g (Designer, Repository, Forms & Reports Builder)

Tuesday, 10.03.2009 – Dejan

Nastavljamo sa serijom “Kako da …” 😉

Još jedno od pitanja, koja se konstantno ponavljaju po forumima, a i kod mene u mailboxu, je pitanje u obliku “Treba mi Oracle Designer za ispit na faksu – gdje da ga nabavim!? I kako da kreiram Repository!?” ili “Moram da uradim vježbe sa Forms i Reports Builder – kako da instaliram to čudo!?“.

Oracle Designer, Forms & Reports Builder su razvojne komponente, koje se nalaze u sklopu Oracle Developer Suite. Dakle, krenimo korak po korak – počevši od downloada, preko instalacije, pa do podešavanja i kreiranja repositorya.

Pročitaj kompletan tekst »


Oracle XE: kako započeti sa Oracle-om

Tuesday, 10.03.2009 – Dejan

Dobio sam već nekoliko E-Mail poruka sa pitanjima poput:”Odakle početi sa Oracleom?” ili “Gdje da skinem Oracle bazu i kako da ju instaliram?“, pa sam odlučio da mnogima skratim muke.

Iz tog razloga sam uzeo par sati slobodnog vremena, kako bih detaljno prema principu korak-po-korak objasnio odakle se može skinuti Oracle software i kako se instalira.

Pročitaj kompletan tekst »


Oracle SQL & PL/SQL: standard kodiranja (coding standards)

Tuesday, 10.03.2009 – Dejan

Naletih na jedan odličan tekst, koji prilično detaljno objašnjava najpraktičnije načine kodiranja u SQL i PL/SQL.

Link: Oracle SQL & PL/SQL coding standards

Ja sam muku mučio sa nekoliko Oracle programera, jer se nisu pridržavali firminog internog standarda pri kodiranju. Neki su lijeni da otkucaju nekoliko slova više, a jedan je čak namjerno pravio NEPREGLEDAN kôd (njegovo objašnjenje: samo takav stil programiranja njemu odgovara i ne može raditi drugačije). Pošto im ja nisam šef, nije moje da se s njima raspravljam oko toga, ali sam im dao do znanja jednu stvar – ako žele, da im ja pomognem pri optimizaciji nekog SQL upita ili pronađem grešku u kôdu, moraju mi predočiti standardizovan kôd, koji je “ČITLJIV” i jasno PREGLEDAN.

Od tada se broj onih, koji se NE pridržavaju internog standarda kodiranja, sveo samo na onog što namjerno piše nepregledan kôd, ali on ne dolazi po pomoć. 😀


Odaberite Oracle knjigu za recenziju

Monday, 09.03.2009 – Dejan

Danas su mi stigle tri knjige vezane za Oracle tematiku:

1. “Linux Recipes for Oracle DBAs“, Darl Kuhn, Charles Kim and Bernard Lopuz
2. “Advanced Oracle SQL Programming“, Laurent Schneider
3. “Troubleshooting Oracle Performance“, Christian Antognini


Ostavite komentar sa nazivom knjige, koju bih prvu trebao pročitati i napisati recenziju o njoj…


Recenzija knjige “Oracle 10g RAC: Grid, Services & Clustering”

Friday, 20.02.2009 – Dejan

Duži period nisam imao vremena za aktivno čitanje stručne literature, pa nije bilo ni recenzija. Nakon novogodišnjih i januarskih praznika, u hladnim ne-idem-nikud-van danima i noćima, odlučio sam dovršiti čitanje jedne jako kvalitetne knjige – “Oracle 10g RAC: Grid, Services & Clustering“.

Sa svojih ~650 stranica, ova knjiga pokriva mnoštvo tema namijenjenih ne samo iskusnim profesionalcima, nego i početnicima.

Npr. uvodno poglavlje o RAC (Real Application Cluster) arhitekturi sadrži jedno od najboljih objašnjenja svih komponenti i procesa, koji sačinjavaju RAC. Opširno su opisani Global Resource Directory, Cache Fusion, virtualne IP adrese i pozadinski procesi (LMS, LMON,LMD, LCK, DIAG i td.), a veoma detaljno je opisano funkcionisanje transakcija u RAC arhitekturi (poglavlje 2.10 “Multi-instance transaction behavior“). Knjigu se isplati kupiti samo zbog ovog objašnjenja!

Potom slijedi objašnjenje funkcionisanja ASM (Automatic Storage Management) u RAC okruženju, zatim instalacija i konfiguracija Oracle Clusterwarea. Svaki korak je detaljno opisan i u mnogim slučajevima potkrepljen screenshot-om, tako da se i početnici mogu snaći bez problema.

Dva veoma zanimljiva poglavlja, koja sam gutajući čitao, sadrže informacije o konfiguraciji servisa i raspodjeli resursa (Services and Distributed Workload Management & Failover and Load-balancing), pokrivenih primjerima kako treba podesiti servise i parametre u bazi, da bi se obezbijedilo neometano i rasterećeno funkcionisanje aplikacija. Iskreno –  ja sam tek čitajući ovo poglavlje shvatio, da load-balancing, kojeg smo mi konfigurisali kod nas, nije potpuno ispravan. Nije dovoljno samo u tnsnames.ora konfigurisati konektor (service name) sa parametrom LOAD_BALANCE=yes, nego treba i na nivou clusterware-a obaviti određene korake.

Nezaobilazno poglavlje knjige je svakako i backup Oracle baze u RAC okruženju. U suštini se ne razlikuje puno od backup-a kod single instance, ali svakako vrijedi pročitati i ovo poglavlje.

Ako smatrate da su vaše aplikacije spore i da troše puno resursa u bazi, onda će vas poglavlje “Performance Tuning” posebno zanimati. Možete pročitati o “Oracle Wait Interface” i pripadajućim “event“-ima (gc cr – current block 2-way/3-way, gc cr – current request, wait for master SCN i td.). Obavezno obratite pažnju na dio o sekvencama i indeksima u bazi (“Sequence and index contention“), jer su nama baš sekvence zadavale mnogo problema. Pisao sam već o tome, pa nađite u arhivi. 🙂

Pretposljednje poglavlje me je malkice namučilo. Kompletna MAA tematika( “Maximum Available Architecture“) je veoma kompleksna i ako pogriješite samo u jednom koraku prilikom konfiguracije, čitav sistem neće funkcionisati. Ovdje se baš radi o detaljima. Ja već imam iskustva sa instaliranjem i podešavanjem StandBy baze (Data Guard), ali sam opet našao dosta korisnih informacija. Jedna sitnica me zbunila… Naime, pri opisu Data Guard Brokera na stranici 483 piše slijedeće:
The instance name, DB_UNIQUE_NAME, and SERVICE_NAME are identical on both the primary and standby database.

Iz mog iskustva u radu sa StandBy bazom, nema šanse da DB_UNIQUE_NAME bude identičan na primarnoj i na StandBy bazi, jer samo DB_NAME mora biti identičan. Isto važi i za SERVICE_NAME. Ne znam da li je to štamparska greška ili se autor zeznuo, ali bih volio da mi to neko razjasni. Ukoliko neko zna konkretnije, neka i meni kaže, šta je od toga tačno.

U svakom slučaju, knjiga je zaslužila moju preporuku.

Ocjena: 9.7/10


Oracle DataPump, MetaData Backup & Source code backup (incl. DDL)

Wednesday, 07.01.2009 – Dejan

Sigurno ste već nekoliko puta bili u idućoj situaciji (a ako niste, onda ćete kad-tad biti 😉 ):

– razvijate neku aplikaciju na development serveru (nazovimo ga testdb), na kojem se za testnu bazu ne vrši backup
– database administrator svakih mjesec-dva mora bazu osvježiti, tako što obriše postojeću testnu/razvojnu bazu (testdb) i na njeno mjesto postavi aktuelnu kopiju production baze; svejedno je na koji način – da li kloniranjem, export/import metodom ili replikacijom.
– dođete idući dan na posao i shvatite da ste zaboravili sačuvati neki PL/SQL paket ili DDL izraz za kreiranje neke tabele, koji su izgubljeni brisanjem testne baze
– “Šta sad da radim!?” – prvo je pitanje…

Na svu sreću Pročitaj kompletan tekst »