-
UNIVERZA V MARIBORU FAKULTETA ZA ORGANIZACIJSKE VEDE
Diplomsko delo visokošolskega strokovnega študija
Smer: Informatika v organizaciji in managementu
PROJEKT NADGRADNJE BAZE PODATKOV ORACLE
Mentor: izr. prof. dr. Robert Leskovar Kandidat: Miran
Presečnik
Kranj, maj 2009
-
ZAHVALA Zahvaljujem se mentorju prof. dr. Robertu Leskovarju za
pomoč in svetovanje pri pisanju diplomske naloge. Za svetovanje se
zahvaljujem gospodu Gorazdu Vidmarju, analitiku v tehnični podpori
Oracle Slovenija. Zahvaljujem se tudi svoji družini za razumevanje
in podporo pri študiju.
-
NASLOV Projekt nadgradnje baze podatkov Oracle POVZETEK Naloga
obravnava projekt nadgradnje baze podatkov Oracle verzije 7 v
verzijo 8i. Podana je primerjava lastnosti obeh verzij baze.
Opisano je podjetje SPL d.d. ter naloge skrbnika sistema in
skrbnika baze podatkov. Projekt nadgradnje je bil zapleten zaradi
napak na nosilcu podatkov. Posledica tega je bila, da ni bilo
mogoče izvoziti vseh podatkov. Po uvozu podatkov v Oracle8i so bili
manjkajoči podatki obnovljeni s pomočjo programiranja. Nameščeni so
bili potrebni popravki na strani strežnika in odjemalca. Projekt
nadgradnje je omogočil povezljivost z novejšimi orodji, prehod na
grafični uporabniški vmesnik in zagotovil večjo varnost poslovnih
podatkov. KLJUČNE BESEDE
• nadgradnja • informacijska tehnologija • okvarjeni podatkovni
bloki • SUBP • Oracle
-
TITLE The upgrade project of Oracle database ABSTRACT This
diploma thesis describes the development project in which Oracle
database version 7 is upgraded to version 8i. These two versions
are compared according to major functions. The company SPL d.d., in
which the project took place is briefly described as well as the
system administrator's and database administrator's tasks. The
upgrade project was complex due to lost data in corrupted blocks –
the consequence was incomplete export of database. After import of
valid data in Oracle 8i the missing one were restored through
programming procedures. Critical patches were installed on server
and client sides. The upgrade project enabled the compatibility
with up-to-date database tools, the usage of graphical user
interface and assured better security of business data.
KEYWORDS
• upgrade • informational technology • corrupted data blocks •
DBMS • Oracle
-
KAZALO 1
Uvod.....................................................................................................................
1 2 Metodologija dela
.............................................................................................
4
2.1 Definicija
problema...................................................................................
4 2.2 Definicija ciljev
...........................................................................................
6 2.3 Predvidene metode dela in uporabljena
orodja................................. 7
3 Predstavitev
okolja.............................................................................................
8
3.1 Zgodovina in dejavnost podjetja SPL d.d.
............................................. 8 3.2 Sektor
informatike....................................................................................
10
4 Primerjava lastnosti Oracle7 in Oracle8i
....................................................... 11
4.1 Opis obstoječega
sistema......................................................................
11 4.2 Nove funkcije Oracle8 in
Oracle8i........................................................
12
5 Projekt nadgradnje produkcijske baze
Oracle............................................ 15
5.1 Planiranje
nadgradnje............................................................................
15 5.2
Priprave.....................................................................................................
16
5.2.1 Dela potrebna na baznem
strežniku.................................................... 16
5.2.2 Dela potrebna na strežniku za
odjemalce.......................................... 16 5.2.3
Priprava in analiza baze podatkov
...................................................... 17 5.2.4
Priprava operacijskega
sistema............................................................
17
5.3. Nadgradnja (ponesrečen poizkus)
............................................................ 21
5.3.1
Težave.......................................................................................................
21 5.3.2 Sanacija
težav.........................................................................................
29
5.4.
Nadgradnja...................................................................................................
31 5.4.1 Postopek namestitve Oracle8i na OpenVMS operacijski
sistem...... 31 5.4.2 Postopki po nadgradnji
strežnika..........................................................
35 5.4.3 Predpriprava za import - kreiranje objektov
....................................... 39 5.4.4 Prenos (import)
podatkov......................................................................
40 5.4.5 Kreiranje indeksov na tabelah
.............................................................. 41
5.4.6 Odpravljanje zadnjih
težav....................................................................
41 5.4.7 Nadgradnja strežnika za
odjemalce....................................................
43
6
Zaključek............................................................................................................
45 7 Viri in literatura
..................................................................................................
46
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 1
1 Uvod
Sistem za upravljanje baz podatkov (SUBP) oz. Database
Management System (DBMS) je programska oprema za upravljanje baze
podatkov. SUBP lahko upravlja različne modele baz podatkov kot so
hierarhični, mrežni, relacijski in objektni. Najpogosteje se danes
uporablja relacijski model. Glavne funkcije SUBP so organizacija,
shranjevanje, upravljanje in zagotavljanje podatkov. Zahteve
aplikacij za dostop do podatkov se do baze podatkov prenašajo preko
SUBP. Zasnova in kreiranje baze podatkov je delo skrbnika baze
podatkov (DBA) in sistemskega administratorja. Večina produkcijskih
SUBP teče na strežnikih, ki so namenjeni le delovanju SUBP in s tem
povezane programske opreme. Ti strežniki so večinoma
večprocesorski, z veliko sistemskega pomnilnika in zmogljivimi RAID
(Redundand Array of Inexpesive Disks) diskovnimi podsistemi, ki
zagotavljajo hitre dostope do podatkov in veliko zanesljivost
delovanja. Relacijski podatkovni model sestoji iz množice tabel.
Vsaka tabela je sestavljena iz čelne vrstice (relacijska shema) in
podatkovnih vrstic (relacija). Vsaka relacija oz. tabela v
relacijski bazi mora ustrezati določenim pravilom, da jo lahko
imenujemo relacija:
• vrstni red vrstic v tabeli je nepomemben • vrstice se morajo
razlikovati med seboj v vrednosti vsaj enega atributa
(ne smeta obstajati enaki vrstici) • vsaka vrstica tabele ima
lahko le eno vrednost za vsak atribut
Osnovna koncepta relacijskega podatkovnega modela sta domena in
relacija. Relacija je definirana nad množico domen. Domene so
množice, njihovi elementi pa so vrednosti, predstavljive v obliki
podatkov. Vir: Mohorič Tomaž, Podatkovne baze, (1990).
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 2
Matematično je relacija podmnožica kartezijskega produkta
množice domen in to skoraj natančno ustreza definiciji tabele
(Slika 1).
nDDDR ×××⊆ ...
21
Maja 23 Peter 16
Slika 1: Relacija kot kartezijski produkt dveh domen (Ime X
Starost)
Največja prednost relacijskega modela je, da podpira
strukturiran povpraševalni jezik SQL (Structured Query Language),
ki ima veliko izrazno moč. Leta 1970 je E.F.Codd, angleški
znanstvenik, takrat zaposlen v firmi IBM, s člankom "A Relational
Model of Data for Large Shared Data Banks" postavil temelje za
razvoj SQL standarda. Prvo verzijo SQL je razvila firma IBM v letu
1970, imenoval se je SEQUEL. Namenjen je bil lastnemu produktu
System R. Ta produkt je bil osnova za Oracle RDBMS, danes eno
najuspešnih relacijskih SUBP. Standard SQL je formalno objavil ANSI
inštitut (American National Standards Institute) leta 1986. Od
tedaj so nastale naslednje verzije (Tabela 1): leto standard
komentar 1986 SQL-86 prva objava (ANSI) 1989 SQL-89 manjši popravki
1992 SQL-92 (SQL2) pomembna revizija 1999 SQL:1999 (SQL3) uvedba
rekurzivnih poizvedb, prožilci, podpora
proceduralnim izrazom.. 2003 SQL:2003 uvedba XML, ekranske
funkcije, auto-generirani stolpci.. 2006 SQL:2006 določen način
kako naj SQL deluje z XML, XQuery, .. 2008 SQL:2008 uvedba instead
of trigerjev, dodan truncate ukaz,..
Tabela 1: verzije SQL standarda (Vir:
http://en.wikipedia.org/wiki/SQL)
Maja 23 Maja 16 Peter 23 Peter 16
⊆
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 3
Glavni predstavniki relacijske tehnologije v svetu so danes
Oracle, IBM, Microsoft, Sybase, Teradata in ostali.
proizvajalci SUBP
tržni delež v letu 2006
Oracle 47,1% IBM 21,1%
Microsoft 17,4% Ostali 14,4%
Tabela 2: tržni delež največjih proizvajalcev relacisjkih baz v
letu 2006
Vir: Gartner Dataquest (2007)
Iz tabele 2 je razvidno, da ima korporacija Oracle skoraj
polovico tržnega deleža med proizvajalci relacijskih baz. Prva
verzija Oracle SUBP je nastala leta 1979, ostale pa so sledile v
letih do današnje verzije 11g, ki je iz leta 2007. Baza Oracle7 je
prišla na trg leta 1992, Oracle8i pa leta 1999. Obe bazi sta precej
zastareli, predvsem pa Oracle7 ne omogoča povezljivosti z višjimi
verzijami.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 4
2 Metodologija dela 2.1 Definicija problema Vodstvo podjetja SPL
d.d. je zahtevalo rešitve, ki bi omogočale povezovanje z zunanjimi
partnerji in zunanjimi izvajalci, ki so uporabljali novejše
tehnologije. Uvajal se je projekt za spremljanje dokumentov z
orodjem za procesno modeliranje, ki za svoje delovanje potrebuje
Oracle bazo verzije vsaj 9i. Ekipa ITja je vedno težje zagotavljala
zahtevano varnosti podatkov. Vseh teh zahtev ni bilo več mogoče
izpolnjevati z obstoječo bazo Oracle7, ki smo jo uporabljali v
produkcijskem sistemu. Težave prehoda na grafično okolje V planu je
bil prehod na grafično okolje, vendar je tak prehod zelo
kompleksen. Predvsem bi povzročala težave menjava znakovnega nabora
(character set) v bazi in pa usklajevanje znakovnih naborov med
strežnikom in odjemalci. Standardi za kodiranje SLO znakov (Vir:
Rožman Sergej, Abakus plus, 2005): - JUS I.B1.002 – ISO 646–YU
(sinonimi: SLOSCII, YU ASCII, YUSCII) - IBM CP852 (sinonimi: DOS
852, Latin 2) - MS–CP1250 (sinonimi: windows 1250, MS latin II) -
ISO 8859–2 (ISO 8859–16 / ISO latin 10 ?) (sinonimi: ISO latin 2) -
UNICODE – ISO 10646 (različice: UTF–8, UCS–2, UTF–16, ...)
Oracle v Sloveniji uporablja naslednje standarde: - YUG7ASCII
JUS I.B1.002 - EE8PC852 IBM CP852 - EE8MSWIN1250 MS1250 -
EE8ISO8859P2 ISO 8859-2 - UTF8, AL32UTF8, AL16UTF16 UNICODE -
EBCDIC variante
Baza podatkov v SPL d.d. je kreirana v EE8ISO8859P2 (ISO 8859-2)
naboru, vendar so podatki v bazi zapisani v starem, US7ASCII
načinu. To pomeni, da v bazi ni pravih šumnikov, ampak se le-ti
prikazujejo na odjemalcu s pomočjo posebnega fonta, ki znake
^~[{@` prikazuje kot Č芚Žž.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 5
Pomanjkljivosti take nastavitve so:
• podpora le za en nabor (ni pretvarjanj) • podpora le za
določene odjemalce • razvrščanje (sortiranje) ne deluje
pravilno
Oracle priporoča uporabo UNICODE nabora znakov, UTF-8 za Evropo
(Tabela 3)
UTF-16 (fiksna dolžina) UTF-8 (variabilna dolžina)
ASCII znaki 8 bitni običajni znaki 16 bitni evropski znaki 16
bitni posebni znaki 32 bitni posebni znaki 32 bitni
Tabela 3: UNICODE (Vir: http://utf8.com, http://unicode.org)
Nekaj pomislekov proti uporabi UTF-8 nabora znakov:
• uporaba UTL_FILE paketa (package), ki se uporablja za branje
in pisanje datotek na strežniku (potrebne bi bile aplikativne
predelave)
• uporaba starih verzij odjemalca, starejših od 6i • podatki
zasedejo več prostora • obdelave zahtevajo več procesiranja
Za uskladitev nastavitev odjemalca in strežnika Oracle uporablja
spremenljivko NLS_LANG, ki je sestavljena: NLS_LANG = _.
V MS Windows, se spremenljivka nastavi v sistemskem registru
(slika 2):
Slika 2: Nastavitev spremenljivke NLS_LANG v sistemskem registru
MS Windows XP Pro
v OpenVMS kot logično ime:
$ define NLS_LANG "SLOVENIAN_SLOVENIA.EE8ISO8859P2",
v Linuxu pa s spremenljivko (environment variable):
# export NLS_LANG=slovenian_slovenia.ee8iso8859p2
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 6
V okolju Oracle znakovne pretvorbe potekajo sprotno na
transportni poti (OracleNet), običajno na strani odjemalca, včasih
pa na strani strežnika - od Oracle8i dalje. (Vir: Oracle Metalink
note 158577.1, 2003). Do pretvorb znakov ne prihaja, kadar je na
odjemalcu in na strežniku (v bazi podatkov) uporabljen enak nabor
znakov, sicer pa se pretvorba izvede na predstavitvenem sloju ISO
OSI modela (Slika 3).
Slika 3: ISO OSI Model - potek pretvorbe znakov (Vir: Rožman
Sergej, Abakus plus, 2005)
Težava nastane, ker imajo različni odjemalci različne standarde.
Pretvorba znakovnega nabora YUG7ASCII v MSWIN1250 ali celo v UTF-8
bi zahtevala menjavo vseh starejših tiskalnikov, ki ne podpirajo
teh znakovnih naborov. Na začetku bi bilo potrebno vzdrževati oba
sistema hkrati, kar bi povzročilo dodatne težave. 2.2 Definicija
ciljev Za cilj smo si zadali nadgraditi obstoječo bazo podatkov
Oracle7, da bi omogočala:
• povezljivost z drugimi, novejšimi viri podatkov • povezljivost
z novejšimi orodji • prehod na grafični odjemalec (iz znakovnega) •
več funkcionalnosti in optimizacijo • hkratni dostop do podatkov z
obema odjemalcema • stabilnost delovanja in večjo varnost
podatkov
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 7
Realizacija teh ciljev bi omogočala podjetju SPL d.d. nemoteno
poslovanje, povezovanje z zunanjimi partnerji in izvajalci ter
razvoj z novejšimi, grafičnimi orodji. 2.3 Predvidene metode dela
in uporabljena orodja Za namen nadgradnje baze podatkov Oracle so
bile predvidene naslednje metode dela :
• študij potrebne literature o obeh verzijah baz z namenom
dobrega poznavanja značilnosti obeh verzij
• analiza podatkovne baze z vidika osnovnih objektov kot so
tabele, indeksi, rollback segmenti, njihovih lastnosti kot so
velikost, razdrobljenosti (fragmentacija) in njihovih povezav
• projektni management potreben za učinkovito delo skupine,
porazdelitev nalog, koordinacijo in sinhronizacijo
• sistemski inženiring za obvladovanje poslovnih in tehničnih
zahtev ter tveganj pri prehodu na višjo verzijo
pri tem so bila uporabljena naslednja orodja:
• orodja, ki so del Oracle SUBP sistema: - SQL*Plus
strukturirani poizvedovalni jezik - PL/SQL proceduralni jezik in
lastne pomožne ukazne datoteke - Oracle DBA studio za pregled in
kontrolo objektov - UTLBSTAT/UTLESTAT (Oracle7) in STATSPACK
(Oracle8i) - za analizo baze med delovanjem, - za ugotavljanje I/O
obremenjenosti posameznih tablespace, datafile in s tem neposredno
zasedenost posameznih diskov, - ugotavljanje časovno kritičnih
dogodkov na bazi - iskanje queryjev, ki najbolj obremenjujejo vire
(resource)
• orodja operacijskega sistema OpenVMS: - $ "monitor" SYSTEM,
IO, CPU, MEMORY za ugotavljanje obremenjenosti sistema in
zasedenosti sistemskih virov - $ "analyze" RMS za preverjanje
parametrov datotečnega sistema
• ostala orodja: - Quest TOAD for Oracle, orodje za razvoj in
administracijo baze
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 8
3 Predstavitev okolja 3.1 Zgodovina in dejavnost podjetja SPL
d.d. Družba SPL Ljubljana d.d., poslovanje z nepremičninami in
inženiring ima svoje korenine v letu 1965, ko sta bili ustanovljeni
podjetji DOM in FOND kot organizaciji posebnega družbenega pomena.
Obe podjetji sta se združili v organizacijo STANINVEST, ki je
zaposlovala več kot 1000 ljudi, ki so opravljali storitve za
celotno področje stanovanjske dejavnosti: upravljanje stanovanjskih
stavb, poslovnih stavb, stanovanjsko-poslovnih stavb, dejavnost
obratovanja stanovanjskih in poslovnih stavb, projektiranje in
izgradnja stanovanj ter vsa zaključna dela v gradbeništvu. Med leti
1978-1984 se je podjetje STANINVEST reorganiziralo. Del temeljnih
dejavnosti se je preoblikovalo v samostojna podjetja. Leta 1984 je
Stanovanjsko podjetje Ljubljana, ki je predhodnik družbe SPL d.d.,
ohranilo dejavnost upravljanja, vzdrževanja ter zaključnih del v
gradbeništvu. V letu 1996 se je Stanovanjsko podjetje Ljubljana
preoblikovalo v delniško družbo SPL Ljubljana d.d., poslovanje z
nepremičninami in inženiring. V istem letu je družba pridobila
certifikat kakovosti ISO 9001 za področje upravljanja nepremičnin,
leta 2004 pa še ISO 9001:2000, ki predstavlja certifikat za celotno
poslovanje z nepremičninami ter kodeks dobrih poslovnih običajev.
Posebna pozornost je bila usmerjena v raziskave in razvoj na
področju informacijske tehnologije za potrebe celotnega poslovanja
družbe. V letu 2005 se je dejavnost podjetja razširila z odprtjem
novih poslovnih enot v Domžalah in Kočevju. Spletna stran
www.spl.si je bila prenovljena in nadgrajena z novimi vsebinami,
uveden pa je bil tudi spletni portal www.mojupravnik.si in klicni
center, kar je pripomoglo k izboljšanju komunikacije s strankami.
Danes ima podjetje SPL d.d. preko 130 zaposlenih, ki svoje delo
opravljajo s pomočjo osebnih računalnikov v povezavi z večjimi
strežniškimi sistemi. Osnovni strežniški sistem je Windows 2003
Server, ki teče na več strežnikih, povezanih v aktivni imenik
(Active Directory). Razvit ima lasten informacijski sistem, ki
temelji na bazi podatkov Oracle. Glavne storitve družbe SPL d.d.
so:
• upravljanje nepremičnin • vzdrževanje nepremičnin • čiščenje
in urejanje skupnih prostorov, okolice • vpis v zemljiško knjigo •
posredovanje nepremičnin - pri prometu z nepremičninami •
upravljanje rezervnega sklada
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 9
Na sliki 4 je prikazan organigram družbe SPL d.d.
Slika 4: Organigram SPL d.d. (Vir: SPL d.d., 2009)
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 10
3.2 Sektor informatike V sektorju informatike je zaposlenih 8
delavcev. Med najpomembnejšimi sta skrbnik sistema in skrbnik baze
podatkov. Glavne naloge skrbnika sistema so:
• ocenjevanje primernosti uvajanja novih tehnologij in nove
programske
opreme • skrb za nemoteno in optimalno delovanje aplikacijskih
in baznih
strežnikov • namestitve programske opreme • dodeljevanje pravic
uporabnikom in upravljanje z računi
(identifikacija, avtentikacija, avtorizacija) • ocena
primernosti nakupov posamezne strojne opreme • določanje varnostne
politike skupaj z vodstvom
Glavne naloge skrbnika baze podatkov so: (Viri: Thomas B. Cox:
Oracle DBA Checklist, The Strategic DBA, 2000)
o Dnevne naloge:
• preverja delovanje vseh baznih instanc • ugotavlja obstoj
morebitnih novih zapisov v alert-log datotekah • preverja uspešnost
shranjevanja podatkov (backup, export) • preverja uspešnost
arhiviranja podatkov na tračno enoto • preverja razpoložljive vire
(resources) za nemoteno delovanje
o Tedenske naloge:
• preverja objekte, ki niso kreirani v skladu s politiko
kreiranja
objektov • ugotavlja kršitve varnostne politike • preverja
morebitne napake v SQL*Net log datotekah
o Mesečne naloge:
• ugotavlja prekomerno rast posameznih objektov (tabel,
indeksov) • ugotavlja možnosti izboljšanja nastavitev delovanja
(tuning
opportunities) • preverja aktivnost baznih datotek (I/O
contention) • preverja razdrobljenost (fragmentacijo) objektov •
ugotavlja možnosti za nastanek ozkih grl (CPU, memory, network
contention) • izvaja uglaševanje in vzdrževanje
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 11
4 Primerjava lastnosti Oracle7 in Oracle8i 4.1 Opis obstoječega
sistema Bazni strežnik V času izvajanja nadgradnje je produkcijska
baza Oracle7 tekla na dvo-procesorskem strežniku HP AlphaServer
ES40, s 6GB sistemskega pomnilnika (RAM), na operacijskem sistemu
OpenVMS verzije 7.2-1H3. Diskovni podsistem je sestavljalo diskovno
polje RAID Compaq HSZ70, s 24 SCSI diski konfigurirani v RAID 1+0,
mirror stripe postavitvi in 128 MB hitrega cache predpomnilnika.
Krmilnik deluje v multibus-failover (dual redundand) postavitvi. S
tako postavitvijo smo dosegli, da imajo tako diski kot tudi
krmilnik (controller) vzpostavljeno zrcaljenje in bi v primeru
okvare ene komponente delo nemoteno opravljala druga. Odjemalec Do
baze podatkov uporabniki dostopajo preko strežnika odjemalcev,
AlphaServer AS1000 z operacijskim sistemom OpenVMS 6.2-1H3, na
znakovni (character-based) način, s pomočjo Oracle orodij Sql*Menu,
Sql*Forms in SQL*Reports. Za terminalsko emulacijo se uporablja
program Reflection terminal emulation za OpenVMS firme Attachmate
in se izvaja na osebnem računalniku posameznega uporabnika. Program
dostopa do strežnika preko telnet protokola. Zavedamo se, da telnet
ni dovolj varen protokol, vendar Pathworks 6.0D (TCP/IP Services
for OpenVMS) ne podpira varnejšega protokola SSH. Poleg tega pa je
protokol telnet uporabljen le v lokalnem omrežju (LAN), za točno
določen namen. RDBMS Pred nadgradnjo je na baznem strežniku
delovala baza Oracle Server RDBMS 7.3.4. To je zadnja pod-verzija
verzije 7. Baza je delovala zelo stabilno, zanesljivo in
zadovoljivo glede zmogljivosti. V tabeli 4 so prikazane glavne
omejitve Oracle7 v premerjavi z Oracle8i.
postavka vrsta omejitve omejitev Oracle7 omejitev Oracle8i
database files per database 1022 65533
database file size maximum 16 mil. oracle blocks limited by max
O/S size MAXEXTENTS parameter
maximum
derived from DB_BLOCK_SIZE param
O/S dependent
derived from DB_BLOCK_SIZE param
unlimited columns max per table 254 1000 columns max per index
16 32 CHAR maximum 255 characters 2000 bytes
VARCHAR2 maximum 2000 characters 4000 bytes users and roles
maximum 65525 2.147.483.638 (~2M)
Tabela 4: Glavne omejitve baze Oracle7 v primerjavi z
Oracle8i.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 12
4.2 Nove funkcije Oracle8 in Oracle8i Z verzijama baze Oracle8
in Oracle8i je Oracle uvedel precej novosti in izboljšal delovanje
obstoječih funkcij. Novosti je veliko, zato bomo omenili le
nekatere: o Integrated Distributed Lock Manager (IDLM)
V bazi Oracle8 je eksterni Distributed Lock Manager, ki je v
Oracle7 deloval na nivoju O/S, zamenjal Integrated Distributed Lock
Manager, ki zagotavlja izboljšane mehanizme zaklepanja na nivoju
baze. IDLM s pridom uporablja Oracle Parallel Server.
o JAVA v bazi
Java kot standardni jezik interneta je opcijsko vključena v
bazo. Java v Oracle8i vsebuje:
• Oracle JServer - java virtual machine • Oracle JServer
Accelerator - native compiler za hitrejše
delovanje • Programmatic interfaces - JDBC gonilniki in SQLJ •
razvojna orodja, kot ločeni produkti
o NET8 (Slika 5)
NET8 je Oracle mehanizem za povezavo z mrežnimi komunikacijskimi
protokoli. Namenjen je predvsem povezavi Oracle strežnika z
odjemalskimi programi na drugih računalnikih. NET8 je izboljšana
verzija SQL*Neta in omogoča podporo:
• API (Application Programming Interface) • internetnim
brskalnikom z vgrajeno Javo • mrežnim servisom (network services)
kot sta naming and
security
Slika 5: Net8 - povezava odjemalec-strežnik (Vir: Oracle8i,
Administrator's Guide, 2000)
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 13
o Localy Managed Tablespace do verzije Oracle8i je bil lahko
"tablespace" upravljan le preko repozitorija (dictionary managed).
To pomeni, da Oracle upravlja "tablespace" z uporabo "data
dictionary". Uvedba Localy Managed Tablespace pa pomeni, da Oracle
posamezen "tablespace" upravlja lokalno. Namesto, da bi se podatki
o podaljških (extent) v posameznem "tablespace" zbirali enotno v
sistemskem "tablespace" (dictionary managed), se ti podatki zbirajo
lokalno - vsak "localy managerd tablespace" ima svojo bitno mapo
(bitmap), v kateri hrani podatke o podaljških. Prednosti takega
upravljanja podatkovnih področij so:
• hitrejše zasedanje in sproščanje (allocate, deallocate)
prostora • povečana zmogljivost delovanja • ta funkcija omogoča
kreiranje standby (read only) baze • zasedanje (alokacija) prostora
je poenostavljena (omogoča autoallocate space) • funkcija
združevanja (coalesce) prostih podaljškov postane nepotrebna
o Transportable Tablespace
možnost prenosa posameznega "tablespace" med različnimi
bazami
o Indexed organized table (IOT)
Index organized table je Oracle podatkovna struktura, ki omogoča
izbolšano zmogljivost in nadgradljivost. Dejanski podatki v
"indexed organized" tabeli so shranjeni v B-tree indeks strukturi,
razvrščeni po primarnem ključu tabele tako, da pisanje, ažuriranje
in brisanje vrstic zahteva le ažuriranje indeksa.
o Temporary table
omogočeno je kreiranje začasnih tabel, ki se s prenehanjem
transakcije same pobrišejo
o Particionirane tabele in indeksi (Partitioned Tables in
Indexes)
Uvedba particioniranih tabel in indeksov veliko pripomore k
obvladovanju velikih objektov. Kreiranje particije na tebeli
pomeni, da lahko npr. z orodjem SQL dostopamo do posameznega dela
tabele (particije) ne da bi pri tem brali vso tabelo.
Particioniranje je posebno uporabno v podatkovnih skladiščih (data
warehouse), kjer se obdeluje velike količine časovno urejenih
podatkov.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 14
o Drop column on table omogočeno brisanje ene ali več posameznih
stolpcev tabele
o Podpora za SQL3 standard (SQL:1999)
o NLS Euro symbol - v bazi 8i je podprt Euro simbol
o Standby database (Slika 6)
še ena velika novost v verziji 8i. Standby baza je kopija
primarne baze z namenom, da zagotovi disaster-recovery (ponovna
vzpostavitev primarne baze v primeru uničenja baze)
Slika 6: Postavitev standby baze (Vir: Oracle8i, Technical
report, 1999)
o STATSPACK
STATSPACK je zelo močno orodje za zbiranje sistemske statistike
in kreiranje poročil o delovanju baze. Nadomešča zastarelo orodje
UTLBSTAT/UTLESTAT iz Oracle7.
Poleg tega je Oracle8i prinesel še veliko drugih izboljšav:
• izboljšave pri Backup in Recovery (Tablespace point in time
recovery, incremental backups)
• izboljšane splošne zmogljivosti baze • izboljšana varnost na
nivoju uporabnikov (user security) • SQL, PL/SQL : večja
učinkovitost uporabe procesorja, pomnilnika
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 15
5 Projekt nadgradnje produkcijske baze Oracle 5.1 Planiranje
nadgradnje Glede na to, da je bil plan dela relativno nezahteven,
smo ga definirali kar v preglednici (Slika 7). Poleg samih
planiranih aktivnosti in datumov, smo definirali še zadolžene za
posamezno akcijo.
Slika 7: Plan dela za nadgradnjo baze Oracle7 na Oracle8i
Da bi čim manj motili delovni proces smo se odločili, da
izvedemo nadgradnjo v dela prostih dneh.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 16
5.2 Priprave 5.2.1 Dela potrebna na baznem strežniku 1.
preveriti/poiskati morebitne potrebne popravke (patch) za
operacijski sistem OpenVMS 2. preveriti/poiskati morebitne potrebne
popravke za bazo Oracle 8i 3. pripraviti proceduro za morebitno
obnovitev (restore) diskov na katerih so bazne datoteke 4.
varnostna kopija baze podatkov pri ustavljeni bazi (cold backup) -
2x 5. export baze podatkov - 2x 6. analiza parametrov stare baze -
določitev optimalnega DB Block size - velikost SGA, buffer cache,
log-buffer, log-filesize - dictionary / localy managed system
tablespace - ime nove baze/instance - prevajanje neveljavnih
objektov (compile invalid objects) - analiza števila objektov po
shemah 7. namestitev nove baze - verzija 8.1 8. namestitev končnih
popravkov na novi bazi - verzija 8.1.7.4 9. prenos (import)
podatkov v novo bazo 10. vzpostavitev mrežnih povezav v bazi -
networking 5.2.2 Dela potrebna na strežniku za odjemalce Pred
nadgradnjo baze:
1. izvoz (unload) aplikacij iz SQL*Menu 2. izvoz (unload)
poročil (reports) iz SQL*Report
Po nadgradnji baze:
1. kreiranje SQL*Menu okolja 2. uvoz aplikacij v SQL*Menu 3.
namestitev popravka za SQL*Forms 4. kreiranje SQL*Reports okolja 5.
uvoz poročil v SQL*Reports 6. testiranje delovanja aplikacij,
poročil, izpisov,..
Ko smo analizirali potreben čas za te akcije smo ugotovili, da
verjetno ne bo dovolj časa v enem koncu tedna - velikost eksporta
baze podatkov je bila približno 100GB. Zato smo se odločili, da
prvi konec tedna pripravimo operacijski sistem in okolje na baznem
strežniku, naslednji konec tedna pa začnemo z nadgradnjo.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 17
Dela smo planirali tako, da naj bi bilo kadarkoli možno obnoviti
prvotno stanje, če bi se karkoli zalomilo. Plan smo pregledali in
ocenili vsi sodelujoči pri projektu. 5.2.3 Priprava in analiza baze
podatkov Potrebno je bilo pregledati in shraniti nastavitve
parametrov baze, npr.:
• DB_BLOCK_SIZE - velikost bloka • DB_BLOCK_BUFFERS - število
blokov (delovni pomnilnik baze) • SHARED_POOL_SIZE - velikost
shared pool (Oracle library cache) • SORT_AREA_SIZE - velikost
področja za razvrščanje (sort) • ROLLBACK_SEGMENTS - rollback
segmenti • CONTROL_FILES - kontrolne datoteke
Izdelati je bilo potrebno razne ukazne datoteke za:
• kreiranje baznih objektov • export, import podatkov •
kreiranje tablespace, datafile • kreiranje glavne sheme, ki je
lastnik vseh objektov aplikacije • kreiranje uporabnikov,
privilegijev
Preveriti in zabeležiti je bilo potrebno čase za posamezne
akcije, ki so bile planirane, da je bilo možno čimbolj natančno
časovno planirati. 5.2.4 Priprava operacijskega sistema Standalone
backup sistemskega diska Na sistemskem disku so nenehno odprte
(zasedene) datoteke zaradi delovanja operacijskega sistema, zato
tega diska med delovanjem ni možno odklopiti (offline) in s tem
zagotoviti konsistenten backup. Potrebno je zagnati strežnik (boot)
iz ne-sistemskega diska, ki ima nameščen minimalni "boot software"
ali iz namestitvenega OpenVMS CDROMa.
1. iz alternativnega diska za ta postopek je potrebno predhodno
namestiti na ta disk minimalni "boot-kit". To storimo z zagonom
sistemske procedure (uporabnik za zagon potrebuje sistemske
privilegije): $ @sys$system:axpvms$pcsi_install_min DKC100:
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 18
V tem primeru se bo na disku DKC100 namestila dodatna imeniška
struktura in programi, ki bodo omogočali kasnejše nalaganje sistema
iz tega diska: >>> BOOT -flag E,0 DKC100 dvig strežnika iz
alternativnega
diska (DKC100)
Dvig strežnika v tem načinu ne omogoča interaktivnega dela,
prijavo drugih uporabnikov, ampak le kontrolo nad sistemom.
Potrebno je paziti pri ukazih, ker je prijava na strežnik brez
identifikacije z vsemi privilegiji. Po uspešnem dvigu sistema s
tega diska dobimo na konzolni enoti strežnika ukazno kazalko
(prompt) $$$ in lahko izvedemo varnostno kopijo (backup)
sistemskega diska, ki je sedaj v vlogi navadnega diska. Disk in
tračno enoto je potrebno najprej priključiti (mount), tako kot vse
druge enote: $$$ mount DKB0: priključitev diska $$$ mount/for
MKD300: priključitev tračne enote
in zatem lahko poženemo "standalone backup" sistemskega diska na
tračno enoto: $$$ back/image/rewind DKB0: MKD300:.sav/save
2. iz namestitvenega CDROMa postopek zagona strežnika iz CDROMa
je podoben zagonu z alternativnega diska, le da tu za vhodno enoto
navedemo CD enoto: >>> BOOT -flag E,0 DKA500 dvig
strežnika z CD enote Po dvigu sistema se na konzolni enoti izpiše
več možnosti: 1) Upgrade, install or reconfigure OpenVMS Alpha
version 6.2-1H2 2) Display products and patches that this procedure
can install 3) …. .... 7) Execute DCL commands and procedures 8)
Shut down this system
Tu se odločimo za možnost 7, ker bomo izvajali DCL (Digital
Command Language) ukaze: $$$ back/image/rewind DKB0:
MKD300:.sav/save
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 19
Po uspešni izvedbi ukaza backup, je potrebo še izključiti
(dismount) sistemski disk in tračno enoto: $$$ dismount DKB0: $$$
dismount MKD300:
in ponovno zagnati (reboot) strežnik z ukazom: $$$
@sys$system:shutdown (izklop strežnika zagnanega iz diska)
ali z ukazom: $$$ logout (vrnirev v menu)
ki nas vrne v izbirni menu, kjer izberemo možnost: 8) Shut down
this system
(izklop strežnika zagnanega iz CDROMa)
Namestitev popravkov (patch) za OpenVMS Po planu smo začeli z
nameščanjem popravkov za OpenVMS na baznem strežniku, potrebnih za
nadgradnjo baze - Patches (ECOs) Required for Oracle RDBMS. Pred
tem je bilo potrebno narediti varnostno kopijo sistemskega diska
(standalone backup) na tračno enoto - SDLT. Vsi popravki se
nameščajo na sistemski disk in v primeru neuspelega nameščanja
operacisjki sistem ne bi deloval. Na Oracle MetaLinku (Oracle baza
znanja - sistem 24x7 tehnične podpore) smo našli potrebne popravke
za kombinacijo verzije operacijskega sistema in verzije baze Oracle
8i ter jih prenesli na bazni strežnik. Potrebno je bilo namestiti
naslednje skupine popravkov: VMS721_SYS-V1200 TCPIPALP_E03A50
VMS721_LIBRTL-V0400 VMS_RMS-V0500 VMS721_ACRTL-0400
Vsaka taka skupina vsebuje več dejanskih popravkov, ki jih je
potrebno namestiti.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 20
Na primer skupina VMS721_SYS-V1200 vsebuje naslednje popravke:
DEC-AXPVMS-VMS721_PCSI-V0100--4 DEC-AXPVMS-VMS721_UPDATE-V0300--4
DEC-AXPVMS-VMS721_LAN-V0300--4 DEC-AXPVMS-VMS721_AUDSRV-V0200--4
DEC-AXPVMS-VMS721_CLIUTL-V0300--4
DEC-AXPVMS-VMS721_MOUNT96-V0300--4 DEC-AXPVMS-VMS721_SYS-V1200--4
DEC-AXPVMS-VMS721_FIBRE_SCSI-V0600--4
DEC-AXPVMS-VMS721_LAN-V0300--4 DEC-AXPVMS-VMS721_MOUNT96-V0300--4
DEC-AXPVMS-VMS721_AUDSRV-V0200--4 DEC-AXPVMS-VMS721_CLIUTL-V0300--4
DEC-AXPVMS-VMS721_SYSLOA-V0200--4
Popravke na OpenVMS smo namestil s "POLYCENTER Software
Installation utility". Potrebno je razpakirati (self extract) vsako
skupino popravkov tako, da se razpakira vsak popravek na svoj
pod-imenik. Namestitev se zažene iz ukazne vrstice z ukazom: $
product install * (znak * namesto imena popravka) In za prvi
popravek iz skupine VMS721_SYS-V1200 je postopek: $ product install
* The following product has been selected: DEC AXPVMS VMS721_PCSI
V1.0 Patch (maintenance update) Do you want to continue? [YES]
Configuration phase starting ... You will be asked to choose
options, if any, for each selected product and for any products
that may be installed to satisfy software dependency requirements.
DEC AXPVMS VMS721_PCSI V1.0: OpenVMS V7.2-1 PCSI V1.0 * This
product does not have any configuration options. Execution phase
starting ... The following product will be installed to
destination: DEC AXPVMS VMS721_PCSI V1.0 DISK$OPENVMS:[VMS$COMMON.]
Portion done: 0%...10%...30%...50%...90%...100% The following
product has been installed: DEC AXPVMS VMS721_PCSI V1.0 Patch
(maintenance update) DEC AXPVMS VMS721_PCSI V1.0: OpenVMS V7.2-1
PCSI V1.0 VMS721_PCSI-V0100 Release notes available
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 21
Release notes for the VMS721_PCSI V1.0 kit are available in the
SYS$HELP: directory.
Installing this patch kit requires a reboot. Compaq strongly
recommends that you reboot your system immediately after
installation of this kit. The images in this kit will not fully
take effect until the system is rebooted.
Ta postopek je treba ponoviti za vsak popravek posebej, kar je
precej zamudno še posebej, ker nekateri popravki zahtevajo ponovni
zagon sistema pred namestitvijo naslednjega popravka. Potrebno je
biti pozoren na morebitna obvestila o napakah ali neuspelih
namestitvah. Iz petih skupin je bilo potrebno namestiti 17
popravkov in kar nekajkrat ponovno zagnati sistem. Postopek
nameščanja popravkov je potekal 6 ur. 5.3. Nadgradnja (ponesrečen
poizkus) 5.3.1 Težave Naslednji konec tedna smo začeli z nadgradnjo
baze Oracle7. Že na začetku smo naleteli na težavo - zataknilo se
je pri zaustavitvi baze. Pri ukazu: SQL> shutdown immediate
je baza "obvisela" iz neznanega razloga. Kasnejša analiza je
pokazala, da bi to lahko bila to posledica neskladja novih
popravkov operacijskega sistema s staro verzijo baze, možen pa je
bil tudi kakšen drug razlog. Za zaustavitev je bil potreben ukaz:
SQL> shutdown abort
Potem smo pognali export baze na trak. Naslednje jutro smo, po
pregledovanju log datotek ugotovil, da ni šlo vse kot bi moralo. V
log datoteki smo našli zapise: EXP-00008: ORACLE error 1578
encountered ORA-01578: ORACLE data block corrupted (file # 39,
block # 683857) ORA-01110: data file 39:
'DISK$DATA04:[ORACLE.SPLPROD]SPLDATA17.DBS' . . exporting table
PROTI_POSTAVKE_DOBAVITELJI 1338349 rows exported . . exporting
table PROTI_POSTAVKE_KUPCI EXP-00014: error on row 4813826 of table
PROTI_POSTAVKE_KUPCI EXP-00008: ORACLE error 1578 encountered
ORA-01578: ORACLE data block corrupted (file # 39, block # 647753)
ORA-01110: data file 39:
'DISK$DATA04:[ORACLE.SPLPROD]SPLDATA17.DBS' . . exporting table
PROTI_POSTAVKE_TERJATVE EXP-00014: error on row 45001634 of table
PROTI_POSTAVKE_TERJATVE .....
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 22
Za test smo poskusili prešteti zapise v eni od okvarjenih tabel:
SQL> select count(*) from proti_knjizbe_kupci; ERROR: ORA-01578:
ORACLE data block corrupted (file # 39, block # 683857) ORA-01110:
data file 39: 'DISK$DATA04:[ORACLE.SPLPROD]SPLDATA17.DBS'
Ugotovili smo, da je bilo 7 tabel, ki so imele okvarjene
(corrupted) bloke. Da je bil položaj še slabši, so te tabele med
največjimi v bazi. Shutdown database Oracle bazo lahko ustavimo
(shutdown) na več načinov:
1) SQL> shutdown
to je navaden, privzeti način ustavljanja baze. Tak način
ustavljanja se v resnici le malokrat uporablja, ker v tem primeru
Oracle počaka na vse uporabnike, da končajo z delom na bazi in
potem prepiše vse spremenjene podatke iz pomnilnika na diske. Taka
zaustavitev je znana kot "clean shutdown". Večinoma taka
zaustavitev niti ni izvedljiva, ker se je lahko na primer nek
uporabnik pozabil odjaviti iz baze in bi tako morali čakati, da se
vrne.
2) SQL> shutdown immediate
se uporablja najpogosteje. Ta ukaz prepreči vse nadaljnje
prijave v bazo, izvede rollback vseh nepotrjenih (uncommitted)
transakcij in šele nato izvede zaustavitev. V procesu zaustavljanja
bo Oracle prav tako prepisal vse spremenjene podatke iz pomnilnika
na diske.
3) SQL> shutdown abort
če se zgodi, da ukaz shutdown immediate ne zaustavi baze, je
treba uporabiti ukaz shutdown abort, ki je zelo "trd" način
ustavljanja baze (database hard crash). V tem primeru Oracle
zaustavi svoje procese (background processes), odstrani deljene
pomnilniške segmente (shared memory segments) in zaustavi Oracle
instanco. Nepotrjene transakcije ostanejo nedotaknjene v redolog
datotekah četudi podatki, ki so bili spremenjeni v teh transakcijah
še niso bili zapisani na diske. Ob ponovnem zagonu baze se izvede
obnovitveni postopek (instance recovery) in se transakcije
zaključijo s pomočjo podatkov v redolog datotekah. Oracle ne
svetuje zaustavljanja baze na način shutdown abort v produkcijskem
okolju.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 23
Logična struktura baze Tablespace (podatkovno področje)
Baza je razdeljena na logične enote imenovane tablespace, ki
združujejo med sabo povezane logične strukture, objekte. Večinoma
so v takem podatkovnem področju združeni objekti, ki nastanejo v
sklopu ene aplikacije, zaradi lažjega upravljanja. Vsaka baza je
logično razdeljena v enega ali več podatkovnih področij.
Data blocks (podatkovni bloki)
Na najnižjem nivoju Oracle shranjuje podatke v podatkovne bloke.
Velikost enega podatkovnega bloka je določeno število bajtov
(bytes) fizičnega prostora na disku in je definirana z
inicializacijskim parametrom db_block_size.
Zgradba podatkovnega bloka (Slika 8)
Slika 8: Zgradba podatkovnega bloka (Vir: Oracle Database
Concepts, 2002)
Zgradba podatkovnega bloka je podobna, ne glede na vrsto bloka
(data, index,..): Header
vsebuje splošne informacije o bloku, kot na primer naslov (block
address) in vrsto bloka.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 24
Table Directory vsebuje informacije o tabeli, ki ji pripadajo
vrstice (raws) v tem podatkovnem bloku
Row Directory
vsebuje informacije o dejanskih vrsticah v bloku - naslovi
vrstic v podatkovnem področju vrstic (raw data area)
Free Space
dodeljen prostor za vstavljanje novih vrstic ali ažuriranje
vrstic, ki potrebujejo dodaten prostor
Raw Data
vsebuje podatke (data ali index)
Extent (Podaljšek), (Slika 9)
Extent je določeno število strnjenih (contiguous) podatkovnih
blokov, ki nastane pri enem dodeljevanju (allocate), novega
prostora za podatke.
Slika 9: Database Blocks, Extents, Segments (Vir: Oracle
Database Concepts, 2002)
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 25
Segment Segment je množica podaljškov (extent) združenih v
določeno logično strukturo. V Oracle bazi obstajajo naslednje vrste
segmentov:
• Data - za podatke shranjene v tabelah • Index - za
shranjevanje indeksnih podaljškov • Temporary - segmenti za začasne
potrebe baze
(npr. v primeru sortiranja podatkov) • Rollback - za
zagotavljanje konsistence branja podatkov,
za razveljavljanje (rollback) nepotrjenih (uncommited)
transakcij in za obnovitev baze v primeru nepravilne
zaustavitve.
Okvarjeni bloki (Corrupted Blocks) Okvarjeni podatkovni blok je
blok, katerega zgradbo Oracle ne prepozna kot lastno ali katerega
vsebina ni konsistentna na nivoju notranje strukture. Največkrat
pride do okvare bloka zaradi okvare strojne opreme ali zaradi napak
operacijskega sistema. Oracle SUBP identificira okvaro kot:
• logična okvara - logically (software) corrupt • okvara medija
- media corrupt
V primeru logične okvare bloka, Oracle označi ta blok kot
"corrupt block", na nivoju baze pa se zabeleži kot interna napaka
(internal error). V primeru okvare medija zgradba bloka ni več
pravilna, informacija prebrana iz takega bloka pa je nesmiselna.
Zaznava in odprava okvarjenih blokov Oracle SUBP ima več orodij za
zaznavo in odpravo okvarjenih blokov (Tabela 5).
orodje zazna vrsto okvare
odpravi okvaro
DBVERIFY fizično NE ANALYZE logično NE DB_BLOCK_CHECKING logično
NE DB_BLOCK_CHECSUM fizično NE exp fizično NE DBMS_REPAIR logično
DA block media recovery nobene DA
Tabela 5: orodja za zaznavo in odpravo okvarjenih blokov (Vir:
Oracle, 2006)
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 26
DBVERIFY DBVERIFY je zunanje orodje (external command-line
utility), ki preveri fizično integriteto podatkovne strukture
baznih datotek, ko baza deluje (online) in kadar je ustavljena
(offline). Na OpenVMS operacijskem sistemu deluje le v offline
načinu. Orodje je zelo uporabno tudi za preverjanje integritete
backup datotek pred morebitno obnovitvijo (restore). Na OpenVMS
operacijskem sistemu poženemo DBVERIFY: $ dbv
file=dev:[directory]db_file_name.dbf blocksize=4096
Če ne vemo kolikšna je velikosti bloka, lahko le-to preverimo:
SQL> show parameter db_block_size; NAME TYPE VALUE
------------------------------------ ------- ----------------
db_block_size integer 4096
Orodje DBVERIFY ima tudi nekaj omejitev:
• ne zazna problemov neujemanja med podatki in indeksi. To lahko
zaznamo z ukazom ANALYZE TABLE
• ne preverja redo log in control datotek • preverja le blok
posamezno in ne kot del obstoječega objekta
Ukaz ANALYZE Ukaz ANALYZE se uporablja za preverjanje strukture
tabel, tabelnih razdelkov (particij) in indeksov ter indeksnih
razdelkov. Za preverjanje objekta je potrebno, da je objekt v
lokalni shemi ali pa je potrebno imeti dodatni privilegij - ANALYZE
ANY privilege. Možnost CASCADE pri ukazu ANALYZE preverja objekt in
vse, z njim povezane, objekte. Ukaz ANALYZE se požene iz SQL*Plus
orodja: SQL> analyze table validate structure cascade;
Obstoj okvarjenih blokov v baznem objektu je načeloma možno
ugotavljati z vsakim orodjem, ki omogoča "full table scan" tega
objekta - npr. s SQL*Plus orodjem: SQL> select * from ;
ali z eksportom objekta (exp utility): $ exp un/pw table=
file=
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 27
DB_BLOCK_CHECKING (preverjanje v realnem času) Z nastavitvijo
inicializacijskega parametra DB_BLOCK_CHECKING na vrednost TRUE
dosežemo, da Oracle preverja konsistenco vseh blokov pred branjem
in tako lahko prepreči potencialno okvaro podatkovnih struktur. Ta
postopek preverjanja blokov povzroči v povprečju od 1% do 10%
dodatne obremenitve, odvisno od celotne obremenitve sistema
(workload). V primeru, da je dodatna obremenitev sprejemljiva iz
vidika celotne zmogljivosti sistema, se priporoča, da je vrednost
parametra nastavljena na TRUE (privzeta vrednost je FALSE).
DB_BLOCK_CHECKSUM (preverjanje v realnem času) Oracle omogoča še
dodaten mehanizem za preprečevanje okvare podatkovnih blokov. V
primeru, da je vrednost inicializacijskega parametra
DB_BLOCK_CHECKSUM nastavljena na TRUE, Oracle DBWn proces (Database
Writer Process) izračuna kontrolno vsoto (checksum) in jo zapiše v
cache header vsakega bloka, preden ga zapiše na disk. Kontrolna
vsota se izračuna na podlagi vseh bajtov shranjenih v bloku. Pri
kasnejšem branju tega bloka se ponovno izračuna kontrolna vsota in
se primerja s kontrolno vsoto, ki je zapisana v bloku. S
preverjanjem kontrolne vsote lahko Oracle zazna okvarjene bloke, ki
nastanejo na diskih ali diskovnih podsistemih, kar prinese le 1% do
2% dodatne obremenitve sistema. Zaradi varnosti podatkov in majhne
dodatne obremenitve sistema, Oracle priporoča nastavitev parametra
DB_BLOCK_CHECKSUM na vrednost TRUE. EXP Orodje za eksport EXP zazna
okvarjene bloke in zapiše podatke o okvarjenem bloku v log
datoteko. Na primer:
ORA-01578: ORACLE data block corrupted (file # 39, block #
683857) ORA-01110: data file 39:
'DISK$DATA04:[ORACLE.SPLPROD]SPLDATA17.DBS'
DBMS_REPAIR paket (package) DBMS_REPAIR PL/SQL paket je eden od
paketov, ki so del Oracle SUBP. Ta paket se lahko uporabi za
zaznavo okvarjenega bloka ali odpravo okvare bloka. Paket vsebuje
več procedur, odvisno od verzije Oracle SUBP. Za zaznavo okvarjenih
blokov lahko uporabimo CHECK_OBJECT proceduro. Najprej je potrebno
kreirati "repair" tabelo, kamor Oracle zapiše podatke o okvarjenih
blokih:
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 28
BEGIN DBMS_REPAIR.ADMIN_TABLES ( table_name =>
'REPAIR_TABLE', table_type => DBMS_REPAIR.REPAIR_TABLE, action
=> DBMS_REPAIR.CREATE_ACTION, tablespace => 'USERS');
END;
nato preverimo okvarjene bloke v objektu IME_TABELE : DECLARE
stev_okvarjenih_blokov INT; BEGIN stev_okvarjenih_blokov:=0;
DBMS_REPAIR.CHECK_OBJECT ( schema_name => '', object_name =>
'', repair_table_name => 'REPAIR_TABLE', corrupt_count =>
stev_okvarjenih_blokov); END;
Podatki o okvarjenih blokih v tabeli IME_TABELE in napotki za
odpravo okvare se zapišejo v tabelo "REPAIR_TABLE". Procedura
FIX_CORRUPT_BLOCKS omogoča odpravo okvarjenih blokov, kolikor je
mogoče v sklopu paketa DBMS_REPAIR, za ostale okvare pa se uporabi
procedura SKIP_CORRUPT_BLOCKS, ki omogoča uporabo objekta kljub
okvarjenim blokom. Velikokrat ni možno odpraviti okvare bloka, zato
je potrebno zagotoviti obnovo okvarjenega bloka. Če smo ugotovili
napako na primer: ORA-01578: ORACLE data block corrupted (file #
37, block # 10)
je potrebno najprej poiskati objekt, ki vsebuje ta okvarjen
blok: SQL> SELECT segment_name, segment_type, relative_fno FROM
dba_extents WHERE file_id = 37 AND 10 BETWEEN block_id AND block_id
+ blocks - 1; SEGMENT_NAME SEGMENT_TYPE RELATIVE_FNO
------------------ ------------- ------------ TERJATVE TABLE 37
Ko ugotovimo ime objekta in vrsto objekta (v tem primeru
"TERJATVE" in "TABLE"), je treba določiti najprimernejši način
obnove. V primeru baze Oracle8i in višje, lahko to tabelo označimo
za corrupted: SQL> execute
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('','');
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 29
in jo prepišemo v novo tabelo, na primer: SQL> create table
NOVE_TERJATVE as select * from TERJATVE;
V starejših verzijah od 8i to ne deluje in je potrebno na nivoju
seje (session) napisati ukaz: SQL> alter session set events
'10231 TRACE NAME CONTEXT FOREVER, LEVEL 10';
nato pa lahko prepišemo okvarjeno tabelo. Export te tabele pa še
vedno ne bi uspel, ker ukaz alter session velja le za trenutno
sejo. Export okvarjene tabele pa bi lahko izvedli v primeru, da bi
ta event nastavili na nivoju instance. V datoteko INIT.ORA bi
morali vpisati: event = "10231 trace name context forever, level
10"
in ponovno dvigniti bazo. Manjkajoče vrstice tabele lahko
povrnemo s pomočjo arhiva (export) ali pa jih, če je to mogoče,
ponovno kreiramo s pomočjo poznavanja aplikacije. V primeru
okvarjenega bloka v indeksu, je tak indeks najbolje ponovno
kreirati. 5.3.2 Sanacija težav O situaciji so bili seznanjeni vsi
sodelavci iz ITja in za nasvet smo prosili analitika v tehnični
podpori Oracle Slovenija. Po daljši analizi nastalega položaja smo
ocenili, da z nadgradnjo baze tokrat ne bo nič in da bo potrebno
veliko znanja in sreče, da bomo do ponedeljka spravili bazo v
stanje pred poskusom nadgradnje. Kar nekaj ur smo potrebovali, da
smo izdelali potreben scenarij za reševanje problema. Ugotovili
smo, da v obstoječi bazi ne bo možno obnoviti vsebine pokvarjenih
blokov. Ideja je bila, da bi prepisali vsebino tabel brez
okvarjenih blokov. S pomočjo nasvetov analitika iz Oracle Slovenija
smo uspeli postaviti bazo v način delovanja, ko je možno pri branju
cele tabele (full table scan - npr. export) preskočiti okvarjene
bloke. V datoteko INIT.ORA, v kateri so shranjeni začetni parametri
za zagon baze, smo vpisali: event="10231 trace name context
forever, level 10"
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 30
To pomeni, da bo baza pri ponovnem zagonu, pri branju celotne
tabele, preskočila okvarjene bloke (skip software and media
corrupted blocks when performing full table scans). Na ta način smo
lahko izvedli export okvarjenih tabel na trak: $ exp un/pw -
buffer=131072 - recordlength=8192 - file=mkc400:CORR_060225.DMP -
compress=N - statistics=NONE -
tables=(PROTI_KNJIZBE_KUPCI,PROTI_POSTAVKE_KUPCI,
PROTI_POSTAVKE_TERJATVE,SALDAKONTI_KUPCI,SALDAKONTI_KUPCI_LOG,
STROSEK_ODJ_MESTO,TERJATEV_ODJ_MESTO)
Zatem smo pobrisali okvarjene tabele iz baze: $ sqlplus un/pw -
SQL> drop table PROTI_KNJIZBE_KUPCI; SQL> drop table ...
Po brisanju tabel pa je sledil prenos (import) teh tabel iz
traku nazaj v bazo: $ imp un/pw - buffer=131072 -
file=mkc400:CORR_060225.DMP -
tables=(PROTI_POSTAVKE_KUPCI,PROTI_POSTAVKE_TERJATVE,
SALDAKONTI_KUPCI,SALDAKONTI_KUPCI_LOG,
STROSEK_ODJ_MESTO,TERJATEV_ODJ_MESTO) -
ignore=Y - indexes=N - commit=Y
Tako smo dobili v bazi tabele, ki niso imele več okvarjenih
blokov, vendar je ostal problem kako obnoviti manjkajoče bloke.
Ugotovili smo, da obstaja v ostalih baznih tabelah dovolj podatkov,
da bo programerski del ekipe ITja lahko kreiral manjkajoče vrstice
tabel s pomočjo poznavanja vsebine poslovanja. To jim je z veliko
truda uspelo kasneje, v naslednjih dneh. Ker ni bilo možno
preveriti take količine podatkov v času, ki je bil na razpolago,
smo imeli prvi delovni dan bazo odprto le za vpogled.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 31
5.4. Nadgradnja
Da se ne bi težave pri naslednjem poizkusu nadgradnje ponovile
smo naredili sledeče:
• vzpostavili smo stanje operacijskega sistema na stanje pred
namestitvijo popravkov (obnovitev sistemskega diska - restore
stand-alone backup sistema iz traku):
$$$ back/image/rewind MKD300:.sav/save DKB0:
• po nasvetu analitika iz Oracle Slovenija smo uvedli dodatni
varnostni mehanizem - v datoteko INIT.ORA smo dodatno vpisali:
db_block_checking = TRUE db_block_checksum = TRUE
S tem smo zagotovili dodatno preverjanje vseh baznih blokov.
Zaradi uvedbe teh parametrov baza sicer deluje nekoliko počasneje,
vendar izguba hitrosti ni velika v primerjavi z večjo varnostjo
delovanja. Konec naslednjega tedna smo ponovno začeli z nadgradnjo
baze. Tokrat smo, da bi se izognili težavam, namenili celotnemu
postopku en dan več in zraven vključili tudi nadgradnjo
operacijskega sistema strežnika. Plan nadgradnje je bil enak kot
pri prvem poizkusu. 5.4.1 Postopek namestitve Oracle8i na OpenVMS
operacijski sistem Tokrat je postopek stekel brez težav. Po
namestitvi popravkov na OpenVMS, varnostni kopiji sistema, exportu
in varnostni kopiji baze, smo začeli z namestitvijo baze. Na
nobenem strežniku ni bil nameščen grafični vmesnik za OpenVMS
(X-Windows), zato smo namestili novo verzijo Oracle RDBMS kar preko
znakovnega "character-based" vmesnika - verzija 8i je zadnja, pri
kateri je taka namestitev še možna.
• najprej smo kreirali ORA_ROOT imenik in začasni imenik na
nekem drugem disku
• na začasni imenik smo skopirali datoteke - save_sets (OpenVMS
backup struktura) iz namestitvenih CD medijev
• razpakirali smo "začetni" save_set - BOOT.BCK:
$ BACK/LOG disk$arhiv:[temp]BOOT.BCK/save - _$
ORA_ROOT:[000000]/by_owner=parent
• zatem smo pognali OpenVMS proceduro ORACLEINS na
ORA_ROOTDIR:
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 32
Software Installation and Upgrade Menu
______________________________________ 1. Select Licensed Products
to Load 2. Select Build Configuration Options 3. Load and Build
Selected Licensed Products 4. Build Selected Licensed Products
Warning: You may not be licensed for all products listed Enter a
number or (E)XIT to return to the Main Menu: 1
tu smo izbrali komponente, ki jih bomo namestil: Select Licensed
Products to Load for Installation or Upgrade
____________________________________________________________
Product Name Status Product Name Status 1. APACHE 14. OWM 2. CTX
15. PQOPT 3. DBJAVA - load 16. PROGINT - load 4. DDBOPT - load 17.
PSOPT 5. DPOPT 18. RDBMS - load 6. JAVAVM - load 19. SDOPT 7.
NETCONFIG - load 20. SQLJ - load 8. NLS - load 21. SQLPLUS - load
9. OBJOPT - load 22. SVRMGR - load 10. OEMAGENT - load 23. UTIL -
load 11. ORDIM 12. ORDTS 13. ORDVIR Enter (A)LL to select all
products. Enter (E)XIT to exit this menu with selected products.
Enter (Q)UIT to quit this menu with no action. Enter the number of
the product that you want to load:
Pri tem meniju označimo vse tiste produkte, ki jih želimo
namestiti.
Nato se vrnemo v prejšnji meni in izberemo opcijo:
3. Load and Build Selected Licensed Products ..
Ko se load procedura konča, se razpakirajo še ostali save_seti.
%BACKUP-S-CREATED, created ORA_ROOT:[UTIL]TLEMUS.MSB;1
%BACKUP-S-CREATED, created ORA_ROOT:[UTIL]UTIL.CTL;1
%BACKUP-S-CREATED, created ORA_ROOT:[UTIL]UTIL.DEF;1
%BACKUP-S-CREATED, created ORA_ROOT:[UTIL]UTILUSER.COM;1 12
products have been successfully loaded. The products you requested
have been loaded. You have the following options: 1. Build the
Oracle products loaded. 2. Return to the Software Installation and
Upgrade Menu (to choose new configuration values or to load
additional products from another tape or directory). Enter the
number of the option you want [2]:
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 33
Vrnemo se v osnovni meni: 11 products have been successfully
loaded. The products you requested have been loaded. You have the
following options: 1. Build the Oracle products loaded. 2. Return
to the Software Installation and Upgrade Menu (to choose new
configuration values or to load additional products from another
tape or directory). Enter the number of the option you want [2]: 2
Software Installation and Upgrade Menu
______________________________________ 1. Select Licensed Products
to Load 2. Select Build Configuration Options 3. Load and Build
Selected Licensed Products 4. Build Selected Licensed Products
Warning: You may not be licensed for all products listed Enter a
number or (E)XIT to return to the Main Menu: 2
potem smo izbrali možnost 18 (RDBMS) in popravili privzete
vrednosti za particioniranje in Javo: 7. Include Data Partitioning
option? [Y/N] Y 9. Include Java Aurora external option? [Y/N] Y
Zatem zgradimo (build) licencirane produkte: Software
Installation and Upgrade Menu
______________________________________ 1. Select Licensed Products
to Load 2. Select Build Configuration Options 3. Load and Build
Selected Licensed Products 4. Build Selected Licensed Products
Warning: You may not be licensed for all products listed Enter a
number or (E)XIT to return to the Main Menu: 4 - Creating list of
products to (re)build. - Running ORA_NETCONFIG_BLD.COM. - Creating
ORA_NETCONFIG:NTCONTAB.MAR (32-bit version) - Creating
ORA_NETCONFIG:NTCONTAB.MAR (64-bit version) - Creating NAUTAB
(32-bit version) - Creating NAUTAB (64-bit version) - Linking
BEQLSNR.EXE - Linking LSNRCTL.EXE - Linking TNSLSNR.EXE - Linking
TNSLSNR_64.EXE ....
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 34
- Running ORA_RDBMS_BLD.COM. - Linking shared ORACLE client
image - 64 bit - Building ORACLE Server with the following
configuration parameters RDBMS image : ORACLE Root directory :
DISK$ORACLE:[ORACLE] Parallel Server option : N Distributed
database option : N Context option : N Object option : Y Spatial
Data option : N Accessible by : SYSTEM Data Partitioning option : Y
Java Aurora external option : N -- Ta možnost mora imeti vrednost
Y, -- da se v bazi namesti JAVA - Linking ORACLE Server - (oracle)
- Moving demo files to ORA_RDBMS_DEMO directory. - Moving admin
files to ORA_RDBMS_ADMIN directory. - Moving java files to
ORA_RDBMS_JLIB directory. - Linking MIG.EXE - Linking EXP.EXE -
Linking IMP.EXE - Linking SQLLDR.EXE - Linking RMAN.EXE - Linking
SBTTEST.EXE ... 11 products have been successfully built.
v tem delu smo definirali še ostale parametre, pomembne za
namestitev: RDBMSDB Configuration Options Option Current Value 1.
System or Group Installation? [S/G] S 2. Root directory for
database administration ORA_ROOT:[000000] directory (ORA_DB)? 3.
Initial database file for SYSTEM Tablespace?
DISK$ORACLE:[ORACLE.PROD]SYST.. 4. Initial size of SYSTEM
Tablespace? 1000M 5. Log File 1? DISK$ORACLE:[ORACLE.PROD]LOGM.. 6.
Log File 1 Size? 100M 7. Log File 2?
DISK$ORACLE:[ORACLE.PROD]LOGM.. 8. Log File 2 Size? 100M 9. Control
File 1 Name? DISK$ORACLE:[ORACLE.PROD]CONT.. 10. Control File 2
Name? DISK$OPENVMS:[ORACLE.PROD]CON.. 11. Value for MAXDATAFILES
(1..999999999)? 512 12. Value for MAXLOGFILES (2..254)? 32 13.
Value for MAXINSTANCES (1..63)? 16 14. Value for MAXLOGMEMBERS
(1..5)? 4 15. Value for MAXLOGHISTORY (0..5000)? 1600 16. Value for
CHARACTER SET? EE8ISO8859P2 *ISO 8859-2 oz.Latin-2 Enter (A)LL to
select all options. Enter (E)XIT to exit this menu with selected
options. Enter (Q)UIT to quit this menu with no action. Enter the
number of the option that you want to change: E Continuing will
initialize your database. Do you want to continue (Y/N)? [Y]
Preden se potrdi ta korak je nujno, iz druge seje, popraviti
nekaj parametrov v inicializacjski datoteki init.ora, ki se jih
kasneje ne da popravit - recimo DB_BLOCK_SIZE, ki določa velikost
baznega bloka - npr. na 8KB (privzeta vrednost je 2KB)
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 35
Now creating the initial data file, control files, and log files
of your database... Database startup/create in progress - please
wait... Now running catalog - please wait... Creating a database
can take a significant amount of elapsed time. You can monitor the
progress by checking the size of the log file. Due to options
chosen, the log file may be over 26000 blocks in size. Looking for
fatal errors in log file: %SEARCH-I-NOMATCHES, no strings
matched
Zadnje sporočilo pomeni, da pri namestitvi ni bilo napak. 5.4.2
Postopki po nadgradnji strežnika Ko se namestitev konča, Java v
bazi še ni nameščena, zato je potrebno pognati namestitveno
proceduro INITJVM na imeniku ora_root:[javavm.install], iz Oracle
sheme SYS ali SYSTEM. Pred tem je potrebno preveriti, če je dovolj
prostora v sistemskem prostoru (system tablespace). Namestitev Jave
potrebuje vsaj 85MB prostora v bazi. Če ni vsaj 100MB prostega
prostora v sistemskem prostoru, ga je treba povečati. Velikost
prostega prostora preverimo: SQL> select sum(bytes)/1024/1024
"Prosto (MB)" from dba_free_space where tablespace_name = 'SYSTEM';
Prosto (MB) ----------- 216,8125
Število javanskih objektov v bazi preverimo s poizvedbo: SQL>
select count(*) from dba_objects where object_type like '%JAVA%';
COUNT(*) ---------- 6784
Po preverjanju števila javanskih objektov je potrebno še:
• preveriti in popraviti mrežne nastavitve. Oracle teče na
strežniku kot odjemalec-strežnik (client-server) aplikacija in je
dostop do baze vedno v načinu odjemalec-strežnik, tudi če do baze
dostopamo kar na strežniku, kjer je nameščena baza.
• nastaviti je potrebno datoteko TNSNAMES.ORA. Ta omogoča, da se
definirajo servisi baze podatkov:
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 36
SPLPROD = # net service name .. (DESCRIPTION = (ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (Host = 193.193.193.10) (Port = 1526) )
(ADDRESS = (PROTOCOL = TCP) (Host = 193.193.193.10) (Port = 1521) )
) (CONNECT_DATA = (SID = PROD) ) ) SPLPROD = # net service name ..
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (Host =
193.193.193.10) (Port = 1521) ....
• potrebno je zagotoviti, da Oracle mrežni protokol SQL*NET
teče
pravilno Pripravljena konfiguracijska datoteka SQLNET.ORA:
automatic_ipc = OFF trace_level_client = OFF
trace_directory_client = disk$oracle:[oracle.network.trace]
trace_file_client = client names.directory_path = TNSNAMES
• nastaviti in zagnati je potrebno Listener proces. Ta proces
omogoča
odjemalcem povezave z bazo.
Pripravljena datoteka LISTENER.ORA:
LST01 = (ADDRESS_LIST = (ADDRESS= (PROTOCOL=IPC) (KEY= ORA_01) )
(ADDRESS= (PROTOCOL=IPC) (KEY= V8174_1) ) (ADDRESS = (PROTOCOL =
TCP) (Host = 193.193.193.10) (Port = 1526) ) )
STARTUP_WAIT_TIME_LST01 = 0 CONNECT_TIMEOUT_LST01 = 10
TRACE_LEVEL_LST01 = off
trace_directory_lst01=disk$oracle:[oracle.network.trace]
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 37
trace_file_listener=lst01 # USE_DEDICATED_SERVER = ON
SID_LIST_LST01 = (SID_LIST = (SID_DESC = (SID_NAME = PROD)
#instanca 1 (PROGRAM = disk$oracle:[oracle.network.admin]orasrv_v2_
PRO.com) (TIMEOUT = 0) ) (SID_DESC = (SID_NAME = PROD) #instanca 2
(PROGRAM = disk$oracle:[oracle.network.admin]orasrv_v2_ PRO.com)
(TIMEOUT = 0) ) )
• Določimo optimalno velikost SGA, buffer cache, log buffer,
logfile ..
db_file_multiblock_read_count = 32 # št. blokov pri full-table
scan branju db_block_buffers = 352236 # velikost buffer-cache
shared_pool_size = 200000000 # velikost shared-pool predpomnilnika
java_pool_size = 20971520 # velikost pomnilnika za Javo log_buffer
= 2097152 # velikost redo-log buffer
• Ponovno preverimo in prevedemo neveljavne objekte (recompile
invalid objects) z ukazi: SQL> select object_name, object_type
from dba_objects where status != 'VALID';
SQL> select 'alter ' || object_type || ' '|| object_name || '
compile;' from user_objects where object_type 'PACKAGE BODY' and
status = 'INVALID' union select 'alter package ' || object_name ||
' compile body;' from user_objects where object_type = 'PACKAGE
BODY' and status = 'INVALID';
V tej fazi smo imeli delujočo bazo Oracle osnovne verzije
8.1.7.0.0. Naš cilj pa je bil Oracle verzije 8.1.7.4.0, zato je
bilo za dvig verzije potrebno namestiti: Oracle 8i Data Server
Patch Set for HP OpenVMS Alpha Po priporočilih Oracle smo izvedli
varnostno kopijo dosedanje namestitve. Zatem je bilo potrebno
kreirati nov imenik: $ create/dir ORA_ROOT:[PATCHSET]
in s protokolom FTP prenesti (binarno) paket ter ga razpakirati:
$ unzip p2376472_8174_AXP.zip
Potrebno je bilo ustaviti vse instance in zaustaviti bazo,
SQL> shutdown immediate
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 38
odstraniti vse nameščene programe (deinstall installed images),
$ remoracle
in ustaviti listener proces $ lsnrctl stop
Zatem smo pognali "patch installer" $ @install_patc.com 81740 $
oracleins (rebuild all products)
Pred nadaljnjimi procedurami za izgradnjo baznega kataloga in
baznih procedur je nujno onemogočiti sistemske prožilce (disabling
system triggers): Da bi to storili smo v inicializacijsko datoteko
INIT.ORA vpisali parameter: _SYSTEM_TRIG_ENABLED=FALSE
Zatem smo iz imenika ORA_ROOT:[RDBMS.ADMIN], iz SQL*Plus orodja
pognali naslednje ukazne datoteke: catalog.sql, catproc.sql,
catrep.sql
Da bi ponovno omogočili sistemske prožilce smo brisali vrstico
_SYSTEM_TRIG_ENABLED=FALSE iz INIT.ORA datoteke in ponovno dvignili
bazo. Ostalo je še prevajanje vseh neveljavnih PL/SQL paketov
(packages): $ sqlplus /nolog SQL> connect / as sysdba -- prijava
v shemo SYS SQL> @ora_root:[rdbms.admin]utlrp.sql
Po končanih postopkih je nameščena verzija baze 8.1.7.4.0 :
SQL> select * from v$version; BANNER
----------------------------------------------------------------
Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production PL/SQL
Release 8.1.7.4.0 - Production CORE 8.1.7.0.0 Production TNS for
VMS: Version 8.1.7.4.0 - Production NLSRTL Version 3.4.1.0.0 -
Production
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 39
Namestitev popravka "Critical Patch Update" (#4751906) Ta
popravek naj bi odpravljal vse, do takrat znane napake v bazi
(bugs). Pred namestitvijo je potrebno preveriti in zagotoviti:
• da so ustavljeni vsi Oracle procesi • da je vzpostavljeno
Oracle okolje (OpenVMS logična imena
ORA_ROOT, ORA_SID..) • da je kreiran podimenik [PATCHES], kamor
se kopira "patch datoteka"
(p4751906_8174_AXP.zip) • da se razpakira "patch datoteka" Iz
imenika ORA_ROOT:[PATCHES.PATCH4867451_BASEBUG4751906] se požene
ukazna datoteka:
$ @install_patch
Izvajanje ukazne datoteke se je končalo brez napak. 5.4.3
Predpriprava za import - kreiranje objektov Po končanem nameščanju
tega popravka smo kreirali še vse potrebne bazne objekte, kot so
dodatni tablespace za uporabniške tabele, indekse, začasne
strukture (temp) in rollback segmente. Za večino teh objektov smo
si pripravili ukazne datoteke (scripts) že iz prejšnje verzije baze
tako, da je postopek tekel lažje in hitreje. S pomočjo takih
ukaznih datotek smo vnaprej kreirali 15 največjih tabel, da smo
lahko pripravil prazen prostor za prenos (import) podatkov: CREATE
TABLE TERJATEV_ODJ_MESTO ( ODJEMNO_MESTO NUMBER(7) NOT NULL,
ID_STROSKA NUMBER(8) NOT NULL, PARTNER NUMBER(6) NOT NULL,
ID_TERJATVE NUMBER(8), SALDO_TERJATVE NUMBER(15,2), ZNESEK
NUMBER(15,2) NOT NULL, STATUS VARCHAR2(1), STATUS_PRENOSA
VARCHAR2(1), DATUM_TERJATVE DATE, DATUM_VALUTE DATE, NACIN_PLACILA
VARCHAR2(2), OBCINA NUMBER(4), TIP_DOKUMENTA VARCHAR2(1), POSTAVKA
NUMBER(5), VRSTA_DOKUMENTA NUMBER(2), STATUS_IZPISA NUMBER(1),
IZTERLJIVOST VARCHAR2(1), OBRESTI VARCHAR2(1), DATUM_OD DATE,
DATUM_DO DATE, ... )
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 40
TABLESPACE SPLDATA PCTUSED 40 PCTFREE 10 INITRANS 1 MAXTRANS 255
STORAGE ( INITIAL 1000M -- začetna velikost tabele NEXT 1000M --
velikost naslednjega extenta MINEXTENTS 10 -- začetno število
extentov MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST
GROUPS 1 ) NOCACHE NOPARALLEL; Alter table TERJATEV_ODJ_MESTO
storage (next 50M);
To tabelo smo kreirali prazno, veliko 10GB, vsak njen naslednji
podaljšek (extent), ko bo 10GB polnih, pa bo velik 50 MB. 5.4.4
Prenos (import) podatkov Sedaj je bila baza pripravljena za prenos
podatkov. Zato smo pripravili ukazno datoteko na nivoju
operacijskega sistema: $ mount/media=compact/cache=tape_data -
/blocksize=40960/recordsize=40960 MKC400: EXP16 $ on warning then
continue $ on error then goto err $!----- $ imp un/pw - ! import
podatkov buffer=262144 - file=MKC400:FULL_060316.DMP -
fromuser=SHEMA_NAME - touser=SHEMA_NAME - ignore=Y - indexes=N - !
indekse bom kreiral kasneje commit=Y $KONEC: $ dism/nounl MKC400: $
exit
Po končanem importu podatkov smo preveril, da ni bilo napak.
Tokrat je vse potekalo brez težav. Rezultat prenosa (import)
podatkov v bazo Oracle8i je razviden iz tabele 6.
št. kreiranih tabel v 8i
skupno št. vrstic
skupna velikost
1.595 467.317.433 102 GB
Tabela 6: rezultat prenosa podatkov v bazo Oracle8i
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 41
5.4.5 Kreiranje indeksov na tabelah Zatem smo pognali ukazno
datoteko za kreiranje indeksov na teh tabelah. Tudi tu smo najprej
kreirali največje indekse na svoj način z namenom, da bi se
kreirali optimalno, s čim manj podaljški (extent). Z vnaprejšnjim
kreiranjem teh indeksov smo preprečili, da bi Oracle kreiral
indekse s privzetimi vrednostmi "storage" parametrov. Zaradi
hitrejšega kreiranja indeksov smo povečali parameter seje
SORT_AREA_SIZE na 50MB - privzeta vrednost v produkcijski
postavitvi baze je bila 2MB. alter session set sort_area_size =
52428800;
-- CREATE INDEX STROSEK_ODJ_MESTO01 ON STROSEK_ODJ_MESTO
(ODJEMNO_MESTO, DATUM_OD, TIP_STROSKA, STATUS) TABLESPACE SPLIDX
PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 1800M --
začetna velikost segmenta NEXT 20M -- velikost naslednjega
podaljška MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 );
Zadnja faza na strežniku se je končala 4. dan zjutraj 5.4.6
Odpravljanje zadnjih težav EXPORT deluje počasi Po prvem
arhiviranju baze smo ugotovili, da procedura za export sedaj teče
bistveno počasneje - namesto običajne 3 ure, sedaj niti 9 ur ni
bilo dovolj, da bi export končal. Čas exporta baze je bil
nesprejemljiv, zato smo na Oracle Metalinku vztrajno iskali možne
rešitve za težavo. Ugotovili smo, da glavni popravek Oracle
Critical Patch Update #4751906 ni vseboval popravka za to napako
(bug): EXPORT VERY SLOW UNDER 8.1.7 COMPARED 8.0.5.1 AND
EARLIER
Odprava te napake je vsebovana v popravku #2655014, zato je
sledila še namestitev tega popravka (patch #2655014).
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 42
Popravek se namesti na bazni strežnik: $ unzip
p1642582_8174_AXP.zip $ set def [.patch2655014_basebug1642582] $
@install_patch 2655014
Po namestitvi smo s pomočjo procedure ORACLEINS povezali (link)
še produkta RDBMS in UTIL. Manjkajoči zapisi v okvarjenih tabelah
Narejene so bile kontrole zapisov na osnovi logičnih povezav.
Zapisi v eni tabeli so v soodvisnosti od podatkov v drugih tabelah.
Znesek računa v eni tabeli je na primer vedno enak seštevku
razdeljenega računa v drugi tabeli. V primeru, da se znesek ne
ujema in so bili računi razdeljeni pomeni, da nekaj zapisov manjka.
V tem primeru smo do prvotnega stanja prišli z brisanjem delitve
računa in ponovno delitvijo. Določene poizvedbe delujejo prepočasi
Zaradi sprememb v delovanju Oraclovega optimizatorja v verziji
Oracle8i, je nekaj poizvedb sedaj delovalo prepočasi. Ugotovljeno
je bilo, da se je optimizator, predvsem pri kompleksnejših
poizvedbah, odločil za drugačen vrstni red uporabe indeksov. Nekaj
teh problemov smo rešili z uvedbo Oracle namigov (hint) - dodatnih
namigov optimizatorju, nekaj pa s predelavo poizvedb. Primer Oracle
hint za uporabo indeksa terjatev_odj_mesto03: select /*+ index (t
terjatev_odj_mesto03) */
distinct id_terjatve,rajon,partner,nacin_placila, . . .
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 43
5.4.7 Nadgradnja strežnika za odjemalce Na strežniku za
odjemalce smo izvedli naslednje postopke: SQL*Forms: Ena glavnih
sprememb pri prehodu iz Oracle7 na Oracle8i je sprememba
"pseudokolone" rowid, s katero Oracle dostopa do podatkov v tabeli.
Da se prepreči napaka "INVALID ROWID AFTER AN INSERT THROUGH ORACLE
FORMS" je treba namestiti popravek, ki zamenja eno od sistemskih
knjižnic za SQL*Forms. Postopek namestitve popravka
Alpha_#435593:
1. vključitev modula v RDBMS objektno knjižnico:
$ copy upicto.obj ora_util:*.*/log $ set default ora_util: $
library/ext=upicto/output=upicto.obj_sav ora_util:kusr.olb $
library/replace ora_util:kusr.olb upicto.obj
2. relink RDBMS s proceduro ORACLEINS SQL*Menu: Najprej je bilo
potrebno kreirati vse objekte (tabele, indekse) za okolje SQL*Menu.
Pognali smo naslednje Oracle ukazne datoteke: SQL>
@ora_sqlmenu50:MENUDROP -- pobrišem stare tabele SQL> set
compatibility V6 -- nujno ! SQL> @ora_sqlmenu50:MENUTABS --
kreiram nove interne tabele SQL> @ora_sqlmenu50:MENUIDXS --
kreiram indekse na te tabele SQL> @ora_sqlmenu50:MENUGRTS --
dodelim privilegije za uporabo teh tabel SQL>
@ora_sqlmenu50:MENUGRP SQL> @ora_sqlmenu50:MENUVWS
"Compatibility" je nujno nastaviti na V6 - v nasprotnem primeru
bi se tabele, ki jih interno uporablja orodje SQL*Menu kreirale z
napačnimi opisi polj (na primer CHAR namesto VARCHAR). Po uspešnem
kreiranju SQL*Menu okolja, smo naložili in prelinkali aplikacije,
ki smo jih izvozili pred nadgradnjo. SQL*Report: Namestiti je bilo
potrebno interne tabele tega orodja. Po naših izkušnjah je najbolje
namestiti tabele centralno (Centrally Installed tables), za dostop
do teh tabel pa dodeliti dovoljenja za uporabo (grants) posameznim
uporabnikom. Lahko pa se tabele namestijo tudi lokalno, v shemo
posameznega uporabnika, vendar je tako namestitev težje vzdrževati.
Obe vrsti namestitve nista možni hkrati.
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 44
Postopek kreiranja internih tabel in dodelitve dovoljenj za
uporabo objektov orodja SQL*Report: SQL>
@ora_root:[sqlreportwriter.bin]srw_pup -- le za OpenVMS SQL>
@ora_root:[sqlreportwriter.bin]srw_cmdn -- le za OpenVMS SQL>
@ora_root:[sqlreportwriter.bin]srw_prac -- kreiram product
access tabele
SQL> @ora_root:[sqlreportwriter.bin]srw_icen -- centralne
tabele, views, synonyms, ..
SQL> @ora_root:[sqlreportwriter.bin]srw_grnt -- dodeljevanje
privilegijev uporabnikom za delo z objekti
Vse te ukazne datoteke je treba pognati kot sistemski uporabnik
(SYSTEM user) v SQL*Plus orodju. Zatem smo uvozili vsa poročila
(reports), ki smo jih predhodno shranili z "dumprep" ukazom: $
loadrep file= userid=un/pw
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze podatkov Oracle 45
6 Zaključek Nadgradnja produkcijske baze se pred dejansko
izvedbo ni zdela tako kompleksna, kot se je kasneje izkazalo.
Projekt je bil dobro načrtovan in zastavljen z upoštevanjem
možnosti, da kakšen del plana odpove. V primeru odpovedi so bili
pripravljeni rezervni postopki. Med nadgradnjo baze je prišlo do
okvare podatkov, kar nam je vzelo veliko časa. Bazo smo uspeli
vrniti v prvotno stanje zaradi dobrega poznavanja delovanja
aplikacije in same baze. Pri reševanju nastalega problema smo
ugotovili, da bi imeli veliko manj in predvsem lažje delo, če bi
bila aplikacija napisana tako, da bi omogočala ponavljanje
poslovnih dogodkov. Poslovni dogodek predstavlja sklop atomskih
transakcij (vsi deli transakcije se izvedejo v celoti ali pa se ne
izvede noben del) na Oracle RDBMS nivoju. To bi omogočalo, v
poslovnem smislu, vrniti bazo v konsistentno stanje v katerikoli
čas v preteklosti. Aplikacija bi morala poslovne dogodke beležiti v
lastni dnevnik. Tako bi lahko, v primeru okvare podatkov, s
pregledom dnevnika lažje obnovili manjkajoče podatke. Seveda pa to
pomeni velik poseg v apliakcijo. Verjetno bi z analizo ugotovili,
da bi bilo potrebno večino aplikacije napisati na novo. V projekt
nadgradnje je bilo vloženih skupaj 331 ur dela (Tabela 7).
osebe št. oseb št. ur / osebo št. ur skupaj samostojni programer
- analitik 4 62 248 svetovalec iz Oracle Slovenija 1 19 19
uporabniki + analitik IT 5 3 15 sistemski analitik / administrator
baze 1 49 49
skupaj 11 133 331
Tabela 7: število vloženih ur dela v projekt nadgradnje
Z nadgradnjo na Oracle8i je ostal nerešen še problem zunanjega
izvajalca, ki je za svojo aplikacijo zahteval bazo Oracle, verzijo
vsaj 9i. Po analizi smo ugotovili, da bo njihova baza relativno
majhna in transakcijsko manj zahtevna. Zato smo se odločili, da
namestimo dodatno bazo Oracle9i na Windows 2003 strežnik, ki bo
povezana s produkcijsko bazo preko baznih povezav (database
links).
-
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko
delo visokošolskega strokovnega študija
Miran Presečnik: Projekt nadgradnje baze po