You are on page 1of 24

April 2001 • Nr 5, Årgang 2 • ISSN 1600-5147 • Pris: kr. 125,00 ex moms • www.OracleEkspert.

dk

Bemærk: Dette tidsskrift må kun distribueres i


virksomheder med OracleEkspert medlemskab

#5
OUGDK O RACLE PORTAL
I efteråret 2000 sendte Oracle 2. generation af WebDB - Portal 3.0 - på gaden.
DBA SIG Dette indlæg gennemgår Portal 3.0, hvor der er forskelle i forhold til WebDB
2.% og der opbygges en Portal.
• Dato for næste møde er endnu Torben Holm
ikke fastlagt.
Designer SIG TUNING DATABASE REORGANIZATIONS FOR
• Næste møde: onsdag den 16. maj
eller den 21. juni 2001
MAXIMUM SPEED
Oracle provides a number of options and parameters to achieve optimal reor-
Developer SIG ganization speed in any environment. This paper reviews these settings and
• Dato for næste møde er endnu discusses how to take advantage of them.
ikke fastlagt. Heather Compher and Gil Asherie
Data warehouse SIG
• Dato for næste møde er endnu
S YSTEMDOKUMENTATION UDEN SMERTE
Artiklen giver dels en beskrivelse af, hvad der efter forfatterens mening er
ikke fastlagt. god systemdokumentation, samt et forslag til, hvordan man på en overkom-
melig måde kan implementere en brugbar systemdokumentation, som arbe-
Web SIG jder direkte på et systems kildetekst, og derfor er uafhængig af design- og
• Gruppen er lukket ned indtil en udviklingsværktøjer, og samtidig altid er opdateret.
ny koordinator er fundet. Jan Ahlberg.

S PATIAL OG PL/SQL
NYHEDER I dokumentationen for Oracle Spatial er der masser af eksempler på hvor-
ledes man kan hælde data ind i spatial-objekter, og hvordan man efterfølgen-
• Ellison nærmer sig Gates de manipulerer dem vha. de indbyggede funktioner. Men hvad nu, hvis man
• Oracle regnskab for 3. kvartal får lyst til at rode med sine objekter på egen hånd? – Det er der absolut intet
til hinder for…
• Oracle vinder XML-Journal Rea- Peter Sørensen
ders’ Choice Award 2000
• Anklage mod Oracle og Ellison U DNYT DIN REDOLOG INFORMATION.
Med Oracle 8i fik Oracologerne mulighed for at analysere information i
• Nr 1 til applikationsudvikling
redolog med Logminer. Computer Associates har i flere år haft et værktøj
• Sybase går til angreb på Oracle
Loganalyzer, der kan gøre det samme, og efter min mening, på en betydeligt
og Microsoft
nemmere måde. I denne præsentation af værktøjet gives en oversigt over
• Oracle-aktier falder 20% dets muligheder, og hvad man kan benytte den indhentede information til.
• Oracle giver computere til skoler Carl Bruhn
• Oracle opretter ny division: Ora-
cle.com
• Ellison afviser rygter om Clinton
• Oracle sparer 3 mia på 3 år
Torsdag
• 1 mill download af iAS 9i
26. april
2001
TURBULENTE ORACLE-FOLK
Leder Marc de Oliveira, ansvarshavende redaktør.
”I’m tired of jobs starting off at five fifty an hour
Then this boss wonders why I’m smarting off
I’m tired of being fired every time I fart or cough”
- Eminem, If I Had...
Måske skyldes Eminems pludselige popularitet at han formidler nogle Oplag: . . . . . . . . . . . . . . .1000 kopier
følelser, som mange kender til. Meget tyder i alt fald på at Oracle-folk i
mindre og mindre grad har lyst til at knytte sig til en enkelt arbejdsgiver Udgives af:
i længere tid.
. . . . . . . . . . . . . .PYTHIA Information
I den sidste tid har jeg hørt om mange Oracle-folk, der føler sig dårligt . . . . . . . . . . . . . . . . . . .Kongensvej 3
behandlet af deres arbejdsgivere, hvad enten de er ansat som kon-
. . . . . . . . . . . . . .2000 Frederiksberg
sulenter eller som interne medarbejdere. Samtidig skal de være vidner
til at de enten bliver solgt til uhyrlige beløb langt over 1000 kr pr time, . . . . . . . . . . . . . . . . . . . . . . .Danmark
eller at så dyre konsulenter bliver hyret ind i deres virksomheder mens
de selv kun får få procent af det beløb. Telefon: . . . . . . . . . . . . . . . .26279991
Først så vi konsulentvirksomhederne blomstre op, idet faste medarbej- Fax: . . . . . . . . . . . . . . . . . . .26199991
dere lod sig lokke over i konsulentvirksomhederne, hvor de blev tilbudt Email: . . . . . .Info@OracleEkspert.dk
noget højre lønninger, end de kunne få hvor de var. Nu tager de skridtet
videre og bliver freelance’ere i stor stil, for at få den fulde andel af deres Web: . . . . . . .www.OracleEkspert.dk
arbejdes værdi, mere selvbestemmelse og større frihed til at vælge
deres arbejdsopgaver. Denne tendens bekræftes blandt andet af mæg- Ansvarshavende redaktør:
den af rekruteringsvirksomheder, som er kommet til i de sidste to år. . . . . . . . . . . . . . . . . .Marc de Oliveira
Den tryghed, som de faste stillinger tidligere kunne hævde, de tilbød er . . . . . . . . . . .Marc@OracleEkspert.dk
ikke længere reel. I dag er virksomhederne så økonomisk pressede, at
mange vælger at fyre deres medarbejdere, hvis de ikke længere har
brug for dem, så tryghedsmæssigt er situationen for en fastansat me- Rettigheder:
get lig, den som en freelance’er er i: hvis der pludselig ikke er flere op- PYTHIA Information ejer alle rettigheder
gaver, bliver man arbejdsløs. Og har ens indtægt været 2-3 gange så til indholdet af OracleEkspert.
høj, mens man havde arbejde, vil man givetvis nemmere kunne klare Kopiering af bladet i dele eller helhed
en periode i arbejdsløshed. må kun ske efter skriftligt samtykke fra
Er dette så en god eller en dårlig udvikling? PYTHIA Information.
PYTHIA Information forbeholder sig ret-
Helt generelt er tendensen måske fornuftig nok. Hvis mange virksom- tigheder til at offentliggøre og genudgive
heder har behov for ekspertise, som findes i knappe ressourcer, kan de trykte artikler, tips mv, samt at tillade
det være en god konstruktion at virksomhederne på denne måde deler bladets læsere at anvende indholdet til
ressourcerne, og betaler den faktiske markedspris for dem. Virksom- såvel personlige som kommercielle for-
hederne binder sig samtidig ikke for flere ressourcer end de faktisk har mål.
brug for.
PYTHIA Information kan ikke drages til
Denne løsere tilknytning mellem virksomheder og deres medarbejdere ansvar for eventuelle fejl og mangler i
ser vi også i forbindelse med den stigende anvendelse af hjemmear- Indholdet af OracleEkspert. Artikler mv
bejdspladser, hvor faste medarbejdere kan løse deres arbejdsopgaver stilles tilrådighed uden garanti af nogen
hjemmefra og på den måde selv spare transportudgifter, mens virk- art.
somheden kan spare udgifter til lokaler mv og samtidig få en mere flek-
sibel arbejdstid fra sine medarbejdere, som på denne måde principielt Pris:
altid vil være tilrådighed.
Enkeltnummer . . . . . . . . . .DKK 125,00
Men i sidste ende, hvilken løsning er egentlig mest til virksomhedens 1 års abonnement . . . . . . .DKK 600,00
fordel? Friheden til kun at betale for medarbejderen, når der er opgaver
til vedkommende, selv om det betyder, at man kommer til at betale en
ekstra forsikring mod fremtid arbejdsløshed gennem merprisen? Eller Ved samtidig køb af minimum 5 kopier til
at have en tættere tilknytning til sine medarbejdere, som vil medføre, at samme adresse (enkeltnummer eller
de får et bedre kendskab til virksomhedens IT-systemer og derfor vil abonnement) gives 40% rabat på den
være mere værdifulde end konsulenter? samlede pris.

Selv om de kostede det samme ville den faste medarbejder ikke være Priserne er excl moms.
at foretrække frem for den løse? Og for medarbejderen, ville det ikke
være en fordel at være tilknyttet en enkelt arbejdsgiver, hvor man Annoncer:
kendte systemerne, hvis nu lønnen (samlet set) var den samme? Annoncer til OracleEkspert nr 6 skal væ-
Hvis virksomhederne var villige til at bruge de samme penge på at gøre re PYTHIA Information i hænde senest
arbejdspladsen tiltrækkende (arbejdsklima, uddannelse, tryghed i an- den 11. maj 2001.
sættelsen etc), frem for at bruge dem på at købe de dyre konsulenter, Annoncepriser kan findes på:
ville de måske ende med flere og mere kompetente ressourcer, og ikke www.OracleEkspert.dk
mindst en bedre stemning...

”Tired of having to work as a gas station clerk


for this jerk breathing down my neck driving me bezerk”
- Eminem, If I Had...

Password: d12isoy
Tid: . . . . . . . . . . . . . . . . . . . . . . .Torsdag den 26. april kl 9:00 - 16:00
Sted: . . . . . . . . . . . . . . . . . . . . .Fensmarkgade 1, 2200 København N
Pris: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .DKK 1500
Abonnentrabat: . . . . . . . . . . . . .30% for OracleEkspert-abonnenter*
Tilmelding: . . . .Senest den 13. april 2001 på www.OracleEkspert.dk
* Der gives maksimalt een abonnentrabat pr tegnet abonnement. Abonnentrabatten kan overdrages til
andre personer ansat i samme firma som abonnenten.
OracleEkspert-konferencen er en mulighed for at møde skribenterne af bladets artikler og høre
om opdateringer til artiklerne, nye erfaringer, stille spørgsmål og diskutere løsningerne. Gå ikke

• 12 OracleEkspert-indlæg i tre parallelle spor


• Leverandørudstilling
• Leverandørindlæg i et separat spor
• Morgenbrød, frokost, kaffe, te, vand mv

Spor 1: Database Spor 2: Værktøjer Spor 3: Metode


• Ratios er for tabere, Wait-inter- • Spatial for Gør-Det-Selv'ere • Forslag til Forskellige
facet er konge Afprøvninger
Mogens Nørgaard Peter Sørensen
• Om forskellige slags Indexes og • Oracle OpenWorld 2000 Christian Bastlund
NULL • Cutting Code With Style
Martin Jensen Finn Ellebæk Nielsen
• Performace Vurdering af PL/SQL- • Oracle Designer Repository API Scott Hollows
rutiner • Hvad er et data warehouse?
Rune Mørk Bodil Feldinger
• Tuning Database Reorganizations • Portal 3.0 Erik Haahr
for Maximum Speed • Systemdokumentation
Gil Asherie Torben Holm

Se mere på: www.OracleEkspert.dk & www.MiracleAS.dk


Arrangeret af:
Tools
ORACLE PORTAL
Teknisk Artikel Torben Holm, der i dag er ansat hos Miracle A/S, har arbejdet med Oracle siden 1992.
Før sin ansættelse i Miracle A/S var Torben bla. ansat hos Oracle (Premium
Services) og brugte noget af sin tid på at undervise i bla. WebDB.

