SQLHiA DAT 2800 Databaser I Flerbrukerproblematikk.

Slides:



Advertisements
Liknende presentasjoner
Mer om SQL-spørringer og funksjoner
Advertisements

Hans Olav Norheim
Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Design av sikre web-applikasjoner
Høgskolen i Oslo Webprogrammering Tilstandsbevaring Sessions og cookies.
Mange til mange sammenhengen
Kap 02 Relasjonsdatabaser
JSP presentasjon Arild Strømhylden NTNU 26 June 2014.
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Kap 04 Lister. Listestrukturer Listestrukturer hensiktsmessige ved såkalte flyktige tabeller (tabeller med relativt mye innsetting/sletting)
LC238D Datamodellering og databaser Introduksjon til fagfeltet Else Lervik, august 2012Forelesning 1, uke 34 Datafilerside.
Avansert SQL og problemløsning
1 Objektorienterte databaser - 6 Arne Maus. 2 Problemstillinger, hvorfor OO- databaser ?  dagens relasjonsdatabaser (RDB) passer ikke for alle anvendelser.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Databaser Verktøybok om Access med innslag av Frontpage: Snarveien til Access.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
LC238D Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, uke 45 Transaksjoner og flerbrukerproblematikk.
Databasehåndtering med MySQL
© Lars-Erik Kindblad.  Et platformuavhengig verktøy for å automatisere build prosesser.  Støttes og drives av Apache Software Foundation.  Kommer ferdig.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, uke 44 Å programmere databasetjeneren – JavaDB.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
Datavedlikehold: innlegging, endring, sletting Gjennomgang av eksempel.
Datalagrings- og databehandlingsarkitekturer
INF150 Programmering mandag 11.9
Sqlite Et lite eksempel på en SQL- database. SQL kan startes på ulike måter Kommandolinjeversjon or Windows –Programmet må innstalleres Hentes fra
Standard databasespråk
1 Kap 02 Relasjonsdatabaser. Data-organisering - Manuelt Ansatte Pasienter Utstyr Økonomi Avdelinger RøntgenOnkologisk.
SQLHiA Kap 12 Dynamisk SQL. SQLHiA SQLHiA FlerbrukersystemClient / Server Database DBMS Application_2 SQL-Request Data Application_3 Application_1 ClientServer.
SQLHiA DAT 2800 Databaser I Prosedyrer / Triggere.
SQLHiA Indekser. SQLHiA Indekser B-TrærIndeks bygget opp som tre-struktur. Benyttes typisk på foreign key. Hash-tabellerNøkkel-tranformering. Benyttes.
Web-applikasjoner Prosjekt3 Logging Gruppe 9 Malik Muhammad Naeem Kevan Qureshi.
DAG HOFTUN KNUTSEN Bruk og misbruk av SQL DAG HOFTUN KNUTSEN
Administrasjon av SQL Server 2008 Av: Ole Kristian Bangås Fagansvarlig SQL Server.
Entity Framework Andreas Knudsen, Bekk Consulting AS 31/
SQLHiA Transaksjoner. SQLHiA TransaksjonDefinisjon En transaksjon er en serie av en eller flere SQL-statement som til sammen danner en logisk enhet. Med.
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Høgskolen i Oslo Webprogrammering Filbehandling i PHP.
Høgskolen i Oslo Web-programmering Feilhåndtering i PHP.
Structured Query Language Kræsj-kurs
Høgskolen i Oslo Webprogrammering Ajax og PHP. I dag l Hvordan få en bedre brukeropplevelse via Ajax- script l Gjennomgang av kode l Oppgaveløsning på.
Triggere Mutasjoner i basen. Triggers Triggers are stored procedures that execute automatically when something (event) happens in the database: : data.
Instead-of-trigger Faglig forum. Instead-of-trigger Problem: En har et VIEW som består av mange JOINs. Komplekst å oppdatere alle tabellene som inngår.
Skjema/Forms HTML II IT og læring 2/20 november 2001.
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
DATABASE: Oppgave 2 et medlemsregister for en idrettsklubb med flere idrettsgrener (fotball, håndball, osv). klubben ønsker å lagre informasjon om medlemmenes.
Dynamiske nettsider PHP Del 4 – Eksterne datakilder.
Dynamiske nettsider PHP Del 1 – variable. PHP  PHP (Personal Home Page)  Fritt tilgjengelig programmeringsspråk  åpen kildekode  Plattformuavhengig.
Andre funksjoner. Her kommer en beskrivelse av søkefunksjoner, knapper og annen funksjonalitet. 2.
Fødselsdato (dmå) er født har lønn Ansatt (ansnr) Beløp (NKr)+ Telefon
KAP. 12 Hypertext Implementasjon Roy Kjellid & Tor Andre Kvinge Inf 329.
Linq To SQL Fagdag 20. November DataContext  DataContexten er mappingen mot databasen –Generer objekter for alle entiteter (tabeller), med properties.
1 Forelesningsnotater SIF8039/ Grafisk databehandling Notater til forelesninger over: Kapittel 3: ”Input and Interaction” i: Edward Angel: ”Interactive.
INF3100 – – Ellen Munthe-Kaas Indeksering UNIVERSITETET I OSLO © Institutt for Informatikk Utvalgte animerte lysark: lysark nr. 7, 8, 9, 10,
Eksempel: Sletting ved tynn indeks Slett post med a = 60 –Ingen endring nødvendig i indeksen. Slett post med a = 40 –Den første posten i blokken er blitt.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Freenet A Distributed Anonymous Information Storage and Retrieval System.
Web-grensesnitt Øyvind A. Bratne - April 2004.
Upload av bildefiler Utdrag fra ImageIn Ved Kirsten Klæbo Tirsdag 25/11-03.
Android-Programmering Våren Oversikt Long-running operasjoner Introduksjon til Android services On-demand service Bruk av servicer på tvers av prosesser.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Oversikt Access Hva en bør beherske så langt. Tabeller Felt Typer (heltall, desimaltall, tekst, Boolean) Primary Key.
Kom i gang med Python Pål Hellesnes SYSTEMUTVIKLER
Eksempel: Sletting ved tynn indeks
Utvalgte animerte lysark: lysark nr. 7, 8, 9, 10, 26, 28, 30, 33, 35
Utskrift av presentasjonen:

