Kjell Toft Hansen 22.06.2010 Opphavsrett: Forfatter og AITeL Lærestoffet er utviklet for faget LO177D Databaseprogrammering med PL/SQL 1. Dette notatet skal gi deg en kort innføring i bruken av Oracle Express Edition. Vi skal vise hvordan du logger deg på, åpner script og bruker noen enkle datakatalogkommandoer (eng. Data Dictionary). Innhold 1. INTRODUKSJON TIL ORACLE EXPRESS EDITION... 1 1.1. STARTE ORACLE XE... 1 1.1.1. Skrive PL/SQL-program... 3 1.2. LASTE INN SQL-SCRIPT... 4 1.3. DATAKATALOGEN... 6 1.1. Starte Oracle XE Etter å ha installert Oracle XE på vår maskin, følger vi følgende sti for å finne XE: Start->Alle programmer-> Oracle Database 10g Express Edition->Got To Database Home Page Etter å ha trykt på Go To Database Home Page, får vi opp skjermbildet som er vist på figur 1. Figur 1. Skjermbilde for innlogging
Her skriver vi inn brukernavn og passord for systemansvarlig som vi fikk tilgang til ved installeringen av Oracle XE. Etter at vi har skrevet inn parametrene, trykker vi på Login-knappen. Da vil vi få opp skjermbildet som er vist på figur 2. Figur 2. Oppstart Det første vi må gjøre er å opprette en egen bruker for dette kurset som er forskjellig fra administrator (som har brukernavn sys/system). Det gjør vi ved å velge ikonet Administration. Deretter får vi opp skjermbildet som er vist på figur 3. Figur 3. Opprett ny bruker Her skriver vi inn brukernavn og passord på den nye brukeren og får tildelt rollene CONNECT og RESOURCE som gir oss automatisk tilgang til rettighetene som er nevnt under Direct Grant System Privileges. Så trykker vi knappen Create. side 2 av 11
Dette får vi bekreftet som vist på figur 4. Figur 4. Bekreftelse på at bruker er opprettet Ved å trykke på ikonet som symboliserer den nye brukeren, kan vi slette og endre på rollene/rettighetene til den nye brukeren. Neste skritt blir å logge seg ut som administrator og logge seg på ved å bruke brukernavn og passord til vår nylig opprettete bruker for dette kurset. Figur 5. Oppstart 1.1.1. Skrive PL/SQL-program Hvis vi nå skal skrive et PL/SQL-program eller SQL-spørringer må vi velge SQL-ikonet. Da får du opp skjermbildet som er vist på figur 6 Figur 6. SQL Her kan vi enten velge ikonet for å skrive SQL-spørringer (SQL Commands) eller ikonet for å laste inn ferdigskrevet SQL-script (SQL Scripts) på tekstfilformat. I vårt tilfelle skal vi velge ikonet SQL Scripts fordi vi skal laste inn de ferdigskrevne scriptene sql-script01.txt og sql-script02.txt for å få et datagrunnlag til å gjøre øvinger og å kjøre eksemplene som er vist i leksjonene. side 3 av 11
1.2. Laste inn SQL-script Scriptene inneholder opprettelsen av tabeller med integritetsregler og innlegging av data. Istedenfor å kjøre hver enkelt SQL-spørring, som kan være tidkrevende, kjører vi hele scriptet ved å velge ikonet SQL Script. Deretter skriver inn parametrene som er vist på figur 7. Dvs. stien til scriptet, det lokale navnet vi vil gi scriptet og tegnsettet. Figur 7. Kjøring av scriptet sql-script01.txt Vi trykker deretter knappen Upload. For å laste inn flere script etter hverandre må vi logge osss ut og inn mellom hver kjøring av scriptene. Skjermbildet på figur 8 bekrefter at et scriptet fra figur 7 er kjørt og lastet inn. Figur 8. Bekreftelse på innlasting av script Deretter må vi dobbeltklikke på ikonet for scriptet. Da får vi opp skjermbildet som er vist på figur 9. Figur 9. Innlastet script Nå må vi velge knappen Run for å kjøre scriptet slik at tabellene blir opprettet og at data deretter blir lagt inn i tabellene. side 4 av 11
Figur 10. Scriptet er klar til å bli kjørt Vi velger Run på nytt igjen og får fram skjermbildet som er vist på figur 11. Figur 11. Scriptet er klargjort Vi trykker deretter på Script i menylinjen (grønn skrift) og vi får fullført kjøringen av scriptet. Figur 12. Scriptet har blitt kjørt side 5 av 11
1.3. Datakatalogen Datakatalogen er et nyttig redskap når du skal se nærmere på metadata. I Oracle XE kan vi bruke SQL (ikonet SQL Commands) til å kjøre SQL-spørringer mot datakatalogen (eng. Data Dictionary). For å kjøre mange av datakatalogspørringene i dette kapittelet må vi være pålogget som administrator (brukernavn sys/system). For å se navnene på de tabellene som scriptene har opprettet, skriver vi følgende SQLspørring: SELECT TABLE_NAME FROM USER_TABLES; TABLE_NAME LEVINFO LEVERANSE LEVERANDOR PRODUKT DELINFO ORDREHODE ORDREDETALJ PRISINFO 8 rows returned in 0,43 seconds Hvis vi ønsker å se all informasjon om tabellene som vi har opprettet, skriver vi følgende SQL-spørring: SELECT * FROM USER_TABLES; Resultattabellen av spørringen blir som følger: Dette er bare et utdrag av attributtene (kolonnene) i datakatalogtabellen USER_TABLES. Vi kan også bruke prefikset ALL til å få ut noen av de samme data, men da må vi foreta en restriksjon (for eksempel for én bestemt bruker) som vist i følgende SQL-spørring: SELECT table_name FROM ALL_TABLES WHERE OWNER = 'KTHA'; side 6 av 11
Resultattabellen blir: LEVINFO LEVERANSE TABLE_NAME LEVERANDOR PRODUKT DELINFO ORDREHODE ORDREDETALJ PRISINFO 8 rows returned in 0,94 seconds Vi kan også skrive en SQL-spørring som finner attributtnavn og datatyper til en gitt tabell. I vårt eksempel til tabellen Delinfo: SELECT COLUMN_NAME, CHAR_LENGTH, DATA_TYPE FROM USER_TAB_COLUMNS WHERE TABLE_NAME ='DELINFO'; COLUMN_NAME CHAR_LENGTH DATA_TYPE DELNR 0 NUMBER BESKRIVELSE 30 VARCHAR2 2 rows returned in 0,21 seconds Vi kan også skrive følgende SQL-spørring for å se metadata i samme tabell: DESC delinfo; Resultattabellen blir: Table Column Data Type Length Precision Scale Primary Key Nullable Default Comment DELINFO DELNR Number - - 0 1 - - - BESKRIVELSE Varchar2 30 - - - - - 1-2 Følgende spørring lister ut alle brukerne i databasen: SELECT USERNAME FROM ALL_USERS; side 7 av 11
KTHA KJELLHA FLOWS_020100 FLOWS_FILES HR MDSYS ANONYMOUS XDB CTXSYS DBSNMP USERNAME More than 10 rows available. Increase rows selector to view more rows. Prefikset DBA gir en resultattabell som viser informasjon om objekter fra hele databasen. Her er det nødvendig å ha tilhørende DBA-rettighet. Følgende spørring viser alle brukernes objekter i hele databasen: SELECT * FROM DBA_TABLES; Resultattabellen her er bare et utsnitt og viser ikke alle attributtene. Følgende spørring viser statusen til en brukerkonto: SELECT ACCOUNT_STATUS, CREATED, PROFILE, LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'KTHA'; ACCOUNT_STATUS CREATED PROFILE LOCK_DATE OPEN 25.08.2009 DEFAULT - 1 rows returned in 0,02 seconds For å finne ut hvilke systemrettigheter brukeren har, må vi skrive følgende SQL-spørring: SELECT DISTINCT PRIVILEGE FROM DBA_SYS_PRIVS; side 8 av 11
PRIVILEGE ADMINISTER ANY SQL TUNING SET EXECUTE ANY LIBRARY CREATE ANY LIBRARY CREATE JOB UNLIMITED TABLESPACE ALTER ANY RULE SET DROP ANY MATERIALIZED VIEW DROP ANY DIRECTORY CREATE MATERIALIZED VIEW DROP PROFILE More than 10 rows available. Increase rows selector to view more rows. 10 rows returned in 0,11 seconds I dette tilfellet er brukeren DBA og har de rettighetene som resultattabellen viser. Det er ikke uvanlig at brukeren oppretter en rekke integritetsregler. Disse er lagret i tabellen User_constraints. For å finne ut hvilke attributter denne datakatalogtabellen har, kan vi skrive følgende spørring: DESC USER_CONSTRAINTS; Nå kan vi også finne ut hvilke integritetsregler som ligger på brukerens område ved å skrive følgende spørring: SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME FROM USER_CONSTRAINTS; side 9 av 11
CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME PRISINFO_FK2 R PRISINFO ORDREDETALJ_FK2 R ORDREDETALJ ORDREDETALJ_FK1 R ORDREDETALJ ORDREHODE_FK R ORDREHODE SYS_C004303 C PRISINFO SYS_C004302 C PRISINFO SYS_C004300 C ORDREDETALJ SYS_C004299 C ORDREDETALJ SYS_C004297 C ORDREHODE SYS_C004295 C LEVINFO More than 10 rows available. Increase rows selector to view more rows. 10 rows returned in 0,51 seconds Vi kan også jobbe med statistikker. Følgende er et eksempel på hvordan vi kan lage en SQLspørring som finner gjennomsnittsverdier: ANALYZE TABLE levinfo COMPUTE STATISTICS; SELECT NUM_ROWS * AVG_ROW_LEN FROM USER_TABLES WHERE TABLE_NAME = 'LEVINFO'; Resultattabellen av spørringen blir: NUM_ROWS*AVG_ROW_LEN 312 1 rows returned in 0,05 seconds Systemtabellen Dictionary inneholder en oversikt over alle tabeller. Vi kan bruke den til for eksempel å telle hvor mange tabeller som begynner med prefikset ALL: SELECT COUNT(*) FROM DICT WHERE TABLE_NAME LIKE 'ALL%'; Resultattabellen blir i vårt tilfelle: COUNT(*) 254 1 rows returned in 0,14 seconds Vi kan også hente ut beskrivelsen til denne systemtabellen ved å bruke kommandoen Dict: DESC DICT; side 10 av 11
Resultattabellen blir: Table Column Data Type Length Precision Scale Primary Key Nullable Default Comment DICTIONARY TABLE_NAME Varchar2 30 - - - - COMMENTS Varchar2 4000 - - - - Name of the object Text comment on the object 1-2 Ulike brukere kan tildeles ulike CPU-ressurser og prioriteter. Ved bruk av disse kommandoene kan vi kontrollere at brukere alltid har tilgjengelige CPU-ressurser. Ved følgende spørring kan vi for eksempel se på hvem som styrer ressursbruken: SELECT * FROM DBA_RSRC_MANAGER_SYSTEM_PRIVS; Resultattabellen kan se slik ut: GRANTEE PRIVILEGE ADMIN_OPTION DBA ADMINISTER RESOURCE MANAGER YES EXP_FULL_DATABASE ADMINISTER RESOURCE MANAGER NO IMP_FULL_DATABASE ADMINISTER RESOURCE MANAGER NO 3 rows returned in 0,09 seconds side 11 av 11