Hvorfor denne artikel gang” (I følge Gads lille leksikon), og det er også hvad
Portal er – altså en hovedindgang, med mulighed for
Hvorfor ønsker jeg nu at skrive denne artikel om at tilgå flere systemer - udsmykningen må man selv
Oracle Portal? Primært for at for at fortælle noget om sørge for.
Portal, men også for at beskrive nogle af de forskelle
En Portal side er opbygget af såkaldte Portlets som
der er på WebDB 2.% og Portal 3.0.
jeg normalt kalder ”informationsøer”, dvs. små
områder med informationer fra forskellige systemer
Grundlæggende forskelle (interne som eksterne) der giver det nødvendige
Udover ”stor” forskel på navnet WebDB->Portal (som overblik, der kan afgøre om man evt. ønsker at
blev skiftet ud midt i vadestedet efter vand (det var ”zoome” tættere på det, der danner grundlag for infor-
først sent i beta-programmet at navnet blev skiftet fra mationerne. Informationerne kan f.eks. være salgstal
WebDB 3.0 til Portal 3.0)), er der nogle fra ”Salgssystemet”, der udviser dags-/månedstal, og
grundlæggende forskelle på funktionalitet og ikke hvis man så vil finde ud af, hvorfor det går så godt,
mindst på ”Listneren”, der er bindeledet mellem klikker man på den pågældende måned/information
browseren og databasen. WebDB 2.% havde sin og straks åbnes et nyt browservindue med mere præ-
egen letvægts Listner med, der kan benyttes til en cise informationer. Det kunne også være ”head-lines”
start – lidt afhængig af hvor stor belastning og typen fra en ekstern nyhedsformidler fx Yahoo eller lignende
af belastning, kan man sagtens ”nøjes” med denne eller hvad med de interne nyheder? Mulighederne er
letvægts Listner. Portal 3.0 er som sådan ikke mange.
selvstændig, men følger med iAS, der jo bygger på
Apache med diverse mod-moduler, hvoraf Portal 3.0 Skemaløse brugere
b.la. benytter sig af mod_plsql.
I WebDB skal hver enkelt bruger oprettes som almin-
WebDB består overordnet af to dele; det jeg vil kalde delige databasebruger og dette bliver hurtigt ”tungt” at
en WebDB del, som indeholder sådan noget som arbejde med (forestil dig at du har et system hvor folk
administration af brugere/roller/grants etc., moni- kan tilmelde sig via Internettet hvor der potentielt er
torering af databasen og WebDB komponenter, Build 100.000’er af brugere) ud over at man på hver enkelt
- der består af bla. en del til oprettelse af Formularer bruger skal tage stilling til hvilke tablespaces og hvilke
til ind- og opdatering , Rapporter, delte komponenter kvota han eller hun nu skal have, kan man heller ikke
etc. Den anden del er SITE-delen (hjemmeside), der, registrere særlig meget på sådan en almindelig
når man fra WebDB har genereret en SITE, i princip- databasebruger, med mindre man opbygger et
pet kan leve uden WebDB, da alle værktøjer der skal sideløbende system til dette.
benyttes til at administrerer SITE’et bliver oprettet i
I Portal er der et begreb der hedder skemaløse
databasen, sammen med det nyoprettede SITE - der
brugere, dette er brugere der ikke, i normal forstand,
i øvrigt bliver oprettet som en separat bruger med et
findes i databasen. På disse brugere kan der registre-
antal PL/SQL pakker. Rent layoutmæssigt, og tildels
res ”almindelige” ting – så som fornavn, efternavn,
også funktionelt, er der relativ stor forskel på WebDB-
adresse etc. Disse brugere (USER) har dog en enkelt
delen og SITE-delen, med Portal er de to dele kom-
forbindelse til databasen, da de alle (under overfla-
met tættere på hinanden, ikke mindst fordi SITE
den) benytter en ”rigtig” databasebruger (SCHEMA),
delen, der i øvrigt har skiftet navn til ”Content area”, nu
på denne måde skal man kun tage stilling til sådanne
ikke længere bliver oprettet som en separat bruger
noget som TABLESPACES og KVOTAS på en
(og derfor ikke kan ”leve” alene mere), men også lay-
bruger. Til at håndtere dette findes der værktøjer i
outmæssigt er de kommet tættere på hinanden – dog
Portal - og bare rolig, Portal har styr på hvem der er
ikke helt sammen endnu.
hvem.
I WebDB var alt i princippet i databasen og kodet i
Hvis man selv ønsker at oprette skærmbilleder til
PL/SQL, med Portal 3.0 er det meste af det interne
oprettelse af disse skemaløse brugere (fx en
kodet i Java og noget er placeret uden for databasen
Formular hvor folk selv kan tilmelde sig et eller andet)
i form af Servlets. Man kan selv benytte sig af Serv-
findes der et API til oprettelse af disse brugere (bla.
lets, der er placeret uden for databasen, disse kan fx
WWSEC_API). I det hele taget findes der en række
have forbindelse til mailsystemer, således at man –
API’er (både PL/SQL og Java) til alt muligt, hvilket der
når man er logget på Portal – kan se sine mails.
bestemt ikke gjorde til WebDB 2 – ikke officielle i hvert
I forbindelse med Portal 3.0 kan man benytte Single fald.
Sign On (SSO) således at når man er logget på Portal
Bemærk i øvrigt at der i Portal er forskel på USER og
er man i princippet logget på et antal andre systemer,
SCHEMA, USER er en skemaløs bruger, mens
Portal er - naturligvis – nødt til at gemme information
SCHEMA er – ja et SCHEMA.
om brugerid og password til disse systemer.
Administration
Portal 3.0
Lige som i WebDB findes der et separat menupunkt i
Med Portal 3.0 kommer der en ny del, nemlig ”Portal”, Portal (faneblad) der omhandler almindelig database
som nu er blevet omdrejningspunktet for produktet. administration. Her kan man se nyttige ting om fx
Portal betyder ”Arkitektonisk udsmykket hovedind-

4 April 2001 OracleEkspert


init.ora parametre, memory, datafiler etc. Samt avancerede, med mulighed for at den enkelte bruger
diverse andre informationer om databasen. Det er kan gemme den information der gælder når han/hun
også her man opretter databasebrugere og roller. logger ind til Portalen. I forhold til WebDB hvor det var
Man kan (endnu) ikke tage databasen ned med næsten umuligt at få noget ind fra tredjemand er det
Portal. Jeg skal dog ikke undlade at gøre opmærksom nu blevet muligt.
på, at der på OTN findes iSQL*Plus i beta, der er
SQL*Plus i en web udgave, og at man med dette fak- Content Areas
tisk kan tage databasen ned (og op) via sin browser
Content Area – der tidligere hed SITE – er i princippet
(endnu en grund til at befinde sig på Hawaii)
bygget op som under WebDB, dog er det bragt tæt-
Der findes en ”Navigator” i Portal, denne benyttes til, tere sammen med resten af Portal i forhold til WebDB
at navigerer rundt med, i de muligheder man har for at (eller også er det omvendt). Samtidig er det blevet
oprette, rette eller droppe ting man har som database- mere fleksibelt, fx kan man nu fra Navigations Baren
bruger eller som skemaløs bruger. Her kan man link’e direkte til andre steder uden for ”Site’en”, hvor
vælge mellem man før kun kunne dette fra et – i gamle termer -
• Pages (som er betegnelsen for en Portal side) ”Content area”
• Content areas (Tidligere SITE) Et Content Area plejer jeg at sammenligne med en fil-
• Applications (Tidligere, når man oprettede fx struktur. Man har et rodelement og derunder et antal
Formularer lå de bare og ”flød” under en bruger, mapper evt. med undermapper, der hver især kan
nu bliver disse elementer samlet under separate indeholde forskellige dokumenter. På hver af disse
Applications) mapper kan man sætte rettigheder op om hvem der
• Database Objects (Tabeller, Views, Packages, kan og må hvad i de enkelte mapper - i Portal kan
etc.) man sågar gøre det på dokumentniveau.
I denne struktur har man mulighed for at upload’e do-
Pages kumenter, hvor der i øvrigt kan laves versionskontrol,
Med Pages bygges de(n) egentlige Portal page(s), man kan indsætte kald til eksterne sider, indsætte
der som tidligere skrevet, er en samling af informa- Formularer, Rapporter, Charts etc. man har udviklet i
tionsøer. Disse informationer kan komme fra et utal af Portal, man kan lave ”bulk-upload” af dokumenter via
steder, idéen er at man kan få et overblik over de infor- ZIP-filer – mulighederne er mange.
mationer man er intersseret i og man i første omgang Content Areas har især den meget stærke feature at
slipper for at skulle ind i alle mulige og umulige syste- det – når det benyttes til at uploade dokumenter til
mer. En Portal page opdeles i nogle områder, hvert databasen og der i øvrigt er installeret interMedia -
område kan indeholde andre områder og/eller fx benytter sig af InterMedia tekst, det vil sige at man får
nogle tab-sider som hver især kan indeholde nogle mulighed for fritekstsøgning på et hav af forskellige
områder og/eller andre tab-sider – begynder du at se dokumenttyper (InterMedia tekst kan genkende mere
tegningen – der kan indbygges en masse information end 150 formater, dog bliver ikke alle typer indekseret,
ind på en sådan side og man kan gøre det mere eller fx ikke .exe filer (gu’ ved om database filer kan indek-
mindre overskueligt med tab-sider. Hvis man benytter seres via InterMedia tekst: :-)). Når man søger vil man
tabsider kan man gruppere ting der hører sammen i kun få ”Hits” på de dokumenter der findes i de Mapper
bestemte tab-sider og da det kun er den aktive tab- man har adgang til.
sides informationer der er synlige bliver det mere
overskueligt, man får samtidig den effekt at det virker Tidligere var et SITE normalt delt op ved hjælp af
som om den information der er på de andre tab-sider frames, med en navigations-bar og et ”Content Area”,
kun er et klik væk , hvilket de selvfølgelig også er, men i PORTAL 3.0 benyttes i stedet <TABLE> tags til at
husk på at informationen kan være samlet fra flere inddele siden med, den samme teknik benyttes i for-
forskellige applikationer. bindelse med Potal Pages, man er derfor nødt til at
begrænse sig til at benytte metoder, der kan lade sig
I Pages kan der indbygges sikkerhed således at infor- gøre inde for TABLE tags, fx ikke Frames.
mation der kun må være tilgængelig for bestemte per-
soner eller grupper af personer, holdes skjult for andre Dele af Content Areas kan også indsættes i en Portal
personer, det kunne fx være at salgstal kun må ses af side.
personer der er i salgsafdelingen.
Applications
Eksempler på de ”ting” der kan ”proppes” på en Page,
kunne fx være dele af en Portal Applikation Applications er et begreb der samler et antal
(Formularer, Rapporter, Charts etc.) man har bygget. Fomularer, Rapporter, Charts etc. i nogle ”klumper”
Det kunne også være Portlets, der bliver stillet til der hører logisk sammen. I WebDB lå disse kompo-
rådighed af en ”Portlet Provider”, hvilket er et nyt nenter i ”en stor bunke”. Man har mulighed for at
begreb i forbindelse med Portal. benytte komponenter fra Applikationer i Portal sider
og/eller i Content Areas og derved fremsøge eller
En Portlet Provider er en form for en applikation der ajourfører informationer direkte fra Portalen eller fra
består af en samling PL/SQL pakker og/eller Java det Content Area komponenten befinder sig i.
klasser, med evt. tilhørende tabeller, som kan tilbydes
af tredjemand – dette kunne fx være en Kalender eller Stort set alle komponenter bliver bygget som PL/SQL
lignende. Dette registreres, via et API, i Portal og kan Pakker, koden er let læselig og veldokumenteret.
være internt i databasen eller for Java’s vedkom- Formularer (FORMS)
mende som Servlets eksternt i forhold til databasen.
Når Portlet Provideren er registreret kan de elemen- Formularer kan bla. bygges som formularer på
ter, Provideren tilbyder benyttes på Portal Pages. enkelte tabeller, views eller synonymer? Eller som
Selve Portlets’ene kan være mere eller mindre ”Master/detail”, i forhold til WebDB er funktionaliteten
omkring felt-validering og layout virkelig forbedret.

OracleEkspert April 2001 5