SQLHiA DAT 2800 Databaser I Flerbrukerproblematikk

SQLHiA FlerbrukersystemClient / Server Database DBMS Application_2 SQL-Request Data Application_3 Application_1 ClientServer

SQLHiA Database-sider (Pages) Physical Page No bytes total Physical Page No bytes total Physical Page No bytes total Physical Page No bytes total Physical Page No bytes total Physical Page No bytes total ….. Logical File Offset c:\centura\.dbs

SQLHiA Lister av ulike typer database-sider 1PageGroupLogPriorNext TypeNoPtrPagePage Data3107 1st page in product table 7PageGroupLogPriorNext TypeNoPtrPagePage Data nd page in product table Database-sider deles inn i grupper. Sider innen samme gruppe lenkes sammen i dobbelt-lenkede lister. Hoved-grupper av database-sider:Data Index Control Logisk nummerering (1, 2, …) av sider innen samme gruppe

SQLHiA Grupper av database-sider Data pagesSelve dataene i databasen Row pagesTabell-rader Extent PagesKolonner som ikke får plass i Row pages Long VarChar pagesLong VarChar kolonner Overflow pagesPlassmangel ved clustered hashing Designed overflow pagesPreallokering ved clustered hashing Dynamically created overflow pagesDesigned overflow page full Index pagesInneholder B + -tre indekser Control pagesGenerelle kontroll-opplysninger Database control blockVersjonsnr, log-info,... Free extent listListe av ikke-allokerte pages Group free page listGruppe-allokerings info (B + -tre) Group extent mapLog pages --> Physical pages info Bitmap pagesFreespace info for hver tabell Row count pageAntall rader pr tabell Table data pageSiste rad serial nr, page nr for siste rad, tabell størrelse, antall overflow pages.

SQLHiA Row Pages 1PageGroupLogPriorNext TypeNoPtrPagePage Data3107 Row Page 1st page in product table 7PageGroupLogPriorNext TypeNoPtrPagePage Data32119 Row Page 2nd page in product table 8 Skrivebord Tabell-rad Plasseres i en såkalt Slot i en database-side av type Data Row Page

SQLHiA Row Pages Page Header Row Page Header Freespace Page Footer Slot Table Slot 5Slot 4 Slot 3Slot 1Slot 2

SQLHiA Row Pages Page Header Row Page Header Physical Page No. Physical Page No. Page Type Page Type Group No. Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Free Space Free Space Extent Page No. Extent Page No. Freespace Slot Table Entry 1Entry 2Entry 3 Page Footer Log Pointer Slot 5Slot 4 Slot 3Slot 1Slot 2 Entry 4Entry 5 Row Header Row Serial No. Update Serial No. Nbr Columns 1 4 Berg2 8 Grimstad3 7 Snekker Col IDLengdeData Slot 3 First Bit: Empty/Full Peker til log-fil som inneholder info om før/etter-situasjon ved evnt endringer. Sikkerhet ved 512 byte lagring

SQLHiA Row Header Row Serial No. Entydig identifikator til en rad i en tabell. Tilordnes sekvensielt ved innsetting (1,2,…). Update Serial No. Entydig identifikator til en rad i en tabell i en felles UPDATE / INSERT. Tilordnes sekvensielt (1,2,…). Benyttes til UPDATE-tap ved Cursor Stabilitet (CS) og Release Lock (RL) isolasjonsnivå, samt uendelig UPDATE / INSERT loop. Eks: UPDATE TABLE Y Set x = x + 1 WHERE x > 10

SQLHiA RowID-Entydig rad-identifikator RowID Page No. Fysisk sidenummer hvor raden befinner seg. Slot No. Slot nummer innen siden hvor raden befinner seg. Row Serial No. Insert row serie nummer. Entydig. Tilordnes ved innsetting. Endres aldri. Benyttes aldri pånytt. Update Serial No. Update row serie nummer. Endres ved Update. Benyttes for å gjenfinne en tabell-rad fra databasen Verifiserer hvorvidt raden fortsatt okkuperer denne lokasjonen eller er slettet og eventuelt erstattet av en annen rad Verifiserer eventuell oppdatering av raden