Afhængig af typen af felt, og her er der tale om HTML sådan i WebDB, at når man opretter en tabel er dette
felter (INPUT, BUTTON, TEXT AREA etc.), er der et ”one shot”, forstået på den måde, at man ikke kan
forskellige metoder fx onBlur, onFocus, onMouseover tilføje en kolonne med mindre man indtaster hele ta-
etc. der udføres når bestemte hændelser sker fx et felt beldefinitionen igen og dermed dropper tabellen for
mister fokus. Portal er så ”klog” at de rigtige metoder efterfølgende at oprette den igen, med datatab til
sættes på de rigtige typer felter og man kan efterføl- følge, man får godt nok en advarsel først, meeen… I
gende sætte den rigtige javascript kode ind til netop Portal kan man nu rette en tabel, der er kommet flere
dette felt. storage parametre (dog er PCTINCREASE default
Tidligere var det WebDB der bestemte hvad der skulle 50?) og der er mulighed for at tilføje constraints.
ske under ajourføring, men det er nu muligt at Skal man i WebDB oprette et view får man et vindue
definere sine egne procedurer til at håndtere selve med et stort område hvor man kan indtaste sin view-
opdateringen af data. definition. For folk der er vant til at ”rode” i databasen
Man skal være opmærksom på, at hver gang man kan dette selvfølgelig være OK, men for en nybegyn-
laver rettelser og gemmer, overskrives den gældende der er dette ikke godt nok. I Portal er bla. denne wi-
version, men som tidligere har Portal en simpel ver- zard forbedret en del (den ligner faktisk en rigtig wiz-
sionering, så man kan komme tilbage til en tidligere ard, i hvertfald første gang man gennemløber den).
version af en komponent. De wizards der findes til Funktioner/Procedurer og
pakker gør nu det, at de rent faktisk henter sourceko-
Rapporter (Reports) den fra databasen (tidligere var der de samme
Tidligere var rapporter begrænset til tabulærer rap- betingelser som beskrevet under oprettelse af
porter, altså kolonne/rækker, nu er det muligt også at tabeller), desværre er der (stadig) ikke noget ver-
formaterer rapporterne som formularer eller bruger- sionering af denne sourcekode, man kunne måske
defineret layout. I det brugerdefinerede layout får man have brugt den samme metode som ved oprettelse af
et område med diverse tabel tags (<TR>, <TD> etc.). Formularer, Rapporter etc. hvor der jo bliver gemt ver-
sioner af de metadata, der bliver brugt til at oprette
En anden fed ny feature er at man kan lade felters
elementerne med.
fonte og farver være værdibetinget, altså hvis værdi-
en fx er mindre end 0 så sæt farven rød og fonten fed. Der er et antal andre wizards som dækker bla. Java
objekter, indekser, sekvenser etc. jeg ikke skal gen-
Charts nemgå her, check dem selv ud.
En af de væsentligste ændringer i forbindelse med Det er nu muligt at uploade Java Klasser, Source eller
charts er, at der nu er mulighed for at lave et antal Ressource filer via Portal direkte i databasen.
forskellige 3D charts (bar, pie, line ). Disse laves ved
hjælp af en Java servlet. Til slut
Det er ikke alle elementer der er sket lige store foran- Portal 3.0 er virkelig omfattende og man kan mange
dringer på, men for alle typer af elementer at de er ting gennem denne, dog er der stadig ting der er
blevet mere ”lækre” at se på. både hurtigere og nemmere gennem fx svrmgrl,
SQL*Plus, Toad, OEM eller hvad man normalt
Databaseobjekter fortrækker, men har man ikke adgang til disse så er
Til databasebrugeren findes der et antal wizards til alt hvad man behøver en browser – hvad enten det
oprettelse af databaseobjekter, dette gør der også i er på Windows, UNIX, Mac - om man befinder sig
WebDB, men de er nu stærkt forbedret bla. er det på arbejde, hjemme eller Hawaii.

www.PythiaInformation.com

6 April 2001 OracleEkspert


TUNING DATABASE REORGANIZATIONS FOR MAXIMUM SPEED DBA

Teknisk Artikel
Heather Compher and Gil Asherie and Heather Compher (Quest Software)
Introduction highly dependent on system configuration. Consider
the following:
Today, several methods are available for performing • Generally, the degree of parallelism should not
database reorganization and restructuring. Among be set to more than twice the number of CPUs.
these methods, reorganization inside the database Doing so may cause high wait times, as the par-
using native SQL and PL/SQL scripts has proven allel query slaves compete for CPU time.2 If very
extremely fast and reliable. The speed of reorganiza- powerful CPUs are used, it may be advanta-
tion will vary by hardware platform and database con- geous to increase the degree of parallelism
figuration. beyond this level in some cases.3 In the case of
Oracle provides a number of options and parameters the highly CPU- intensive index creations, don’t
to achieve optimal reorganization speed in any envi- exceed the number of CPUs for the degree of
ronment. This paper reviews these settings and dis- parallelization.
cusses how to take advantage of them. • The degree of parallelism should not be far
greater than the degree of striping. Otherwise,
The areas covered include:
the disks may become saturated.4
• The UNRECOVERABLE Option
• When parallelizing index builds, consider the
• The Parallel Query Option (PQO) amount of memory available for the sorting pro-
• ALTER SESSION Parameters cesses.
• Other Considerations
To help you choose the most effective degree of par-
In conclusion, we offer a benchmark of a large scale allelism, use sar –u and sar –d or the TOP utility to
reorganization of an Oracle Applications database. monitor processor and disk I/O utilization.

The UNRECOVERABLE Option Tuning the Query Server Pool


The UNRECOVERABLE option allows Oracle to build The common set of parallel query servers available in
tables and indexes without writing to redo logs or roll- an instance is known as the Query Server Pool. To
back segments. According to leading Oracle experts, manage the Query Server Pool, tune the following
using UNRECOVERABLE can increase the perfor- init.ora parameters:
mance of table and index builds by 30 to 50 percent.1 • PARALLEL_MIN_SERVERS - This parameter
After reorganizing an object with the UNRECOVER- sets the number of query server processes that
ABLE option, a hot backup of the affected tablespace, are started when the instance starts, thus elimi-
is recommended to maintain compliance with stan- nating the performance penalties of frequent
dard backup and recovery policies. query server process startups and shutdowns
• PARALLEL_MAX_SERVERS – This parameter
The Parallel Query Option (PQO) sets the maximum size of the query server pool.
The recommended value is < 2 * max_degree *
The Parallel Query Option (PQO) is included at no
number_of_concurrent_users >.
charge with the Oracle Server. It is not related to or
dependent upon Oracle Parallel Server (OPS). PQO The number of parallel processes available must be
can be used to build tables and indexes in parallel. between PARALLEL_MIN_SERVERS and PARAL-
LEL_MAX_SERVERS
The Parallel Query Option (PQO) is strongly recom-
mended to increase the speed of reorganizations, To determine if there is any contention for parallel que-
provided adequate resources are available. If the sys- ry slaves, you can query V$PQ_SYSSTAT as follows:
tem’s CPUs and disk controllers are already heavily
select Statistic, Value from V$PQ_SYSSTAT
loaded, parallel execution will usually have an
order by Statistic;
adverse effect. Due to the complexity and resources
involved, avoid using PARALLEL on small objects. If the value for the statistic, “Servers Busy” is high,
Consider instead the UNRECOVERABLE option with increase PARALLEL_MAX_SERVERS.
PQO as serialized writes to the redo logs will
decrease the impact of parallelization, especially if the Extent Sizes and PQO
degree of parallelism is greater than four.
The number of parallel processes used will also effect
Select the degree of parallelism carefully. For tables, extent allocation. When creating tables or indexes in
if you choose a degree of parallelism of N, Oracle will parallel, each of the parallel query processes will allo-
try to use N + 1 processes. The extra process is a cate one of more extents, as determined by the
controller process known as the Query Coordinator. MINEXTENTS setting for the object. Each of these
For indexes, there will be two processes for each MINEXTENTS will be of size INITIAL. For example,
degree of parallelism: one for scanning the table and when creating a table with PARALLEL degree 4,
one for sorting the rows. Thus, if you choose a degree MINEXTENTS 2 and INITIAL 20 MB, each of the four
of index parallelism of N, Oracle will try to use 2N + 1 parallel processes will allocate an extent of 40 MB, for
processes to build the index. Each one of the N sort- a total 160 MB. Although the extents are coalesced at
ing processes may consume up to SORT_AREA_- the end of the operation, over-allocation is a concern.
SIZE of memory.
To take advantage of PQO while minimizing over-allo-
As expected, the optimal degree of parallelism will be cation, choose smaller extent sizes. The presence of

OracleEkspert April 2001 7


multiple of extents should not pose a problem. As RECT_WRITES when using the parallel query
explained in Oracle Paper #711, "the performance for option. Under Oracle8i, sorts always use direct
DML operations is largely independent of the number writes and automatically configure the number
of extents in the segment.".5 In fact, Paper #711 out- and size of the direct write buffers.8
lines a strategy for using multiple equally-sized
extents to eliminate free space fragmentation at the DB_FILE_MULTIBLOCK_READ_COUNT
tablespace level. DB_FILE_MULTIBLOCK_READ_COUNT controls
It is also possible to create “pockets’” of free space if the number of data blocks read for each read request
you specify more query servers than there are during a full table scan. If you are using LVM or strip-
datafiles in the tablespace. Oracle can only coalesce ing, this parameter should be set so that <DB_-
the free space in the last extent of a table or index in BLOCK_SIZE * DB_FILE_MULTIBLOCK_READ_-
each datafile. The pockets caused in extents other COUNT> is a multiple of the LVM stripe size. If you
than the last extent will only be available for subse- are not using LVM or striping, <DB_BLOCK_SIZE *
quent inserts into the affected object. DB_FILE_MULTIBLOCK_READ_COUNT> should
equal the maximum operating system read buffer. On
Lastly, remember to check for adequate contiguous many UNIX systems this is 64 KB. In any case,
free space for both tables and indexes. One of the DB_FILE_MULTIBLOCK_READ_COUNT cannot be
most common issues that sites face using PQO for larger than <DB_BLOCK_BUFFERS / 4>.
the first time is running out of space because they
under- estimated the requirement. The maximum read buffer is generally higher on raw
file systems. It varies from 64 KB (on AIX) to 128 KB
ALTER SESSION Parameters (on Solaris) to 1 MB (HP-UX). On a UNIX file system,
it is usually only possible to read one buffer per I/O,
A variety of session parameters can be tuned to usually 8KB. On 32-bit Windows, the buffer is 256KB.
improve the performance of a reorganization. These
settings include a variety of sorting parameters and This parameter will significantly increase the perfor-
the DB_MULTIBLOCK_READ_COUNT parameter. mance of a reorganization if properly tuned. For
Use the ALTER SESSION command to dynamically example, suppose the OS read buffer is 64 KB, the
set these parameters for the reorganizing session, database block size is 4 KB and DB_FILE_MULTI-
without affecting other users. The settings in the BLOCK_READ_COUNT is set to eight. During a full
INIT.ORA file are not affected. table scan, each I/O operation will read only 32 KB.
If DB_FILE_MULTIBLOCK_READ_COUNT is reset
Sorting Parameters to 16, performance will almost double because twice
Oracle provides several parameters that can be set as much data can be read by each I/O operation.
to speed up sort operations. These parameters can
significantly improve the performance of index reor- Other Considerations
ganization. Consider: When executing especially large reorganizations,
• SORT_AREA_SIZE – This parameter controls consider a few additional init.ora parameters. These
the maximum amount, in bytes, of memory for parameters cannot be altered dynamically for the ses-
each sort. If the sort area is too small, an exces- sion. As explained at the end of this section, ensure
sive amount of I/O will result. If sort area is too there is a tablespace of type TEMPORARY for sorting
large, the OS paging rate will be too high.6 It is (instead of PERMANENT).
especially important to consider this when using
a high degree of parallelism to build indexes, Asynchronous I/O and Multiple DBWRs
since that total amount of sort area used will be Use either asynchronous I/O or multiple database
[degree of parallelism * SORT_AREA_SIZE]. 1- writers (DBWRs) to minimize blocking the DBWR I/O.
2 MB is a good rule of thumb when using PQO. Oracle recommends using asynchronous I/O as
If not using parallelism, consider setting "more effective and efficient" than multiple DBWRs
SORT_AREA_SIZE to the size of the largest because "asynchronous I/O will perform parallel I/O
index being reorganized. across the disks, where multiple DBWRs only
• SORT_AREA_RETAINED_SIZE – This param- attempts to emulate this process."9 One exception is
eter controls the maximum amount, in bytes, of Sun files systems, where performance may improve
user global area memory retained after a sort run when async I/O is turned off and multiple DBWRs are
completes. Set to the same as SORT_AREA_- used instead. I/O slaves are new with Oracle8 and
SIZE if using parallel query. Otherwise, depend- replace multiple DBWRs; they are specialized pro-
ing on available memory, set to the same or one cesses whose only function is to perform I/O, and can
half of SORT_AREA_SIZE. Note that excess operate whether or not asynchronous I/O is available.
memory is not returned to the operating system.
With asynchronous I/O, use only one DBWR process.
• SORT_DIRECT_WRITES - Setting SORT_DI-
On many platforms, if Oracle finds asynchronous I/O
RECT_WRITES = true allows Oracle to bypass
enabled, it will only start one DBWR. Asynchronous
the buffer cache for the writing of sort runs to the
I/O is generally possible only on raw character devi-
temporary tablespace. This can improve the per-
ces, with the exception of Sun and AIX, where it is a-
formance by a factor of three or more. Be sure to
vailable for both file systems and raw devices.
also set SORT_WRITE_BUFFERS = 8 and
SORT_WRITE_BUFFER_SIZE = 65536.7 When asynchronous I/O is either not available or not
SORT_DIRECT_WRITES, SORT_WRITE_- desired, use multiple DBWR processes or, (in
BUFFERS and SORT_WRITE_BUFFER_SIZE Oracle8), a single DBWR process with multiple I/O
are obsoleted in 8.1.3. The same considerations slaves depending upon the platform. If using multiple
for SORT_AREA_SIZE apply to SORT_DI- DBWRs, try using 1-2 DBWR per disk or one per