SQLHiA RowID RowIDSNrNavnPNr CAAD5Nilsen5002 BACV2Olsen6400 ERCB1Hansen9000 EADD4Berg6400 Selger (ID = SNr) SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr) Et eksempel på en 3NF-tabell Selger med tre kolonner SNr, Navn og PNr RowID er en ekstra kolonne i hver tabell som alltid kommer i tillegg til de kolonnene vi eksplisitt definerer. RowID er entydig for hver rad og fungerer som en slags identifikator.

SQLHiA Extent Pages Page Header Row Page Header Physical Page No. 3 Physical Page No. 3 Page Type ROW Page Type ROW Group No. 20 Group No. 20 Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Free Space Free Space Extent Page No. 7 Extent Page No. 7 Slot Table Slot 2 Page Header Row Page Header Physical Page No. 7 Physical Page No. 7 Page Type EXTENT Page Type EXTENT Group No. 20 Group No. 20 Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Free Space Free Space Extent Page No. 15 Extent Page No. 15 Slot Table Slot 2 Inneholder kolonner som ikke får plass i opprinnelig Row Page

SQLHiA Long VarChar Pages Page Header Row Page Header Physical Page No. 3 Physical Page No. 3 Page Type ROW Page Type ROW Group No. 20 Group No. 20 Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Free Space Free Space Extent Page No Extent Page No Slot Table Slot 2 Page Header Row Page Header Physical Page No. 7 Physical Page No. 7 Page Type LONG Page Type LONG Group No. 20 Group No. 20 Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Free Space Free Space Extent Page No Extent Page No Slot Table Slot 2 Long VarChar kolonner plasseres i egne Long Pages

SQLHiA Overflow Pages-Designed Overflow Pages Page 1 Page 2 Page 3 Page N... Page 1 Page 2 Page 3 Page N... Avsettes plass til eventuelle overløps-rader for hver N page

SQLHiA Overflow Pages-Dynamically Created Overflow Pages Page 1 Page 2 Page 3 Page N... Page 1 Page 2 Page 3 Page N... Hvis et ikke er plass til overløps-poster i Designed Overflow Pages, opprettes dynamiske overløps-sider.

SQLHiA Indekser •B-TrærIndeks bygget opp som tre-struktur. Benyttes både på primary keys og foreign keys. •Hash-tabellerNøkkel-tranformering. Benyttes typisk på primary key (ID). Clustered Index: Bestemmer fysisk rekkefølge på data i database-tabeller. Kun en clustered index pr tabell. Må alltid lages før non-clustered index. Må alltid lages før data plasseres i tabellen.

SQLHiA CREATE INDEX Oppretter en indeks CREATEINDEX index name UNIQUECLUSTERED HASHED, ON table name(column name) ASC DESC PCTFREE integer constantSIZE integer valueROWS BUCKETS Max size=6+number of+sum of<=255 columns inlength of all indexcolumns in index

SQLHiA CREATE INDEX-Eksempel CREATE UNIQUE CLUSTERED HASHED INDEX hSNdx ON Selger (SNrID) SIZE 100 ROWS CREATE UNIQUE INDEX Bidndx ON Bedrift (BedriftsID) CREATE INDEX BnNdx ON Bedrift (BedriftsNavn) CREATE INDEX SNavnNdx ON BEDRIFT

SQLHiA Clustered Index / Non-Clustered Index Index Data ClusteredNon-Clustered

SQLHiA Indekser i form av trestruktur …..

SQLHiA Binært tre Søk etter tallet 15 Hver node inneholder maksimum 2 barn. Minimum-høyden av et binært tre som inneholder N noder er [log 2 N] + 1. Eks: Et tre med 100 noder vil ha minst 7 nivåer.

SQLHiA Multiway tre Søk etter tallet 15 Hver node inneholder N antall nøkler (keys) (her 2). Færre nivåer enn binære trær og lavere gjenfinningstid. Balanserings-algoritmene er komplekse

SQLHiA B-tre Et B-tre er et balansert multiway tre med følgende endring: Hver node trenger ikke nødvendigvis inneholde nøyaktig N keys. Noder kan vokse fra halv-full til full. Dette reduserer balanserings-algoritmene og er derfor ressurssparende.

SQLHiA B-Trær Et B-Tre av orden m er definert ved følgende: - Roten er enten et løv eller har minst to barn - Alle intermediære noder har: Antall key i intervallet [m, 2m] Antall barn i intervallet [m+1, 2m+1] - Alle løv befinner seg på samme nivå Eks: B-tre av orden 3 Løv Database

SQLHiA B-trærEks:Innsetting i et B-tre(1) 8,11,1216,1741,5222,23,3158,59,61 16:-41:58 22:- Løv Forenkling: Tenker oss at hver node kan inneholde max tre nøkler og tre barn

SQLHiA B-trærEks:Innsetting i et B-tre(2) 8,11,1216,17,1841,5222,23,3158,59,61 16:-41:58 22:-

SQLHiA B-trærEks:Innsetting i et B-tre(3) 1,811,1241,5222,23,3158,59,61 11:1641:58 22:- 16,17,18