8 December 2000 OracleEkspert


CPU. In Oracle7, set the DB_WRITERS parameters. tablespaces.
In Oracle8, DB_WRITER_PROCESSES replaces the
parameter DB_WRITERS and specifies the initial Methods and Parameters
number of database writer processes for an instance. First the new, optimally sized tablespaces were creat-
If you use DBWR_IO_SLAVES, only one database ed. Next SQL and PL/SQL scripts were built to reor-
writer process will be used, regardless of the setting ganize each existing data tablespace and its associ-
for DB_WRITER_PROCESSES. ated index tablespace into the new tablespaces.
The Oracle8 Tuning Guide for Sun recommends The tuning options used selected were:
states “DBWR_IO_SLAVES should only be set to • Parallel query with a degree of 4 was used for
greater than 0 if ASYNC I/O (that is, DISK_ASYNCH_- large tables and indexes.
IO, or TAPE_ASYNCH_IO) has been disabled, other- • UNRECOVERABLE was used for all objects.
wise DBWR will become a bottleneck. In this case, the
• The temp tablespace was converted to TEMPO-
optimal value on Solaris 2.x for DBWR_IO_SLAVES
RARY contents.
should be 4 four. In the case of LGWR_IO_SLAVES, it
is not recommended to deploy more than 9 nine sla- • SORT_AREA_SIZE and SORT_AREA_RE-
ves.“10 TAINED_SIZE were increased from their pro-
duction values to 60 MB and 30 MB respective-
The Importance of a TEMPORARY ly. SORT_DIRECT_WRITES was enabled.
Tablespace • DB_FILE_SIMULTANEOUS_WRITES was in-
creased from the production value to 64. The
The tablespace of type TEMPORARY is critical for
number of database block buffers was also in-
supporting index sorts that cannot be handled in
creased for the reorganization.
memory. Without adequate tablespace, however,. The
the index builds will be very slow. if adequate TEM- Results
PORARY tablespace is not available. To reduce tem-
porary segment lock allocation contention and to save As a result of these tuning efforts, the total time for the
the costs involved in temporary segment allocation reorganization was improved from an initial test run of
(equivalent to approximately ten insert/update/delete 69 hours to a final production run of 16 hours. This
statements), make sure that you have designated a equated to a reorganization rate of 13 GB/hour.
tablespace with TEMPORARY contents.11 Check the
‘contents’ field in DBA_TABLESPACES to view the Conclusions
status of your tablespaces. As illustrated in the benchmark above, reorganizations
In Oracle Applications, the temporary tablespace con- inside the database using SQL and PL/SQL scripts
tains permanent tables and has the status PERMA- can be extremely fast. Taking advantage of a few sim-
NENT. In order to change the status to TEMPORARY, ple Oracle parameters will help you achieve the opti-
you must move the permanent tables to another mal reorganization speed for your hardware environ-
tablespace. Another option is to create another ment.
tablespace of type TEMPORARY for the reorganiza-
tion.

Example of a Large Reorganization 1 Aronoff, Eyal; Loney, Kevin; and Sonawalla,


Noorali. Oracle8 Advanced Tuning and
This example shows how a large Oracle Applications Administration. Oracle Press, 1998. p. 482.
database was fully reorganized and restructured. 2 Alomari. Ahmed. Oracle and Unix Performance
Successful tuning contributed greatly to a high reor- Tuning. Prentice Hall, 1997. p. 212.
ganization speed.
3 Oracle Corporation, Doc Id 2071112.6, “How to
Environment Tune the Performance of the Parallel Query
Option,” p. 3.
The environment in which the reorganization was per-
formed was as follows: 4 Alomari. Op. cit. p. 482.
• Application: Oracle Applications 5 Himatsingka, Bhaskar and Loaiza, Juan. Paper
#711, “How to Stop Defragmenting and Start
• Server: HP-model running HP-UX 10.20, 12
Living: The Definitive Word on Fragmentation.”
CPUs, 3.4 GB Memory
Oracle Corporation.
• Disk Subsystem: EMC model 3930 (4 channels,
5 GB cache) with raw devices and asyn- 6 Oracle Corporation, Doc ID 2071112.6, “How to
chronous I/O Tune the Performance of the Parallel Query
Option,” p. 1.
• Database: Oracle 7.3.4
7 Aronoff et al. Op. cit.
• Data volume (tables + indexes) to be reorga-
nized: 208 GB 8 Oracle Corporation, Doc ID 102896.1, “Obsolete
and New Sort Parameters.”
Objective 9 Oracle Corporation, Doc ID 1059403.6, “Cannot
The objective of the full database reorganization was Start Multiple Database Writers, No Errors
to relocate all objects from an existing EMC disk array Reported.”
to a newer EMC array. In addition to providing much- 10 Oracle Corporation. Oracle8 Administrator’s
needed data defragmentation, this would allow the Reference Release 8.0.5 for Sun SPARC Solaris
site to take advantage of optimally sized datafiles and 2.x. Chapter 3.
more powerful disk technology. This complete Oracle 11 Aronoff et al. Op. cit. p. 486.
Applications implementation included about 3000
tables and over 6000 indexes, across 62 different

OracleEkspert December 2000 9


Fax eller send kuponen til:

Pythia Information
Kongensvej 3
2000 Frederiksberg

Fax: 26199991

ABONNEMENT Eller bestil via vores hjemmeside:

http://www.OracleEkspert.dk

Eller e-mail nedenstående oplysninger til:


Ja tak, jeg ønsker:
salg@OracleEkspert.dk

___ stk OracleEkspert nr 1 - DKK 125,00 pr stk ........................................DKK __________


___ stk OracleEkspert nr 2 - DKK 125,00 pr stk ........................................DKK __________
___ stk OracleEkspert nr 3 - DKK 125,00 pr stk ........................................DKK __________
___ stk OracleEkspert nr 4 - DKK 125,00 pr stk ........................................DKK __________
___ stk OracleEkspert nr 5 - DKK 125,00 pr stk ........................................DKK __________
___ stk OracleEkspert nr 6 - DKK 125,00 pr stk ........................................DKK __________

___ stk 1 års abonnement (6 numre) - DKK 600,00 pr stk........................DKK __________


Jeg vil gerne begynde abonnementet med OracleEkspert nr: _____

- 40% ved samtidig køb af minimum 5 blade eller abonnementer....................DKK __________


- 45% ved samtidig køb af minimum 10 blade eller abonnementer..................DKK __________
- 50% ved samtidig køb af minimum 20 blade eller abonnementer..................DKK __________
- 60% ved samtidig køb af minimum 50 blade eller abonnementer..................DKK __________

Bemærk: Når abonnementerne købes med mængderabat bliver alle blade


sendt i én samlet forsendelse. Det er altså ikke muligt at få bladene sendt
til individuelle modtagere.

Pris i alt ...........................................................................................................DKK __________

Priserne er excl moms.


Firma: ____________________________

Navn: ____________________________
Ved hver tegning
af minimum 1 års abon-
Adresse: ____________________________ nement på OracleEkspert
sender vi et stk signeret
Postnr/By: ____________________________ kvalitetskopi af Oraclerne til den
læser, som har refereret den nye
abonnent til os.
Land: ____________________________
Kopien er trykt på kraftigt papir og
E-mail: ____________________________ signeret med rød tush.

En OracleEkspert-læser er en person
med eget abonnement eller en per-
son ansat i et firma, som har tegnet
abonnement på OracleEkspert.
Refereret af: ____________________________ Man kan ikke referere et
abonnement til sig
Adresse: ____________________________ selv.

Postnr/By: ____________________________

Som referencegave ønskes en signeret kopi af Oraclerne fra OracleEkspert:

Nr 1 Det er fordi de ikke kan li’ fremmednøgler ......................................................... [ ]


Nr 2 Det er jo også vores Designer mand................................................................... [ ]
Nr 3 Har du prøvet at skifte din Where-clause ud med en Santa clause?............... [ ]
Nr 4 Pro*C....................................................................................................................... [ ]
Nr 5 No more table space................................................................................................[ ]

10 April 2001 OracleEkspert


SYSTEMDOKUMENTATION UDEN SMERTE Metode

Teknisk Artikel
Jan Ahlberg. jan.ahlberg@ag-informatik.dk, freelance-konsulent og indehaver af AG-infor-
matik.
Systemdokumentation er et emne, alle har en hold- 1) Den fortæller en ny programmør hvorfor sys-
ning til, måske lige med undtagelse af programmører. temet ser ud som det gør, dvs. hvad udgangs-
Hvor ofte hører man ikke om “selvdokumenterende punktet var, hvilken kode- og navnestandard, der
kode” og “hvordan er det nu man laver en kommen- anvendes, hvilke valg, der er truffet, hvilke forgæ-
tar?” osv. Men kære læser: hvis du ikke er sprunget fra ves forsøg, der eventuelt er gjort, og hvilke æn-
endnu, så er det vist på tide at du indrømmer, at emnet dringer der er lavet undervejs.
trods alt interesserer dig lidt? 2) Den giver en krydsreference mellem brugerens
verden (delsystemer, skærmbilleder, tastetryk,
Udgangspunkt udskrifter, beregninger), og programmørens ver-
En typisk opdeling af den fulde dokumentation for et den (fysisk datamodel og programenheder). Den
system er: viser således på en overskuelig måde, hvad der
f.eks. sker når en bruger tilføjer eller ændrer data
• Kravspecifikation. En systematisk opremsning af
i et skærmbillede, eller hvilke tabeller der (evt. via
de krav, der stilles til systemet
views og stored procedures) hentes oplysninger
• Systemspecifikation. En systematisk opremsning fra (eller ændres), når en rapport udskrives.
af hvordan de enkelte krav er implementeret -
med reference til moduler. Systemdokumentationen udarbejdes ofte udfra en
• Systemdokumentation. Her hopper kæden ofte Designer-model af systemet, hvilket efter min mening
af. Det er denne del af dokumentationen, der er giver mindst to problemer: Det er meget sjældent, at
emnet for denne artikel. systemer kan laves 100% med et Design værktøj. De
“bøjede søm”, der næsten altid må indsættes, ryger
• Modulbeskrivelser. Her gør de fleste EDB-folk
derfor ud af systemdokumentationen, og netop disse
som Bjarne Riis gjorde i sin berømte enkeltstart i
“bøjede søm” er vel vigtige at få med. Endvidere vil
Tour’en i 1997 - i øvrigt også i frustration over, at
systemdokumentationen altid være en forældet papir-
kæden hoppede af…
baseret beskrivelse af en model af systemet. Alt for
• Testplaner. En plan for aftestning af systemet. upræcis, og derfor værdiløs.
Beskriver test-cases og deres forventede resul-
tater. Løsningen
• Testlog. Testresultaterne.
• Installationsvejledning Og nu til løsningen. Opgave 1 består primært af statis-
ke oplysninger, der mest hensigtsmæssigt nedskrives
• Brugerdokumentation.
i tekst-dokumenter. Det vigtige her er selvfølgelig ad-
I stort set alle de projekter, jeg har været involveret i, gangen til opdaterede udgaver. Sådan noget sidder
har det enten været uklart hvad systemdokumenta- altså ikke mapper; de ligger på intranettet. Historikken
tionen skal indeholde, og ikke mindst hvad den skal for de enkelte moduler bør selvfølgelig følge modulet,
bruges til, eller også har kravene til systemdokumen- hvilket heldigvis også er almindelig praksis.
tationen efter min mening skudt forkert. Lad mig derfor
Opgave 2 - at danne en krydsreference mellem bruge-
starte med Loven om bogføring, der stiller krav til doku-
rens verden og programmørens verden råber efter min
mentation af systemer, der anvendes til bogføring:
mening på en drastisk beslutning, der heldigvis er ble-
“Beskrivelsen skal være så fyldestgørende, at det er vet nemmere at tage på det seneste: læg alle dine mo-
muligt for en person udefra – med en rimelig viden om duler (skærmbilleder, rapporter, beregninger osv.) i da-
regnskab og den anvendte teknologi – til enhver tid at tabasen i form af Stored Procedures og Packages. Om
følge, hvorledes registreringerne foretages, og hvorle- du bruger PL/SQL eller Java, er i denne forbindelse li-
des regnskabsmaterialet fremfindes og eventuelt ud- gegyldigt. Læg lige mærke til en lille detalje. Jeg anbe-
skrives i klarskrift.” faler dig at droppe Forms, Reports, og diverse
Efter min mening bør man også stille krav om at ”.exe”–løsninger og i stedet lave skærmbilleder og rap-
dokumentationen skal kunne gøre den omtalte person porter med Stored procedures. Udviklingen går allige-
i stand til at vedligeholde og videreudvikle systemet. vel mod browser-baserede løsninger, og tanken om
f.eks. at bruge Forms og Reports til at danne HTML-
Denne definition er mit bud på en god systemdoku- kode synes jeg ærligt talt er en anelse ulogisk. Er du i
mentation. Den skal med andre ord kunne fungere øvrigt klar over, hvad værktøjer som Forms og Reports
som sikkerhedsnet, hvis de mennesker, der har koster?
udviklet systemet, pludselig ikke er til rådighed.
Hvis du ellers er med endnu, har du nu fået brugerens
En god systemdokumentation verden ned i programmørens verden (“ned” er mulig-
vis ikke den rigtige betegnelse her) nemlig i databa-
Så langt så godt. En god systemdokumentation er alt- sen.
så ikke en enorm mængde af forældede papirudskrif-
Du skal nu forestille dig et værktøj, der ligner EXPLAIN
ter af tabel-layout og slavisk gennemgang af Forms-
PLAN, dvs. kan benyttes med en kommando fra
blokke og felter, som ingen gider at læse. Den er heller
SQL*Plus, til at give overskuelig oversigt over relation-
ikke en masse kommentarer i programmerne, der for-
er – afhængigheder - mellem programenheder og data
tæller at “nu hentes kundens navn ind i variabel x…”
i systemet. Ligesom EXPLAIN PLAN benytter PLAN_-
En god systemdokumentation løser efter min mening TABLE, kunne denne kommando f.eks. oprette rela-
to opgaver: tionerne i tabellen, der er defineret i Figur 1.

OracleEkspert April 2001 11


og PAC_FORM1 (AG ejer alle objekterne i eksemplet)
create table doc_dependencies( fås resultatet, der er vist i Figur 4.
owner varchar2(30),
name varchar2(64), Der er naturligvis mange andre anvendelser. Man kan
type varchar2(12), f.eks. gå ”bagud” i relationerne, hvis man er interesse-
element varchar2(30), ret i at vide, hvor i systemet der indsættes data i tabel
referenced_owner varchar2(30), T1.
referenced_name varchar2(64),
referenced_type varchar2(12), Du vil naturligvis nu gerne vide, hvordan data i tabel
referenced_element varchar2(30) doc_dependencies bliver beregnet. Det vil nok føre for
) vidt at liste hele koden her, men det kan nævnes at al-
Figur 1. Tabel til registrering af relationer goritmen benytter ALL_DEPENDENCIES til at fremfin-
mellem objekter i systemet. de afhængigheder, samt ALL_SOURCE og ALL_-
TRIGGERS til at underopdele dem. Hvis du ikke lige
”har tid” til at gå i dybden med beregningen, kan
Ideen er, at hvis en procedure P1 i package SCOTT.- programmet købes hos AG-informatik for et beskedent
PAC_A indsætter data i tabel SCOTT.T1 indsættes en beløb…
record i doc_dependencies med værdierne (‘SCOTT’, Du vil måske også spørge: ”Jamen, sådan en skaldet
’PAC_A’, ’PACKAGE BODY’, ’P1’, ’SCOTT’, ’T1’, kommando kan vel ikke gøre det ud for en systemdo-
’TABLE’, ’INSERT’). Procedure P1 i PAC_A står altså I kumentation?”, og svaret er: Naturligvis ikke, men fore-
relation til INSERT i tabel T1. Hvis T1 har en (eller flere) stil dig at du nu danner et par tabeller til at inddele sy-
INSERT-triggere, tilføjes disse som refereret af stemet i delsystemer, og knytte objekter til de enkelte
INSERT/T1 osv. delsystemer, og derefter laver et lille (browser-baseret)
Relationen mellem objekterne er transitiv: hvis et system, som gør brugeren (den nye programmør) i
objekt A står i relation til – afhænger af - et objekt B og stand til at ”klikke” sig til detaljerede oplysninger om
B står i relation til C, så kan man også sige at A står i datamodellen og indbyrdes afhængigheder, så er du
relation til C. Man kan altså bruge CONNECT BY til at efter min mening ”hjemme i varmen”. Hvis du derefter
finde alle afhængigheder, der udgår fra et objekt. En indfører en standard for hvordan modulbeskrivelser er
sådan oversigt over afhængigheder i flere niveauer opbygget som en del af kildeteksten i procedurer, funk-
kan man jo vælge at kalde en ”dependency plan”. tioner, pakker, triggere og views, således at disse
beskrivelser kan fremvises automatisk, tjah, så kan du
SQL*Plus-script’et i Figur 2 kan benyttes til at udskrive
lade den papirbaserede systemdokumentation stå i
en ”dependency plan” for et objekt. Nu har jeg jo lige
regnskoven.
anbefalet, at lægge alle programmoduler ned i
databasen, så naturligvis vil det være en god idé, at
Konklusion
omdanne scriptet til en stored procedure. Den kan
benytte dbms_output til at skrive på skærmen, eller Jeg håber, at du nu er enig med mig i følgende:
htp.p til at skrive til en browser. 1) Systemdokumentationen et værktøj for en ny
Følgende lille (lidt ”tænkte”) eksempel (Figur 3) kan programmør, der skal videreudvikle og/eller
bruges til at illustrere anvendelsen (og ikke til andet!). vedligeholde et system. Den sikrer således sy-
stemets overlevelse, hvis de personer, der har
Kører man nu SQL*Plus-scriptet med parametrene AG lavet det, ikke længere er til rådighed.

REM **********************************************
Rem dep.sql: Dependency-plan for et object.
Rem
Rem Parametre:
Rem 1: objektets ejer
Rem 2: objektets navn
REM **********************************************
set feedb off ver off scan on pages 500
truncate table doc_dependencies;
Rem Beregn afhængigheder:
execute pac_doc.dependency(upper('&1'),upper('&2'));

select rpad(' ',level+1,' ')


||type
||' '||owner
||'.'||name
||'('||element||') -> '
||referenced_type
||' '||referenced_owner
||'.'||referenced_name
||'('||referenced_element||')'
dependency
from doc_dependencies
start with owner = upper('&1')
and name=upper('&2')
connect by owner = prior referenced_owner
and name = prior referenced_name
and element = prior referenced_element
/
Figur 2. SQL-Script, der danner "dependency plan”

12 April 2001 OracleEkspert


Create table t1(c1 varchar2(30),c2 number,c3 date) ;
Create table t2(c1 number,c2 number) ;
Create or Replace view v1 As
Select t1.c1 vc1,t2.c2 vc2 from t1 , t2 where t1.c2 = t2.c2;
Create or Replace trigger trg_t1_bi before Insert on t1
for each row
Begin Insert into t2 (c1,c2) values(1,2) ; End ;
/
Create or Replace trigger trg_t1_bu before Update on t1
for each row
Begin Insert into t2 (c1,c2) values(1,:old.c2) ; End ;
/
Create or Replace trigger trg_v1_xi
Instead of Insert on v1
Begin Update t2 set c2 = 0; End;
/
Create or Replace Package pac_form1 As
Procedure startup ;
End pac_form1 ;
/
Create or Replace Package Body pac_form1 As
rec t1%rowtype ;
Procedure startup Is
Begin
null ; -- brug fantasien!
End ;
procedure sel Is
cursor cur1 Is
Select * from v1 order by 1;
Begin
For row1 in cur1 Loop
null;
End Loop;
End;
Procedure upd Is
Begin Update t1 set c1 = rec.c1 Where c2 = 1 ; End ;
Procedure ins Is
Begin Insert into t1 (c1,c2,c3) values(rec.c1,rec.c2,rec.c3) ;End ;
Procedure del Is
Begin delete from t1 where c1 = rec.c1 ; End ;
Procedure calc Is
Begin insert into v1 (vc1, vc2 ) values('abc',2) ; End ;
End pac_form1 ;
/
Figur 3. Et lille eksempel til at "analysere" på.

2) Programmøren har brug for at kende systemets analysere sammenhænge mellem brugerens
historie og standarder, og for at kunne danne en handlinger og den fysiske datamodel, hvilket er en
krydsreference mellem brugerens verden og det meget vigtig forudsætning for at kunne overskue
system, der rent faktisk er installeret i produktion og vedligeholde et system.
på det tidspunkt han/hun skal bruge oplysninger-
ne.
3) Ved at lægge alle programenheder (Forms,
Reports og beregninger) i databasen får man di-
rekte adgang til at danne krydsreferencer ved at

Dependency plan for ag.pac_form1


--------------------------------------------------------------------------------
PACKAGE BODY AG.PAC_FORM1(UPD) -> TABLE AG.T1(UPDATE)
TABLE AG.T1(UPDATE) -> TRIGGER AG.TRG_T1_BU(before update for each row)
TRIGGER AG.TRG_T1_BU(before update for each row) -> TABLE AG.T2(INSERT)
PACKAGE BODY AG.PAC_FORM1(INS) -> TABLE AG.T1(INSERT)
TABLE AG.T1(INSERT) -> TRIGGER AG.TRG_T1_BI(before insert for each row)
TRIGGER AG.TRG_T1_BI(before insert for each row) -> TABLE AG.T2(INSERT)
PACKAGE BODY AG.PAC_FORM1(SEL) -> VIEW AG.V1(SELECT)
VIEW AG.V1(SELECT) -> TABLE AG.T1(SELECT)
VIEW AG.V1(SELECT) -> TABLE AG.T2(SELECT)
PACKAGE BODY AG.PAC_FORM1(CALC) -> VIEW AG.V1(INSERT)
VIEW AG.V1(INSERT) -> TRIGGER AG.TRG_V1_XI(instead of insert)
TRIGGER AG.TRG_V1_XI(instead of insert) -> TABLE AG.T2(UPDATE)
PACKAGE BODY AG.PAC_FORM1(INS) -> TABLE AG.T1(INSERT)
TABLE AG.T1(INSERT) -> TRIGGER AG.TRG_T1_BI(before insert for each row)
TRIGGER AG.TRG_T1_BI(before insert for each row) -> TABLE AG.T2(INSERT)
Figur 4. Dependency plan for Package PAC_Form1 fra Figur 3.