SQLHiA B-trærEks:Innsetting i et B-tre(4) 1,811,1241,5222,23,3158,59,61 11:1641:58 22:- 16,1718,19

SQLHiA B-trærEks:Innsetting i et B-tre(5) 1,811,1241,5222,23,3158,59,61 11:-41:58 16:22 16,1718,19 18:-

SQLHiA B-trærEks:Innsetting i et B-tre(6) 1,811,1241,5222,2358,59,61 11:-41:58 16:22 16,1718,19 18:- 28,31

SQLHiA B-trærEks:Innsetting i et B-tre(7) 1,811,1241,5222,2358,59,61 11:-58:- 16:22 16,1718,19 18:- 28,31 28:-

SQLHiA B-trærEks:Innsetting i et B-tre(8) 1,811,1241,5222,2358,59,61 11:-58:- 22:- 16,1718,19 18:- 28,31 28:- 16:-41:-

SQLHiA B + -tre •Alle pekere til databasefil fjernes fra index-nodene •Alle key-verdier lagres i løvene uavhengig av hvorvidt de eksisterer i index-nodene. •Løv noder er lenket sammen i en liste kalt sekvens-settet. B-tre er optimalt mht aksess til single-record, men ineffektivt mht sekvensiell prosessering. B + -tre skiller seg fra B-tre ved:

SQLHiA Prefix B + -tre Prefix B+-tre er et B+-tre hvor kun den delen av Key som er nødvendig mht entydighet lages i index-nodene. Avkortede Key-verdier SQLBase benytter Prefix B + -tre

SQLHiA Hashing / Nøkkel-transformering / Randomisering Hashing KeyTransformed Key

SQLHiA Nøkkel-transformering PNr ID PNr = IDEn-entydig sammenheng mellom PNr (Postnummer) og ID

SQLHiA Nøkkel-transformering KundeNrTverrSum Distrikt

SQLHiA Nøkkel-transformering KundeNrSiste siffer i tverrsummen av siste siffer i produktene KundeNr Vekttall Produkt

SQLHiA Nøkkel-transformering PNrID PNr = IDEn-entydig sammenheng mellom PNr (Postnummer) og ID Ubenyttet 1 … 10000

SQLHiA Hash-tabeller ID Trans

SQLHiA Nøkkel-tranformering-Folding Nøkkel- transformering ID = PostNr [ ]

SQLHiA Nøkkel-transformering-Divisjon-rest-metoden Nøkkel- transformering ID = PostNr [ ] :

SQLHiA Nøkkel-tranformering-Uheldig tranformering HSize = KeySize = 8 HValue Max = 8 * 127= Tranformering av hvert tegn i Key til tilhørende ordinal-verdi:

SQLHiA Ulike nøkkel-transformeringer int Hash1(char* Key, int HSize) { return ((int)Key[0] + (int)Key[1] + (int)Key[2]) % HSize; } Transformed Key Data Key int Hash2(char* Key, int HSize) { return ((int)Key[0] + 27 * (int)Key[1] * (int)Key[2]) % HSize; }

SQLHiA Ulike nøkkel-transformeringer int Hash3(char* Key, int KeySize, int HSize) { int HashVal; HashVal = (int)Key[0]; for(int i = 1; i < KeySize; i++) HashVal = HashVal*32 + (int)Key[i]; HashVal = HashVal % Hsize; return HashVal; } Transformed Key Data Key

SQLHiA Hashing a key to a database page-SQLBase 1.Transformer symbolsk key ved å la hvert tegn bli representert ved tilhørende ASCII-verdi. Deretter transformeres denne ASCII-verdien som vist nedenfor til et såkalt binært fullword (4 bytes). 1A.Del ASCII-key inn i 4-byte enheter. 1B.XOR alle 4-byte enhetene sammen til et 4-byte resultat (ingen key-del blir borte). 1C.Utfør bitwise complement (fjerner event. bias) 2.Transformer resultatet fra 1 (binary fullword) til et heltall i side-intervallet ved å ta divisjonsresten med minste primtall som er større enn eller lik antall sider. 3.Transformer output fra 2 til en fysisk side adresse ved å legge til start side-nummer for for første rad i tabellen.

SQLHiA Hashing a key to a database page-SQLBase - Eks E J S M --> ASCII 1A.Key1 = Key2 = B.Key1 = XORKey2 = =xKey = = ASCII 1C.~xKey = = ASCII bfKey= (fullword key) 2.Page Adresses (1753 hash buckets) MOD 1753= Første side-adresse for tabellen er 60 => Side-adresse = = 1170

SQLHiA FlerbrukersystemClient / Server Database DBMS Application_2 SQL-Request Data Application_3 Application_1 ClientServer

SQLHiA Update tap i flerbrukersystem uten lås SELECT Count FROM Products... Answer: 139 UPDATE Products SET Count = 39 SELECT Count FROM Products... Answer: 139 UPDATE Products SET Count = 14 MIDPIDCount... ACI MIDPIDCount... ACI MIDPIDCount... ACI Accept Order for 100 Accept Order for 125 Joe’s ProgramProducts TableMary’s Program