OracleEkspert April 2001 13


Svar
Skriv til: Svar@OracleEkspert.dk

SKRIV EN ARTIKEL

Vi betaler dig 700 kr pr side for artikler, som


trykkes i OracleEkspert (400 kr pr side for
engelsksprogede artikler).
Denne rubrik er åben for alle spørgsmål, forslag
Du kan også komme til at vinde OracleEkspert-
og tilkendegivelser om Oracle eller Oracle-
Ekspert, hvad enten de er tekniske eller mere
prisen, som i december-nummeret uddeles til
strategiske. forfatteren af årets bedste artikel.
Indlæg kan godt være anonyme, men redak- Deadline for artikler til OracleEkspert nr 6 (juni
tionen skal vide, hvem der har skrevet dem. 2001) er fredag den 11. maj 2001.
Oracle Danmark Support og Metalink tilbyder, at Har du lavet noget genialt, som kunne have in-
besvare de tekniske spørgsmål. teresse for andre Oracle-udviklere, ledere, plan-
læggere mv, så skriv en artikel til OracleEkspert.

Sådan gør du:


SYSTEMUDVIKLER Aflever et oplæg på ca 200 ord via vores hjem-
IT-funktionen i Novo Nordisk Engineering A/S meside:
søger en medarbejder til Oracle systemudvik-
lingsgruppen. www.OracleEkspert.dk
Jobbet: Når oplæget er godkendt af redaktionen, kan
Jobbet omfatter opgaver indenfor nyudvikling af
du skrive selve artiklen.
Oracle baserede administrative systemer og ved-
ligeholdelse af allerede eksisterende Oracle-løs- Du kan hente en template på vores hjemmeside.
ninger. Jobbet kræver på den ene side, at du er i
Artiklen skal også godkendes af redaktionen.
stand til at indgå i en proaktiv dialog med system-
brugerne om krav til funktionalitet, og på den Dette sker ud fra kriterier om seriøsitet, relevans
anden side at du er i stand til at omsætte disse og teknisk niveau.
kravspecifikationer til forretningsorienterede, bru- Artiklerne skal henvende sig til erfarne Oracle-
gervenlige og veldokumenterede systemløsning-
er. Herudover skal du være parat til at indgå i eks- folk. Emnet skal blot være relateret til Oracle.
terne Oracle-opgaver udenfor afdelingen. Den normale størrelse af en artikel er 3-6 sider.
Til programudviklingen anvendes Designer og De- Hvis din artikel falder udenfor denne størrelse,
veloper. De sidste to år er nyudvikling primært bør du gøre os opmærksom på det, inden du be-
sket til Web.
gynder at skrive den.
Kvalifikationer:
• Datalog/civilingeniør el. lign.
• Flair for både systemdesign og programmer- Tips:
ing
• Nogle års erfaring med Oracle-udviklings- Tips, som trykkes i OracleEkspert, belønnes
værktøjer
Du er både udadvendt og serviceminded. Du skal med en flaske Leoville Barton 1997 Grand Cru til
være i besiddelse af gode samarbejdsevner samt en værdi af ca DKK 400.
en god portion selvstændighed. Samtidig skal du
være en god blanding af den skarpsindige analy-
tiker og konsulent, der har god situationsfornem-
melse og kan kommunikere med alle. Annoncepriserne er fra
Passer profilen på dig, så har vi jobbet med gode
muligheder for personlig og faglig udvikling i et å-
bent og spændende arbejdsmiljø med stor frihed
og udfoldelsesmuligheder.
år 2001 sat ned med
Hvis du vil høre nærmere om jobbet, kontakt da
Marc de Oliveira på e-mail mhyo@nne.dk eller
telefon 44447777.
Skriftlig ansøgning mærket “Oracle.1125”
bedes venligst sendt til Novo Nordisk Engi-
20%
neering A/S, Personaleafdelingen, Krogs-
højvej 55, 2880 Bagsværd.
Nærmeste overordnede er Jesper Kjærulff, lokal Se priserne på
26716.
Sagen behandles i Personaleafdelingen af Lone
Thræn, lokal 23977.
www.OracleEkspert.dk
14 April 2001 OracleEkspert
SPATIAL OG PL/SQL Tools

Teknisk Artikel
Peter Sørensen, Miracle A/S. Peter er Oracle Certified Professional, og har arbejdet
med GIS og systemudvikling i 15 år, de seneste 6 år med anvendelse af Oracle’s
værktøjer. Peter kan kontaktes på pso@MiracleAS.dk
Hvad er Spatial egentlig? (sdo_gtype
sdo_srid
NUMBER,
NUMBER,
MEGET kort fortalt, så er det en option i Oracle, der sdo_point SDO_POINT_TYPE,
sdo_elem_info SDO_ELEM_INFO_ARRAY,
muliggør lagring og behandling af positionsbestemte
sdo_ordinates SDO_ORDINATE_ARRAY);
data. Groft sagt kan spatial opdeles i fire komponen-
ter:
Hvor SDO_POINT_TYPE, SDO_ELEM_INFO_ARRAY og
• En samling typedefinitioner der anvendes til
SDO_ORDINATE_ARRAY er defineret som:
lagring af data (under MDSYS schemaet)
• Adskillige funktioner og operatorer til fremsøgn-
CREATE TYPE mdsys.sdo_point_type AS OBJECT
ing og manipulation af data. (x NUMBER,
• Indekseringsmetoder. y NUMBER,
• Diverse administrative værktøjer. z NUMBER);

De tre sidstnævnte punkter skal vi ikke komme CREATE TYPE mdsys.sdo_elem_info_array AS


nærmere ind på her, men det betyder dog ikke, at de VARRAY(1048576) OF NUMBER;
er uvæsentlige eller uinteressante – f.eks. vil teorien
bag indekseringsmetoderne bringe mundvandet frem CREATE TYPE mdsys.sdo_ordinate_array AS
hos mangen en gråskægget matematiker… VARRAY(1048576) OF NUMBER;
Eller illustreret på figur 1.
Overblik • SDO_GTYPE er geometriens type, f.eks indiker-
Som nævnt, så kan man i ’Oracle Spatial User's er 1, at det er et punkt, 3 betyder ’polygon’, osv.
Guide and Reference’ finde omhyggelige eksempler • SDO_SRID indikerer hvilket koordinatsystem
på hvorledes man kan indlæse data i spatial objekter, der anvendes (Indført i Oracle 8.1.7)
både vha. SQL*Loader, og i ’Rene’ SQL insert’s. Men • SDO_POINT indeholder koordinaterne, hvis der
der er faktisk ikke umiddelbart nogen gode eksempler er tale om en enkelt-punkt
at hente, hvis man ønsker at opbygge sine objekter • SDO_ELEM_INFO fortæller hvorledes
fra grunden i PL/SQL. SDO_ORDINATES skal tolkes.
- Det vil jeg forsøge at råde bod på her… • SDO_ORDINATES indeholder (ko)ordinater for
objektet.
Typedefinition
(Dette skal IKKE betragtes som en fyldestgørende
Og hvad er så et spatial-objekt ? beskrivelse; snarere som en opsummering af doku-
Ja, man kan jo starte med at formulere det på et mentationen…)
sprog, alle kan forstå: Skulle nogen undre sig over de kryptiske navne
MDSYS og SDO, skyldes det historiske årsager; i
CREATE TYPE mdsys.sdo_geometry AS OBJECT Oracle 7.3 hed produktet ’MultiDimensional System’, i

Figur 1. Typedefinition

OracleEkspert April 2001 15


8.0 hed det ’Spatial Data Option’, og 8.1 altså blot VALUES (3002,triangle);
’Spatial’. Lad os håbe at det ikke skifter navn atter Bemærk måden, hvorpå geometri-objektet sammen-
engang! J sættes af sine delkomponenter.

SQL-Insert En lidt mere generisk funktion


Som sagt, er det let at finde eksempler på hvordan Lad os straks lave en funktion, der kan lave en
man opretter et objekt vha. SQL. ’mange-kant’, centreret i punktet (x,y) med n kanter,
og radius r. (Her er det, man begynder at savne sin
Lad os prøve at ’tegne’ en trekant:
gamle matematiklærer)
INSERT INTO test81 (gid, geometry)
CREATE OR REPLACE FUNCTION equi_polygon (
VALUES (
p_x IN NUMBER,
3000,
p_y IN NUMBER,
MDSYS.SDO_GEOMETRY(
p_n IN PLS_INTEGER,
3, -- Enkel polygon
p_r IN NUMBER)
NULL, -- Intet specifikt koord. system
NULL, -- Ikke noget enkeltpunkt
RETURN mdsys.sdo_geometry
MDSYS.SDO_ELEM_INFO_ARRAY(1,3,1)
IS
-- Objektet består af een polygon
gtype NUMBER;
MDSYS.SDO_ORDINATE_ARRAY(
srid NUMBER;
1,2, 3,4, 5,1, 1,2)
point MDSYS.SDO_POINT_TYPE;
--..med tre punkter
elem_info MDSYS.SDO_ELEM_INFO_ARRAY;
-- (1. og 4. er ens)
ordinates MDSYS.SDO_ORDINATE_ARRAY;
)
);
i PLS_INTEGER;
resultatet fremgår af figur 2. pi CONSTANT NUMBER:= 3.141592653589793238;

PL/SQL Funktion BEGIN


gtype:= 3;
Og nu, den tilsvarende øvelse i PL/SQL: srid:= NULL;
point:= NULL;
CREATE OR REPLACE FUNCTION triangle elem_info:=
RETURN mdsys.sdo_geometry mdsys.sdo_elem_info_array(1,3,1);
IS
gtype NUMBER; -- bemærk !!
srid NUMBER; ordinates:=
point MDSYS.SDO_POINT_TYPE; mdsys.sdo_ordinate_array(NULL);
elem_info MDSYS.SDO_ELEM_INFO_ARRAY; ordinates.extend(2*p_n + 1);
ordinates MDSYS.SDO_ORDINATE_ARRAY;
BEGIN FOR i IN 0..p_n LOOP
gtype:= 3; ordinates(2*i+1):=
srid:= NULL; p_x + COS(i*(2*pi)/p_n)*p_r;
point:= NULL; ordinates(2*i+2):=
elem_info:= p_y – SIN(i*(2*pi)/p_n)*p_r;
mdsys.sdo_elem_info_array(1,3,1); END LOOP;
ordinates:=
mdsys.sdo_ordinate_array(1,2, 3,4, RETURN mdsys.sdo_geometry(gtype,
5,1, 1,2); srid,
RETURN mdsys.sdo_geometry(gtype, point,
srid, elem_info,
point, ordinates);
elem_info, END;
ordinates);
END;
Bemærk hvorledes man både skal initialisere og
extend’e et VARRAY.
INSERT INTO test81 (gid, geometry) Og nu kan vi så f.eks lave en trekant, en femkant og
et par nikanter:

INSERT INTO test81 (gid, geometry)


VALUES (3003,equi_polygon(1.0 ,1.0 ,3,
0.5));

INSERT INTO test81 (gid, geometry)


VALUES (3004,equi_polygon(1.5, 4.0 ,5,
1.0));

INSERT INTO test81 (gid, geometry)


VALUES (3005,equi_polygon(4.0, 4.0, 9
,0.5));

INSERT INTO test81 (gid, geometry)


VALUES (3006,equi_polygon(4.0 ,4.0, 9,
1.0));

Figur 2. Eet stk trekant.

16 April 2001 OracleEkspert


Prøv selv !
Skulle nogen have lyst til at eksperimentere lidt på
egen hånd, er her lidt starthjælp:
• Spatial er en del af Enterprise Edition, og følger
med, hvis man vælger standard-installationen.
• Der kræves ikke nogen specielle rettigheder for
brugeren; selv Scott/Tiger burde kunne bruge
Spatial.
• Under ORAHOME\md\demo\examples finder
man EGINSERT.SQL, der opretter nogle testda-
ta i tabellen TEST81. I headeren ser man også
hvorledes tabellen oprettes, og hvordan man
opretter metadata (som er nødvendige for at
kunne indeksere data, og benytte de ind-
byggede Spatial-funktioner)
• For at skabe et overblik, er der nogle glimrende
Figur 3. Polygoner ad libitum whitepapers på http://technet.oracle.com/-
products/spatial
Afrunding • Læs dokumentationen! – ”Oracle Spatial User's
Nu er det jo selvfølgelig begrænset, hvor stort behovet Guide and Reference” er faktisk ikke så ringe
er for at fylde sine tabeller med trekanter og nikanter, endda…
men formålet med denne lille øvelse er da også blot • Glem alt om at bruge Oracle Designer i denne
at vise, at der ikke er den store mystik forbundet med sammenhæng; den understøtter ikke Spatial.
datastrukturen i spatial-verdenen. Hermed er IKKE • Man får ret hurtigt trang til at visualisere sine
sagt, at Spatial ikke er et kompliceret koncept; vi er data. Til det formål findes der et glimrende lille
sprunget let hen over indeksering, søgning, meta-data tool der hedder ”Spatial Index Advisor”, som nor-
tabeller, polygoner med huller, sammensatte objekt- malt findes på ORAHOME\bin\oemapp.exe. Det
typer, n-dimensionelle koordinatsystemer osv. For slet er egentlig, – som navnet antyder – beregnet på
ikke at tale om de nye 8.1.7 features; R-Træer, trans- at hjælpe med at generere indexes, men kan
formation af koordinatsystemer, linear referencing altså også vise data rent grafisk.
m.m….

Figur 4. Spatial Index Advisor

OracleEkspert April 2001 17


16. marts 2001 men har endnu ikke selv set dem i Computere til 19 skoler i San

Nyheder
Ellison nærmer sig Gates detaljer. Francisco gennem ”Oracle Help
Ellison bliver også anklaget for at Us.” programmet.
30. januar var Bill Gates formue på
USD 54.4 mia, hvilket er et fald på have solg aktier til en værdi af 895
38.3 mia siden sidste år. I samme mill dollars i januar, hvilket indbragte 21. februar 2001
periode er Larry Ellisons formue ham 50% mere end hvad aktierne
faldt til efter at Oracle annoncerede Oracle opretter ny division:
faldet til 42.1 mia (altså kun med Oracle.com
38.2 mia). at salget ville gå langsommere end
først antaget. Den nye division vil tages sig af sal-
get af software services, mens
15. marts 2001 Oracle tager sig af software. Dette
7. marts 2001 skridt svarer lidt til Microsofts .NET.
Oracle regnskab for 3. kvartal
Nr 1 til applikationsudvikling
Oracle annoncerede i dag en net-
toindtægt på USD 583 mill svarende International Data Corporation 21. februar 2001
til 10 cent pr aktie. Dette er en stign- (IDC), rapporterer at Oracle sidder
på 16% af markedet for applika- Ellison afviser rygter om Clinton
ing på 16% ift 3. kavartal sidste år,
som gav en nettoindtægt på 503 mill tionsudvikling og deployment vok- Under sin tale ved AppsWorld
svarende til 8 cent pr aktie. sende med 18.4% om året. Denne afviste Larry Ellison rygterne om at
vækst er næsten dobbelt så stor Bill Clinton var på vej til at indgå i
1. marts advarede Oracle markedet som IBMs og tre gange så stor som Oracle-direktionen. Han lagde dog
om at indtægterne ville blive 10 cent Microsoft. ikke skjul på at han har stor respect
pr aktie frem for de 12 cent, som for Clinton, som den 19. februar
analytikkere havde forventet. holdt en key-note tale ved konferen-
5. marts 2001 cens åbning.
13. marts 2001 Sybase går til angreb på Oracle Ellison kritiserede desuden IBM for
og Microsoft at opfordre virksomheder til at købe
Oracle vinder XML-Journal
Readers’ Choice Award 2000 Sybase hævder at version 2 af software fra mange leverandører for
Sybase Business Portal kan inte- derefter at hyre dem til at integrere
I kategorien ”Best XML Developing grere firmaers interne applikationer dem. I stedet bør man købe en kom-
Tool” vandt JDeveloper. I kategorien og give muligheden for at lade dem plet integreret system som feks E-
”Best Database Produkt” vandt række ud på internettet og integrere business Suite.
Oracle 8i. I kategorien ”Best Book” med forretningspartnere.
vandt XML Handbook fra Oracle
Press. Også Oracles XML-parsere 13. februar 2001
blev kåret som nummer 1. 2. marts 2001 Oracle sparer 3 mia på 3 år
Oracle-aktier falder 20% Oracle annoncerer at efter at have
9. marts 2001 Fredag faldt Oracles aktier 20% til nedbragt deres omkostninger med
Anklage mod Oracle og Ellison 16 7/8 efter at Oracle havde annon- USD 1 mia på 1 år er de nu på vej til
ceret at målene for 1. kvartal ikke at spare 2 mia på 2 år og 3 mia på 3
Den 8. marts sagsøgte San Diego ville blive nået. Dette er det lavest år ved at implementere deres eget
advokatfirmaet Milberg Weiss Ber- niveau de har været på siden slut- e-business software i virksomhe-
shad Hynes & Lerach Oracle og ningen af 1999. den.
Larry Ellison for at have overdrevet
sine salgsprognoser, samt at Ora- Af de 104 tekniske virksomheder,
cles påstand om at firmaet har spar- som har offentliggjort prognoser for 6. februar 2001
ret 1 mia dollars ved at implemente- 1. kvartal har 73% været negatve.
1 mill download af iAS 9i
re sin egen e-business software er
forkerte. Advokatfirmaet mener, at Oracle rapporterer at 1 mill nu har
26. februar 2001 download’et iAS fra OTN siden juni
besparrelserne kom fra fyrringer i
stedet. Oracle giver computere til skoler 2000.
Oracle selv har afvist anklagerne, Oracle donerer i dag 950 Internet

18 April 2001 OracleEkspert


DBA
UDNYT DIN REDOLOG INFORMATION
Præsentation Carl Bruhn crb@ehuset.com. Ansat gennem 13 år i eHuset som systemkonsulent.
Hard core specialist i database administration/konfiguration og tuning. OCP-er.
Indledning Sqlplus/svrmgrl. Setupet kan også bruges mod
Oracle 8 databaser, men kræver at man installerer
I forbindelse med brug af Oracle databasen kan man pakker og view fra 8i i sin Oracle 8 database.
som systemadminstrator komme i forskellige situa-
I modsætning til Logminer er værktøjet LogAnalyzer
tioner, hvor man kunne tænke sig at vide præcis,
for Oracle fra Computer Associates et værktøj, der
hvilke transaktioner der er foretaget i ens database.
behandler redolog filer fra version 7.X og fremad.
Sjovt nok har den information siden Oracle v6 dage
Værktøjet er begrænset til Unix operativsystemet
altid ligget i ens redolog filer, men at få et læsbart ind-
(Solaris, IBM AIX og HP-UX), og er kommandolinie
hold ud af dem, har nu aldrig været for nybegyndere.
orienteret.
Et typisk eksempel fremgår af Figur 1.
LogAnalyzer virker ved at benytte en kommandofil
^@^@cM-^P^H^P^@^@^H^P^@^@M!^^PRMAN^@^@ som input. I denne kommandofil specificeres:
^@^@^@^@^CH^@^G-^@^@^@^B^@^@^D^@^B^@^@ • Hvilken database man vil forbinde sig til for at få
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
oversat objektnumre til læsbar information.
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
Thread 0001, Seq# 0000000258, SCN 0x00 • Hvilke begrænsninger man vil lægge vedrøren-
000002933c-0x000000029351^@^@^@^@^]^XKP de sit output.
P^@^@^@^A^@^@^@^@^@^@^@^E^@^A^@^@^@^BM- Typiske eksempler er start/slut tider for transak-
^S<^@^@^@^@^Y?IZ^@^BM-^SQ^@^@^@^@^Y?KZ tioner, og SCN-er.
^@^@^@^@^@^@^@^A^@^@^@^@^XKPa^@^BM-^SK
^@^@^@^@^Y?JÖ^H^@^@^@^@^@^@^@^@^@^@^@^@
• Hvilken logfil der skal læses i.
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ Dette kan enten være den aktive redolog, en el-
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ler flere arkiverede logfiler, eller en kombination.
^@^@^@^@^@^@^@^@^@^@^ • Hvilken type output man ønsker.
Figur 1. Eksempel på indhold af redolog. Her kan vælges mellem rapporter og sql-scripts.
Som nævnt forbinder LogAnalyzer sig til den databa-
Nogle af de situationer man kunne tænke sig at se, hvorfra redologene er dannet. Dette gøres for at
benytte informationen til er: oversætte redologenes objektnumre til tabeller. Som
• Revisionen vil gerne vide, hvem der ændrede det vil vides af dem der har prøvet en LogMiner ses-
data i kundetabellen fredag XX/XX sidste år. sion, er det også nødvendigt at lave en oversættelse
når LogMiner benyttes. Det gøres ved at oprette en
• Du har modtaget en opdatering af din applikation
Dictionary File i LogMiner, men er ikke nødvendigt i
og nu klager dine brugere over at opdateringer
LogAnalyzer, da denne forbinder sig direkte til
og indsættelse af nye rækker foregår med sneg-
databasen for at oversætte interne numre.
lefart. Er der sket ændringer i hvordan disse
transaktioner foregår efter opdateringen? Logminer vil uden en Dictionary file vise ting i stil med:
• Din kære chef kom i går, ved en beklagelig fejlt-
insert into Object#2581(col#1, col#2)
aglese, til at slette nogle vigtige rækker i kun- values (hextoraw('4a6f686e20446f65'),
detabellen. Kunne du ikke lige hente dem ind hextoraw('c306'));"
igen fra backupen, og have det klar til kl 12?.
I stedet for :
• Du har et testmiljø, der i videst mulige omfang
gerne skulle afspejle datamængden i dit produk- INSERT INTO emp(name, salary)
tionsmiljø. Hvordan flytter du nemt dagens VALUES ('John Doe', 50000);
transaktioner fra produktion til test?
Dette betyder naturligvis også at man ikke kan få
• Du står overfor den årlige oprydning i applikatio-
information fra gamle logfiler, hvis man i mellemtiden
nens tabeller. Bortset fra den almindelige back-
har droppet og genoprettet objektet, idet det så vil
up, kunne det vel være meget rart med et script,
have et nyt objektid. Man vil tværtimod få misvisende
der kunne rulle oprydningen tilbage hvis nu …..
information, hvis der skulle forefindes et andet objekt
• Under en recover af databasen viser det sig, at med det gamle objektid, men det skyldes den måde
en af de arkiverede redolog filer er lettere korum- objektet identificeres på i redologen og er ikke en
peret. Hvordan hiver man transaktionsdata ud egenskab ved hverken LogAnalyzer eller LogMiner.
efterfølgende?
Ok den her er lidt tricky, men jeg vil i denne præ-
sentation vise, at man kan komme et stykke vej.
Revisions rapporter
Svaret på disse spørgsmål og opgaver kan findes i Lad os starte med eksemplet revisionsrapporter, og
Oracles redolog filer (eventuelt de arkiverede) da alle se på udseendet af en sådan.
DML transaktioner logges i disse. For at oprette en revisionsrapport oprettes en kom-
mandofil til LogAnalyzer, der feks. kan indeholde:
LogMiner/LogAnalyzer dbms (ORA) -- Database type.
Med Oracle 8i introducerede Oracle værktøjet Log- connectstr (rman.world) -- Database connect.
Miner, som basalt set består af nogle PL/SQL pakker logsrc (archive(/exp/.../arch1_260.arc ))
og et par views, der sætter systemadministratoren i- -- Navn på logfil.
audit ( -- Revisions rapport.
stand til at analysere redologs via Sql-værktøjer som
Report) -- Fuld rapport over

20 April 2001 OracleEkspert