SQLHiA Commit / Rollback problem i flerbrukersystem uten lås SELECT Count FROM Products... Answer: 139 UPDATE Products SET Count = 39 SELECT Count FROM Products... Answer: 39 MIDPIDCount... ACI MIDPIDCount... ACI MIDPIDCount... ACI Accept Order for 100 Refuse Order for 125 Joe’s ProgramProducts TableMary’s Program ROLLBACK

SQLHiA Inkonistens problem i et flerbrukersystem uten lås DELETE FROM Orders WHERE... SELECT * FROM Orders OrderNrAmount $ $ UPDATE ProgramOrders TableReport Program OrderNrAmount $ $ OrderNrAmount $ $ $ Answer: $ Answer: $ INSERT INTO Orders VALUES (113102, $05.000) COMMITAnswer: $05.000

SQLHiA Låse-mekanismer UPDATE Orders SELECT FROM Offices UPDATE Orders UPDATE Offices COMMIT UPDATE Products SELECT... FROM Offices COMMIT OrdersOfficesProducts UUU OkL A L BOk OkL A Wait Ok OkUUOk L B UUOk Transaction ADBMSTransaction B

SQLHiA Shared Lock / Exclusive Lock Unlocked Shared Lock Exclusive Lock Unlocked Shared Lock Exclusive Lock Ok No OkNo Transaction B Transaction A S-låsShared LockSettes på database-siden når en bruker leser (SELECT) fra databasen. X-låsExclusive LockSettes på database-siden når en bruker skal gjøre en oppdatering (UPDATE), sletting (DELETE) eller innlegging av nye data (INSERT). SQLBase opererer med låsing av database-sider (pages) som hver er på 1 K. En database-side kan kun inneholde rader fra en tabell.

SQLHiA Shared Lock / Exclusive Lock UPDATE Orders SELECT FROM Offices UPDATE Orders UPDATE Offices COMMIT UPDATE Products SELECT... FROM Offices COMMIT OrdersOfficesProducts UUU OkEL A EL BOk OkSL A SL A,BOk OkSL AUOk OkEL A OkUU Transaction ADBMSTransaction B SL = Shared Lock EL = Exclusive Lock

SQLHiA Dead Lock UPDATE Orders UPDATE Products OrdersProductsU OkEL A EL BOk W Ok W Transaction ADBMSTransaction B SL = Shared Lock EL = Exclusive Lock UPDATE Products UPDATE Orders

SQLHiA Låse-mekanismer •Database •Tabell •Side (Page) K •Rad •Kolonne Låse-mekanismer kan benyttes på følgende nivåer: Økende parallell-prosessering. Økende kompleksitet. SQLBase låser sider (pages) på 1K

SQLHiA Database access cycle Connect Database operations Disconnect Prepare (Compile) Execute Fetch (for a SELECT) Select, Insert, Update, Delete,...

SQLHiA Connect / Disconnect SqlDatabaseDEMO SqlUserSYSADM SqlPasswordSYSADM SqlConnect SqlDisconnect Predefinerte variableDefault-verdier Centura-funksjoner

SQLHiA Connect / DisconnectEksempel Global Declarations … Variables Sql Handle:hSql Boolean:bConnect... On SAM_AppStartup Set SqlDatabase = ‘Handel’ Set SqlDatabase = ‘BrukerA’ Set SqlPassword = ‘PBrA’ Set bConnect = SqlConnect ( hSql ) On SAM_AppExit If bConnect Call SqlDisconnect ( hSql )

SQLHiA SqlHandle Name of DbConnection Sql Handle: hSql Row Position in Result Set Input message buffer Output message buffer Work Space in Memory

SQLHiA Compiling and Exexuting SQL statements SqlPrepare:Kompilerer et SQL statement SqlExecute:Eksekverer et SQL statement SqlPrepareAndExecute:Kompilerer og eksekverer et SQL statement

SQLHiA SELECT 1.Prepare (compile) SELECT statement 2.Execute SELECT statement 3.Benytt SqlFetch… for å hente en rad inn i INTO variable SqlFetchNextHenter neste rad i et resultatsett SqlFetchPreviousHenter forrige rad i et resultatsett SqlFetchRowHenter en gitt rad i et resultatsett SqlGetResultSetCountReturnerer antall rader i et resultatsett SqlSetResultSetSetter resultatsett mode på/av for gitt SqlHandle. Følgende sletter et resultatsett: - Kompilering av et annet SQL statement for samme SqlHandle - Commit / Rollback hvis DBP_PRESERVE er av for denne SqlHandle

SQLHiA Fetch-indikatorer FETCH_Delete FETCH_EOF FETCH_Ok FETCH_Update Raden er slettet siden forrige henting Ingen flere rader kan hentes Henting Ok Raden er endret (Update) siden forrige henting SqlFetchNext ( hSql, nFetch ) SqlFetchPrevious ( hSql, nFetch ) SqlFetchRow ( hSql, nRow, nFetch )

SQLHiA SqlImmediate SqlConnect SqlPrepare SqlExecute SqlFetchNext (SELECT) SqlClearImmediate Connect en intern SqlHandle, Prepare and Execute a SQL Statement. Disconnect SqlHandle fra SqlImmediate