-- hele logfilen. der er derfor mulighed i kommandofilen for at give en
rptout (server(s.rpt))–- Navn på rapporten. lang række begrænsniger på feks.
Bemærk at der ikke står noget om hvilke login/pass- • Skemaer.
word, der benyttes til at logge ind på databasen. Dette • Enkelt tabeller.
er defineret under installation/konfiguration af Log- • Hvilke tidspunkter/intervaller transaktionerne er
Analyzer. udført.
Herfter kan vores LogAnalyzer startes med komman- så man kun behøver at få det, der er interessant for
doen: ens revision.
$ laocmd -fs1.dat
Som det fremgår af eksemplet med delete, kan man
Hvorefter der fremkommer en oversigt over kørslen delvis kigge sin applikation i kortene. Var der feks.
i stil med: defineret en insert trigger på en tabel, der indsatte
2001-03-07 21:20:46 LAC010019 laocmd processing.
værdier i en anden tabel, ville det fremgå af de state-
2001-03-07 21:20:46 LAC010019 Oracle driver pro ments, der havde tilknytning til den pågældende
cessing. transaktions SCNnummer. Dette giver mulighed for,
2001-03-07 21:20:46 LAO010005 ManageIT Log Analyzer som nævnt i indledningen, at kunne se om ens appli-
for Oracle v2.0.0 -
Production. Analysis started kationstransaktioner har et forskelligt forløb før og
2001-03-07 21:21:16 LAC010018 laocmd completed. efter en opdatering.
Som det fremgår af ovenstående tog denne kørsel
på en ca. 15Mb logfil 30 sek og den dannede rapport Generering af SQL-filer
fyldte ca. 7Mb. Det synes jeg er fair nok.
Selve rapporten har en header der fortæller en smu-
Håndtering af brugerfejl/slettede data
le om kørslen af rapporten, og derefter følger så En altid kedelig opgave for en systemadministrator er
udtræk fra logfilen der har udseende som figur 2. at skulle rydde op efter brugerfejl. Det er med moder-
En sådan revisionsrapport kan blive ganske stor, og ne layout ofte besværligt og meget tidskrævende at

SCN: 169094 Transaction ID: 1.2e.2 -- SCN nummer.


Date/Time: 03/06/2001 21:22:30 -- Tidspunkt for transaktionen som skrevet i logfilen.
Log Address: 260.2
Begin –- Indikerer at Transaktionen starter.
SCN: 169094 Transaction ID: 1.2e.2 -- SCN nummer.
Date/Time: 03/06/2001 21:22:30
Log Address: 260.9
Object ID: 2981 Rowid=AAAAulAAGAAAAAcAC0
Insert SCOTT.PERSON -- En insert transaktion.
ID=641 -- Værdier der blev indsat.
NAVN=Karsten Nelboe Jeppesen
…….
SCN: 169094 Transaction ID: 1.2e.2 -- Transaktionen er ved at være ved vejs ende,
Date/Time: 03/06/2001 21:22:30 -- og vi får oplysninger om hvem synderen var.
Log Address: 260.20
Session Number: 12
Serial Number: 618
Current Username: SCOTT
Login Username: SCOTT
OS Username: crb
Machine name: ra
OS terminal: pts/13
OS process id: 15126
OS program name: sqlplus@ra (TNS V1-V3)
Commit -- Transaktionen med SCN 169094 blev commitet.
SCN: 169211 Transaction ID: 1.3.3
Date/Time: 03/06/2001 21:24:26
Log Address: 260.1573
Object ID: 2981 Rowid=AAAAulAAGAAAAAdACK
Update SCOTT.PERSON -- En opdatering af værdier. Efterfølgende skrives de gamle og nye
værdier.
Old Value:
NAVN=Kim Jensen
New Value:
NAVN=Anders And
SCN: 169211 Transaction ID: 1.3.3 -- Oplysninger som før om synderen.
Date/Time: 03/06/2001 21:24:42
Log Address: 260.1679
Session Number: 12
…………………..
OS program name: sqlplus@ra (TNS V1-V3)
Commit
SCN: 169224 Transaction ID: 1.1f.3
Date/Time: 03/06/2001 21:26:28
Log Address: 260.1787
Begin
SCN: 169224 Transaction ID: 1.1f.3
Delete SCOTT.PERSON -- Der foretages en delete fra tabellen SCOTT.PERSON.
ID=939
NAVN=Anders And
SCN: 169224 Transaction ID: 1.1f.3
Delete SCOTT.ADRESSE -- Da der er en foreign key mellem SCOTT.PERSON og SCOTT.ADRESSE,
ID=939 -- defineret med en delete on cascade, slettes der efterfølgende en
POSTNR=3600 -- række i tabellen SCOTT.ADRESSE.
VEJ=Anders
SCN: 169224 Transaction ID: 1.1f.3
Date/Time: 03/06/2001 21:26:36
Log Address: 260.2318
…………..
OS program name: sqlplus@ra (TNS V1-V3)
Commit
End of Audit Report
Figur 2. Audit rapport

OracleEkspert April 2001 21


skulle reetablere data pga. referencer mellem tabeller, nemgået sine redologs, og efterfølgende have scripts
triggere etc., og at lægge en backup direkte ind på klar i tilfælde af, at nogle data alligevel ikke skulle ha-
produktionssystmet er ofte hverken en rar eller farbar ve været slettet.
vej, hvis årsagen er en brugerfejl. LogAnalyzer fritager altså ikke DBA-en for et kend-
I disse situationer vil udtræk fra redologfilerne være en skab til sin database, men skal opfattes som et hjæl-
effektiv og ofte farbar vej, og med LogAnalyzer, er det peværktøj og ikke som svaret på livet, universet og al-
endda ikke særligt kompliceret. ting (hvilket iøvrigt er 42).
Tager vi udgangspunkt i ovenstående transaktion
169224 som slettede en større mængde rækker fra Flytning til anden database
vores PERSON og ADRESSE tabel vil vores kom- Ønsker man at flytte et antal transaktioner til anden
mando fil til LogAnalyzer få følgende udseende: database kan LogAnalyzer hjælpe med dette. I vores
kommandofil specificeres blot redo istedetfor undo, og
$ cat s4.dat
der genereres så det ønskede output.
dbms (ORA)
connectstr (rman.world) Her ønsker vi dog ikke at få rowid med i vores delete
logsrc (archive (/exp/.../arch1_260.arc)) statements, hvorfor dette specificeres i kommando-
audit (sql(undo) -- vi ønsker at få filen.
-- undo kommandoer.
) dbms (ORA)
start (scn (169224)) connectstr (rman.world)
end (scn (169224)) logsrc (archive (/exp/.../arch1_260.arc ))
sqlout (server ( undo_169224 )) audit (sql(redo) -- Vi kan ikke benytte
-- navn på vores fil. norowid) -- rowid til noget, da
Ved kørsel fra kommandoenlinien genereres nu en -- der er andre rowid
-- i den anden database.
tekstfil med sqlkommandoer i stil med: start (scn (169224))
end (scn (169224))
Insert into SCOTT.ADRESSE
sqlout (server ( redo_169224 ) )
(ID, POSTNR, VEJ)
Values og der genereres
(939, 3600, 'Anders')
; Delete From SCOTT.PERSON
Insert into SCOTT.PERSON Where ID=939
(ID, NAVN) and NAVN='Anders And'
Values ;
(939, 'Anders And') Delete From SCOTT.ADRESSE
; Where ID=939
Commit; and POSTNR=3600
and VEJ='Anders'
Til slut i filen kommer en oversigt over hvilke typer sql- ;
statements der er genereret, og som det kan læses er
informationen ikke kun begrænset til slettede data, som ønsket. Denne kommandofil kan så køres op
men også forkert opdaterede eller indsatte data. imod anden database.

REMARK ****************************************** The tricky one


REMARK SQL Generation Summary
REMARK ****************************************** Som lovet vil jeg omtale, hvordan man kan omgå
REMARK Number of INSERT statements generated: 638 problemer med arkiverede redolog, der er mildt kor-
REMARK Number of DELETE statements generated: 0 rumperede. Forestil dig at du under en recover opera-
REMARK Number of UPDATE statements generated: 0 tion får at vide, at der er fejl i et arkiv, og du kan ikke
REMARK komme længere med indlæsningnen af redologs.
REMARK This file contains 0 incomplete statements
REMARK Den er ikke rar, men LogAnalyzer kan måske hjælpe
REMARK NOTE: Incomplete SQL statements will be dig et stykke af vejen, idet man i sin kommandofil kan
REMARK generated whenever data formatting specificere hvortil/hvorfra i den arkiverede redolog der
REMARK errors, clusters, or chained data skal læses, og man kan derfor komme hen til og forbi
REMARK prevent ManageIT LogAnalyzer from det punkt i ens arkiverede logfil, der er defekt. Jeg skal
REMARK building a complete Dynamic SQL
ikke trætte min kære læser med en længere udskrift
REMARK statement.
REMARK ******************************************* af et eksempel, men overlade det til læseren at tro
mig, når jeg siger, at jeg har prøvet det i praksis, og at
I ovenstående Sqlstatements skal man være op- det kan lade sig gøre.
mærksom på at de genereres i den rækkefølge de
står i redolog. Proceduren bliver under alle omstændigheder be-
sværlig, idet man kun kan lade Oracle lave auto reco-
Hvis vi lige erindrer, at vores tabeller PERSON og ver til et vist punkt, og man må så benytte LogAnaly-
ADRESSE havde en reference imellem sig, vil man zer til at læse/generere resten af sine data via sql-
opdage at det første statement, der indsætter en scripts. Hvis det feks. betyder at man så har et større
række i ADRESSE, vil fejle da den tilsvarende række antal arkiverede redologs, der skal behandles, vil det
i PERSON ikke er oprettet endnu. Det vil derfor ofte stadig blive en hård omgang at komme igennem, men
være nødvendigt at skulle køre Sqlfilen flere gange for alternativet er jo at man ikke kommer længere.
at få alle data på plads, eller redigere den pågælden-
de Sqlfil. Træerne vokser ikke ind i himlen
Selv mener jeg, at denne analyse er nyttig i forbindel-
se med større sletninger af data, hvor man kan få gen- Som afslutning skal det naturligvis påpeges at

22 April 2001 OracleEkspert


hverken LogAnalyzer eller LogMiner kan redde alle kerhed, at kunne gardere sig mod brugerfejl, flytte
fejl og uheld. Det første krav er naturligvis at ens data eller lignende, og som jeg håber at have vist med
transaktion overhovedet registreres i Oracles redolog, mine eksempler, er det med LogAnalyzer i hvert fald
hvad feks. en truncate af en tabel ikke gør. uhyre nemt at udtrække denne information. Jeg kan
Imidlertid ligger der megen god information gemt i ens så kun beklage at produktet er begrænset til et par
redolog, hvadenten man er interesseret i revision/sik- forskellige Unix varianter, men det er altså situationen
lige nu.

OUGDK
Oracle User Group Denmark er en selvstyrende gruppe for Oracle-brugere. Det er for tiden gratis at være
medlem, dog skal man have en Oracle-databaselicens for at kunne blive medlem.
Gruppen består af en bestyrelse og et antal Special Interest Groups, som afholder møder i Oracle Danmarks lokaler
i Ballerup. Indkaldelse til møderne sker via brugergruppens mailliste og via brugergruppens web-side (www.oug.dk).

DBA SIG
Koordinator: Jean-Marc Pedersen, jp2@vd.dk
Dato for næste møde er endnu ikke fastlagt.

Designer SIG
Koordinator: Marc de Oliveira, Marc@deOliveira.dk
Næste møde: onsdag den 16. maj eller den 21. juni 2001
Sted: Oracle Danmark, Lautrupbjerg 2-6, 2750 Ballerup
Emner for næste møde: Vi forsøger at få Pascal Gibert til Danmark. Han vil kunne fortælle om Designers fremtid.

Developer SIG
Koordinator: Lone Aalekjær, loaal@wmdata.com
Dato for næste møde er endnu ikke fastlagt.

Data warehouse SIG


Koordinator: Erik Haar, erh@lundbeck.com
Dato for næste møde er endnu ikke fastlagt.

Web SIG
Gruppen er lukket ned indtil en ny koordinator er fundet.

Husk at tilmelde dig til møderne hos Christian.Graversen@Oracle.com (ellers får vi for få kager/vand!!)

OracleEkspert April 2001 23

You might also like