SQLHiA Funksjoner for database-parametre Set / Get SqlSetParameterSetter databaseparametre SqlSetParameterAllSetter databaseparametre SqlSetInMessageSetter størrelse på InputMessageBuffer (1-32K) SqlSetIsolationLevelSetter isolasjonsnivå i tilknytning til S-lås SqlSetLockTimeoutSetter ventetid (-1,0,1…1800s) SqlSetOutMessageSetter størrelse på OutputMessageBuffer (1-32K)

SQLHiA DBP_* parametre DBP_AUTOCOMMITOn: Automatisk Commit ved SQL-statem. DBP_BRANDUlike databaser (DBV_BRAND_SQL, …) DBP_FETCHTHROUGHOn: Henter rader direkte fra datab.server DBP_LOCKWAITTIMEOUTTall som viser ventetid (-1,0,1…1800s) DBP_NOPREBUILDOn:Ingen prebuild av resultatsett ved ResultSetMode og RL. S-lås settes på gjeldende side. DBP_PRESERVEOn: Bevarer resultatsett ved Commit DBP_ROLLBACKONTIMEOUTOn: Rollback ved timeout DBP_VERSIONDatabase server versjon

SQLHiA DBP_BRAND DBV_BRAND_ALLBASEHewlett-Packard ALLBASE DBV_BRAND_AS400IBM AS/400 DBV_BRAND_CINCOM-SUPRACincom Supra DBV_BRAND_DB2IBM DB2 DBV_BRAND_INFORMIXInformix DBV_BRAND_INFORMIX-ONLINEInformix Online DBV_BRAND_ORACLEOracle DBV_BRAND_ORACLE7Oracle v.7 DBV_BRAND_OS2EEIBM OS/2 EE DBV_BRAND_SQLSQLBase DBV_BRAND_SYBASESQL Server

SQLHiA DBP_LOCKWAITTIMEOUT VerdiBeskrivelse Ventetid for en lås ( 1 sek - 30 min, 300 s default ) -1Vent for evig 0Ingen venting

SQLHiA Input / Output Message Buffer (as seen from Client) Database DBMS Application SQL-Request Data Input Message Buffer Output Message Buffer hSql1 hSql2 Input Message Buffer Output Message Buffer Input Message Buffer Output Message Buffer hSql1 Input Message Buffer Output Message Buffer Application 1 Application 2 Output Message Buffer

SQLHiA Resultatsett Database DBMS Application SQL-Request Data SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Tabellen Selger SNrNavnPNr 2Olsen6400 4Berg6400 Resultatsett ClientServer Fetch

SQLHiA Resultatsett Et resultatsett er en temporær indeks, av og til assosiert med en temporær tabell (ved beregn. eller kompl. søk) som inneholder data som representerer resultatet av et SELECT-statement ved spesielle komplekse spørringer. Innholdet i resultatsettets løvsider er pekere (ROWIDs) til rader i tabeller som tilfredsstiller SELECT-statementet. ….. RowID

SQLHiA RowID SELECT ….. Resultat-sett av løv-pekere Resultat-sett av løv-pekere RowID 1 RowID 2 RowID 3... RowID 1 RowID 2 RowID 3... Resultat-sett av temporær tabell-data Resultat-sett av temporær tabell-data …..

SQLHiA Resultatsett-RowID-Single tabell Resultat-sett av løv-pekere Resultat-sett av løv-pekere AABC AABE AABC AABE ROWIDSNrNavnPNr AABB5Nilsen5002 AABC2Olsen 6400AABD1Hansen 9000AABE4Berg 6400 Selger (ID = SNr) SELECT SNr, Navn FROM Selger WHERE PNr = 6400

SQLHiA Resultatsett-RowID-Join Resultat-sett av løv-pekere Resultat-sett av løv-pekere ROWIDSNrNavnPNr AABB5Nilsen5002 AABC2Olsen 6400AABD1Hansen 9000AABE4Berg 6400 Selger (ID = SNr) SELECT Selger.SNr, Selger.Navn, Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNrID AND Selger.PNr = 6400 ROWIDPNrIDSted GGHA5002Bergen GGHB6400Molde GGHC9000Tromsø Adr (ID = PNr) Selger-RowIDAdr-RowID AABCGGHB AABEGGHB

SQLHiA Resultatsett-RowID-Beregnede verdier Resultat-sett av RowID til tmpTbl Resultat-sett av RowID til tmpTbl ROWIDSNrNavnPNr AABB5Nilsen5002 AABC2Olsen 6400AABD1Hansen 9000AABE4Berg 6400 Selger (ID = SNr) SELECT Selger.SNr, Selger.Navn, SUM(Mg) FROM Selger, Salg WHERE Selger.SNrID = Salg.SNrID GROUP BY Selger.SNr, Selger.Navn XXAA XXAB XXAC XXAD ROWIDSNrVNrMg YYAA5830 YYAB2120 YYAC2310 YYAD1550 YYAE1840 YYAF4170 YYAG4350 YYAH4520 Salg (ID = SNr + VNr) RowIDSNrIDNavnSum(Mg) XXAA1Hansen 90 XXAB2Olsen 30 XXAC4Berg140 XXAD5Nilsen 30 Temporær tabell med resultat-rader

SQLHiA Sletting av Resultat-sett Resultat-sett slettes vanligvis ved: -Eier cursor/sqlHandle disconnectes -Eier cursor/sqlHandle rekompilerer SELECT-statementet. -Transaksjonen utfører COMMIT eller ROLLBACK. -Transaksjonen endrer gjeldende isolation mode. Hvis cursor context preservation er satt på, gjelder følgende endringer fra regelen ovenfor: -COMMIT sletter ikke resultatsettet -ROLLBACK sletter ikke resultatsettet ved RL isolation level og ikke bruk av DDL. bOk = SqlSetParameter ( hSql, DBP_PRESERVE, TRUE, ‘‘ )

SQLHiA X-lås/ S-lås X-lås Settes alltid automatisk ved INSERT, UPDATE eller DELETE (DML). Varigheten er inntil COMMIT/ROLLBACK. S-lås Settes alltid ved SELECT (DQL). Varigheten er avhengig av programmert isolasjons-nivå, men slippes alltid ved COMMIT/ROLLBACK. Typen av isolasjons-nivå har innvirkning på andre brukeres tilgang til databasen og tidsgyldigheten av resultatsettet. Låser implementeres i SQLBase vha en intern HashTabell.

SQLHiA Isolation Level-Consistency / Concurrency RR(Read Repeatability)Alle sider som brukeren aksesserer (Fethed) er låst for andre inntil commit på transaksjonen. Garanterer lese-konsistens, men forårsaker mye venting. Default. CS(Cursor Stability)Kun den siden som i øyeblikket prosesseres (Fetched) blir låst. En rad om gangen blir sendt til output message buffer på serveren og over nettverket til klienten. Forårsaker større nettverkstrafikk. Rader i resultatsettet kan bli endret av andre. RO(Read Only)Kun leseadgang. Ingen låser settes. Ved lesing av en side med lås, leses history-fil(er). RL(Release Locks)Slipper låsen med en gang resultatsettet er ferdig generert. Gir andre brukere gode aksesseringsmuligheter. Ved fetch settes en S-lås (i tilfelle av en uncommited update fra en annen transaksjon), men slippes straks etter fetch. 4 isolasjons-nivåer: Gjelder for alle cursors i en transaksjon

SQLHiA Isolation Level bok = SqlSetIsolationLevel ( hSql, sIsolationLevel ) sIsolationLevel =RR CS RO RL RR (Read Repeatability er default). Isolation Level som settes gjelder for alle cursors i transaksjonen for denne brukeren. Endring av Isolation Level medfører en implisitt Commit.

SQLHiA RR-Read Repeatability RR(Read Repeatability)Alle sider som brukeren aksesserer er låst for andre inntil commit på transaksjonen. Garanterer lese-konsistens, men forårsaker mye venting. Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 S-lås Resultatsett Database sider (pages) S-lås

SQLHiA CS-Cursor Stability CS(Cursor Stability)Kun den siden som i øyeblikket prosesseres (Fetched) blir låst. En rad om gangen blir sendt til output message buffer på serveren og over nettverket til klienten. Forårsaker større nettverkstrafikk. Rader i resultatsettet kan bli endret av andre. Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 S-lås Resultatsett Database sider (pages) Fetch

SQLHiA RO-Read Only RO(Read Only)Kun leseadgang. Ingen låser settes. Ved lesing av en side med lås, leses history-fil(er). x x Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 Lås fra annen bruker Resultatsett Database sider (pages)

SQLHiA RL-Release Locks RL(Release Locks)Slipper låsen med en gang resultatsettet er ferdig generert. Gir andre brukere gode aksesseringsmuligheter. Ved fetch settes en S-lås (i tilfelle av en uncommited update fra en annen transaksjon), men slippes straks etter fetch. Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 S-lås som slippes straks resultatsettet er ferdig generert Resultatsett Database sider (pages) Fetch S-lås settes ved Fetch-operasjon (pga evnt uncommited update), men slippes straks etter.

SQLHiA FetchThrough bOk = SqlSetParameter ( hSql, nParameter, nNumber, sString )Syntaks bOk = SqlSetParameter ( hSqlA, DBP_FETCHTHROUGH, TRUE, ‘‘ )Eksempel Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 Resultatsett Database sider (pages) Fetch DBP_FETCHTHROUGH

SQLHiA Isolation Level Locks (S-Locks) Data Consistency RR Lås holdes gjennom hele transaksjonen. Mer enn en side kan være låst. CS Lås holdes kun på den siden som inneholder gjeldende rad. RO RL Ingen lås. Ingen INSERT, UPDATE, DELETE. Lås slippes straks ved end-of-fetch (når resultatsettet er ferdig generert). User Concurrency HøyLav Middels HøyHøyest LavHøy

SQLHiA Data Consistency - User Concurrency Data Consistency User Concurrency RORRCSRLRO

SQLHiA Kriterier for valg av Isolation Level 1.Buffere:Hvor kritisk er gjenfinningshastigheten (performance) i applikasjonen? Hvis kritisk performance, velg et isolasjonsnivå hvor input message buffer på server fylles helt med rader før oversending til client (unngå CS). 2.Contention:Hvis det forventes at mange brukere samtidig vil aksessere de samme sidene, ikke velg et isolasjonsnivå hvor S-låser plasseres på alle leste data inntil commit / rollback. 3.Update:Vil brukere i stor utstrekning benytte insert/update/delete? I så fall, velg et isolasjonsnivå som tillater disse operasjonene. 4.Consistency:Er konstistente data gjennom applikasjonen viktig? Hvis det er viktig at dataene vil beholde de samme verdiene inntil transaksjonen avsluttes, velg et isolasjonsnivå som holder S-lås inntil commit eller avslutt.

SQLHiA Isolation Level-Kriterier Isolation Level Kriterie 1 Buffere Kriterie 1 Buffere RR Ja Kriterie 2 Contention Kriterie 2 Contention Kriterie 3 Update Kriterie 3 Update Kriterie 4 Consistency Kriterie 4 Consistency CS RO RL Nei Ja Nei Ja Nei Ja Nei Ja Nei

SQLHiA Flerbruker-teknikk 1.Benytt Release Locks (RL) isolation level. 2.Benytt ROWID valideringsteknikk i tilknytning til UPDATE og DELETE. 3.Ikke endre DBP_NOPREBUILD fra default verdi (off). Anbefaling ved SQLBase flerbrukerteknikk:

SQLHiA Fetch / Update av resultatsett rader i SQLBase (1) SqlFetchNext ( hSql, nFetch ) SqlFetchPrevious ( hSql, nFetch ) SqlFetchRow ( hSql, nRow, nFetch ) Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 Slot RowSerialNr RowUpdateSerialNr Fetch rRowID Les Page Les nBit1 for DeleteTest 4 Les Row (med pRowID) fra Page for test på Delete/Insert (RowSerialNr) og Update (RowUpdateSerialNr) Resultatet fra testene ovenfor returneres gjennom nFetch nFetch=FETCH_DeleteSlettet siden forrige henting FETCH_EOFSlutten / Begynnelsen av resultatsettet FETCH_OkHenting ok, raden er ‘korrekt’ FETCH_UpdateOppdatert siden forrige henting Page Row ResultatSett

SQLHiA Fetch av resultatsett rader i SQLBase (2) Les rRowID i ResultatSett rad Les Page ved å ved å benytte PageNumber i rRowID Les nBit1 i SlotTable ved å benytte SlotKomponent i rRowID IF nBit1 = 0 Row er slettet (av annen bruker) ELSE Les Row fra Page ved å benytte offset i SlotTable. Les pRowID IF RowSerialNumber(pRowID) != RowSerialNumber(rRowID) Raden er slettet og gjenbrukt av annen rad ELSE IF RowUpdateSerialNumber(pRowID) != RowUpdateSerialNumber(rRowID) Raden er endret ELSE Raden i ResultatSett og Page er identiske

SQLHiA RowID validitering Start Ok Prepare / Execute Select. RowID Ok RowID Ok Changed-row processing Changed-row processing End FetchRows User changes a row Prepare / Execute a DML Error processing Error processing Commit No Yes

SQLHiA SQL Error nError = SqlError (hSql)Returnerer siste gjeldende error kode for gitt sqlhandle. nError = 0 ved ingen sql-error. bOk = SqlErrorText (nError, nType, strError, nLength, nRealLength) Henter feilmelding fra ERROR.SQL for gitt nError. nError:Gitt error nType:SQLERROR_ReasonError code reason SQLERROR_RemedyError message strError:Begrunnelse eller message tekst nLength:Maksimal lengde av strError nRealLength:Aktuell lengde av strError bOk = SqlGetErrorText ( nError, strText) Returnerer error fra ERROR.SQL for gitt nError. bOk = SqlGetError (hSql, nError, strErrorString) Slår av backend error mapping og returnerer real backend error. Samme som SqlError og SqlGetErrorText ved SQLBase. bOk = SqlGetErrorPosition (hSql, nPos) Returnerer offset error-posisjon i gitt SQL-statement.

SQLHiA SQL Error bOk = SqlExtractArgs (wParam, lParam, hSql, nError, nPos) Ekstraherer error-informasjon fra SAM_SqlError argumentene wParam og lParam. wParam:Verdien av wParam argument i SAM_SqlError lParam:Verdien av lparam argument i SAM-SqlError hSql:Receive Sql Handle. Centura bestemmer denne fra wParam. nError:Receive Error Number. Centura bestemmer denne verdien fra low-order word i lParam. nPos:Receive Error Position Number (offset innen SQL-statement). Centura bestemmer denne verdien fra high-order word i lParam.

SQLHiA SQL Error Application Actions … On SAM_SqlError Call SqlExtractArgs ( wParam, lParam, hSqlError, nErr, nPos ) … When SqlError …

SQLHiA SQL Error Start When SqlE. When SqlE. SqlE-WhenStatem. Return SAM SqlE. SAM SqlE. ReturnValue blir Sql* function return ReturnValue blir Sql* function return SqlE-WhenStatem. SAM SqlE. SAM SqlE. ReturnValue blir Sql* function return ReturnValue blir Sql* function return Default Error handling. Default Error handling. End Yes No Yes No Yes No

SQLHiA End