K10
-
Upload
helene-fosse -
Category
Technology
-
view
151 -
download
0
Transcript of K10
![Page 1: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/1.jpg)
SQL HiA
DAT 2800Databaser I
Flerbrukerproblematikk
![Page 2: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/2.jpg)
SQL HiA
Flerbrukersystem Client / Server
DatabaseDBMS
Application_2
SQL-Request
Data
Application_3
Application_1
Client Server
![Page 3: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/3.jpg)
SQL HiA
Database-sider (Pages)
Physical Page No 1
1024 bytes total
Physical Page No 2
1024 bytes total
Physical Page No 3
1024 bytes total…..
Logical File Offset
0 1023 1024 2047 2048 3071
c:\centura\<DatabaseName>.dbs
![Page 4: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/4.jpg)
SQL HiA
Lister av ulike typer database-sider
1 Page Group Log Prior NextType No Ptr Page PageData 3 1 0 7
1st page in product table
7 Page Group Log Prior NextType No Ptr Page PageData 3 2 1 19
2nd 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: DataIndexControl
Logisk nummerering (1, 2, …) av sider innen samme gruppe
![Page 5: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/5.jpg)
SQL HiA
Grupper av database-sider
Data pages Selve dataene i databasenRow pages Tabell-raderExtent Pages Kolonner som ikke får plass i Row pagesLong VarChar pages Long VarChar kolonnerOverflow pages Plassmangel ved clustered hashing
Designed overflow pages Preallokering ved clustered hashingDynamically created overflow pages Designed overflow page full
Index pages Inneholder B+-tre indekser
Control pages Generelle kontroll-opplysningerDatabase control block Versjonsnr, log-info, ...Free extent list Liste av ikke-allokerte pagesGroup free page list Gruppe-allokerings info (B+-tre)Group extent map Log pages --> Physical pages infoBitmap pages Freespace info for hver tabellRow count page Antall rader pr tabellTable data page Siste rad serial nr, page nr for siste rad,
tabell størrelse, antall overflow pages.
![Page 6: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/6.jpg)
SQL HiA
Row Pages
1 Page Group Log Prior NextType No Ptr Page PageData 3 1 0 7Row Page
1st page in product table
7 Page Group Log Prior NextType No Ptr Page PageData 3 2 1 19Row Page
2nd page in product table
8 Skrivebord 2.700
Tabell-rad
Plasseres i en såkalt Slot i en database-side av type Data Row Page
![Page 7: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/7.jpg)
SQL HiA
Row Pages
Page HeaderRow Page Header
Freespace
Page Footer
Slot Table
Slot 5 Slot 4Slot 3 Slot 1Slot 2
![Page 8: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/8.jpg)
SQL HiA
Row Pages
Page Header Row Page HeaderPhysicalPage No.
PageType Group No. Logical
Page No.PreviousPage No.
NextPage No.
LogPointer Slot Size Free
SpaceExtent
Page No.
Freespace
Slot TableEntry 1 Entry 2 Entry 3
Page Footer Log Pointer
Slot 5 Slot 4Slot 3 Slot 1Slot 2
Entry 4 Entry 5
Row Header
Row Serial No.Update Serial No.
Nbr Columns
1 4 Berg 2 8 Grimstad 3 7 Snekker
Col ID Lengde Data
Slot 3
First Bit: Empty/Full
Peker til log-fil som inneholderinfo om før/etter-situasjonved evnt endringer.
Sikkerhet ved 512 byte lagring
![Page 9: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/9.jpg)
SQL HiA
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 tabelli en felles UPDATE / INSERT.Tilordnes sekvensielt (1,2,…).Benyttes til UPDATE-tap vedCursor Stabilitet (CS) ogRelease Lock (RL) isolasjonsnivå,samt uendelig UPDATE / INSERT loop.
Eks: UPDATE TABLE YSet x = x + 1 WHERE x > 10
![Page 10: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/10.jpg)
SQL HiA
RowID - Entydig rad-identifikator
RowID
Page No.Fysisk sidenummerhvor raden befinner seg.
Slot No.Slot nummerinnen sidenhvor 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 å gjenfinneen tabell-rad fra databasen
Verifiserer hvorvidtraden fortsattokkuperer denne lokasjonen eller er slettetog eventuelterstattet av en annen rad
Verifiserereventuell oppdateringav raden
![Page 11: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/11.jpg)
SQL HiA
RowID
RowID SNr Navn PNr
CAAD 5 Nilsen 5002BACV 2 Olsen 6400ERCB 1 Hansen 9000EADD 4 Berg 6400
Selger (ID = SNr)
SNr Navn PNr
5 Nilsen 50022 Olsen 64001 Hansen 90004 Berg 6400
Selger (ID = SNr)
Et eksempel på en 3NF-tabell Selgermed tre kolonnerSNr, Navn og PNr RowID er en ekstra kolonne i hver tabell
som alltid kommer i tillegg til de kolonnenevi eksplisitt definerer.RowID er entydig for hver radog fungerer som en slags identifikator.
![Page 12: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/12.jpg)
SQL HiA
Extent Pages
Page Header Row Page HeaderPhysicalPage No.
3
PageTypeROW
Group No.20
LogicalPage No.
PreviousPage No.
NextPage No.
LogPointer Slot Size Free
Space
ExtentPage No.
7Slot Table
Slot 2
Page Header Row Page HeaderPhysicalPage No.
7
PageType
EXTENT
Group No.20
LogicalPage No.
PreviousPage No.
NextPage No.
LogPointer Slot Size Free
Space
ExtentPage No.
15Slot Table
Slot 2
Inneholder kolonner som ikke får plass i opprinnelig Row Page
![Page 13: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/13.jpg)
SQL HiA
Long VarChar Pages
Page Header Row Page HeaderPhysicalPage No.
3
PageTypeROW
Group No.20
LogicalPage No.
PreviousPage No.
NextPage No.
LogPointer Slot Size Free
Space
ExtentPage No.
1014Slot Table
Slot 2
Page Header Row Page HeaderPhysicalPage No.
7
PageType
LONG
Group No.20
LogicalPage No.
PreviousPage No.
NextPage No.
LogPointer Slot Size Free
Space
ExtentPage No.
1015Slot Table
Slot 2
Long VarChar kolonner plasseres i egne Long Pages
![Page 14: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/14.jpg)
SQL HiA
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
![Page 15: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/15.jpg)
SQL HiA
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.
![Page 16: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/16.jpg)
SQL HiA
Indekser
• B-Trær Indeks bygget opp som tre-struktur.Benyttes både på primary keys og foreign
keys.
• Hash-tabeller Nøkkel-tranformering.Benyttes typisk på primary key (ID).Clustered Index:Bestemmer fysisk rekkefølge på datai 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.
![Page 17: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/17.jpg)
SQL HiA
CREATE INDEX
Oppretter en indeks
CREATE INDEX index nameUNIQUE CLUSTERED HASHED
,ON table name ( column name )
ASCDESC
PCTFREE integer constant SIZE integer value ROWSBUCKETS
Max size = 6 + number of + sum of <= 255columns in length of allindex columns in
index
![Page 18: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/18.jpg)
SQL HiA
CREATE INDEX - Eksempel
CREATE UNIQUE CLUSTERED HASHED INDEX hSNdxON Selger (SNrID)SIZE 100 ROWS
CREATE UNIQUE INDEX Bidndx ON Bedrift (BedriftsID)
CREATE INDEX BnNdx ON Bedrift (BedriftsNavn)
CREATE INDEX SNavnNdxON BEDRIFT (@UPPER(Navn))
![Page 19: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/19.jpg)
SQL HiA
Clustered Index / Non-Clustered Index
Index
Data
Clustered Non-Clustered
![Page 20: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/20.jpg)
SQL HiA
Indekser i form av trestruktur
…..
![Page 21: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/21.jpg)
SQL HiA
Binært tre
42
817
Søk etter tallet 15
Hver node inneholder maksimum 2 barn.
Minimum-høyden av et binært tre som inneholder N noder er [log2N] + 1.Eks: Et tre med 100 noder vil ha minst 7 nivåer.
![Page 22: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/22.jpg)
SQL HiA
Multiway tre
42 81
95 1077 24
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.
50 61
![Page 23: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/23.jpg)
SQL HiA
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.
![Page 24: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/24.jpg)
SQL HiA
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å
12 15 25 31 41 59 91
21 48 72
1-4-8-11 12-13 15-18-19 21-24 25-26 31-38 41-43-46 48-49-50 59-68 72-78 84-88 91-92-99
84
Eks:B-tre av orden 3
Løv
Database
![Page 25: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/25.jpg)
SQL HiA
B-trær Eks: Innsetting i et B-tre (1)
8,11,12 16,17 41,5222,23,31 58,59,61
16:- 41:58
22:-
Løv
Forenkling: Tenker oss at hver node kan inneholde max tre nøkler og tre barn
![Page 26: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/26.jpg)
SQL HiA
B-trær Eks: Innsetting i et B-tre (2)
8,11,12 16,17,18 41,5222,23,31 58,59,61
16:- 41:58
22:-
![Page 27: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/27.jpg)
SQL HiA
B-trær Eks: Innsetting i et B-tre (3)
1,8 11,12 41,5222,23,31 58,59,61
11:16 41:58
22:-
16,17,18
![Page 28: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/28.jpg)
SQL HiA
B-trær Eks: Innsetting i et B-tre (4)
1,8 11,12 41,5222,23,31 58,59,61
11:16 41:58
22:-
16,17 18,19
![Page 29: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/29.jpg)
SQL HiA
B-trær Eks: Innsetting i et B-tre (5)
1,8 11,12 41,5222,23,31 58,59,61
11:- 41:58
16:22
16,17 18,19
18:-
![Page 30: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/30.jpg)
SQL HiA
B-trær Eks: Innsetting i et B-tre (6)
1,8 11,12 41,5222,23 58,59,61
11:- 41:58
16:22
16,17 18,19
18:-
28,31
![Page 31: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/31.jpg)
SQL HiA
B-trær Eks: Innsetting i et B-tre (7)
1,8 11,12 41,5222,23 58,59,61
11:- 58:-
16:22
16,17 18,19
18:-
28,31
28:-
![Page 32: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/32.jpg)
SQL HiA
B-trær Eks: Innsetting i et B-tre (8)
1,8 11,12 41,5222,23 58,59,61
11:- 58:-
22:-
16,17 18,19
18:-
28,31
28:-
16:- 41:-
![Page 33: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/33.jpg)
SQL HiA
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:
![Page 34: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/34.jpg)
SQL HiA
Prefix B+-tre
Prefix B+-tre er et B+-trehvor kun den delen av Key som er nødvendig mht entydighetlages i index-nodene.
Avkortede Key-verdier
SQLBase benytter Prefix B+-tre
![Page 35: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/35.jpg)
SQL HiA
Hashing / Nøkkel-transformering / Randomisering
HashingKey Transformed Key
![Page 36: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/36.jpg)
SQL HiA
Nøkkel-transformering
123456789...
PNr
123456789...
ID
PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID
![Page 37: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/37.jpg)
SQL HiA
Nøkkel-transformering
6 4 7 2 1KundeNr TverrSum
Distrikt
![Page 38: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/38.jpg)
SQL HiA
Nøkkel-transformering
6 4 7 2 3KundeNr Siste siffer i tverrsummen av
siste siffer i produktene
6 4 7 21 2 3 46 8 21 8
KundeNr
Vekttall
Produkt
![Page 39: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/39.jpg)
SQL HiA
Nøkkel-transformering
32191
51877
77638
PNr ID
PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID
32191
51877
77638
Ubenyttet1 … 10000
![Page 40: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/40.jpg)
SQL HiA
Hash-tabeller
34
67
8
21
73
62
68
86
6
7
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
3
4
1
2
5
8
ID Trans
34 467 78 121 373 862 768 786 9
34
67
![Page 41: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/41.jpg)
SQL HiA
Nøkkel-tranformering - Folding
Nøkkel-transformering
ID = 29384756 PostNr [ 1 - 1000 ]
2 9 3 8 4 7 5 6
7 6 9 4
7 7 0
+
+ 1
![Page 42: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/42.jpg)
SQL HiA
Nøkkel-transformering - Divisjon-rest-metoden
Nøkkel-transformering
ID = 29384756 PostNr [ 1 - 1000 ]
2 9 3 8 4 7 5 6 : 9 9 7
1 7 5
![Page 43: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/43.jpg)
SQL HiA
Nøkkel-tranformering - Uheldig tranformering
HSize = 10000KeySize = 8
HValueMax = 8 * 127 = 1016
1016
10000
Tranformering av hvert tegn i Keytil tilhørende ordinal-verdi:
![Page 44: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/44.jpg)
SQL HiA
Ulike nøkkel-transformeringer
int Hash1(char* Key, int HSize){return ((int)Key[0] + (int)Key[1] + (int)Key[2]) % HSize;
}
TransformedKey Data
Key
int Hash2(char* Key, int HSize){return ((int)Key[0] + 27 * (int)Key[1] + 729 * (int)Key[2]) % HSize;
}
![Page 45: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/45.jpg)
SQL HiA
Ulike nøkkel-transformeringer
Key KeySize i i
i
KeySize
*320
1
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;
}
TransformedKey Data
Key
![Page 46: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/46.jpg)
SQL HiA
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-intervalletved å ta divisjonsresten med minste primtall som er større enn eller lik antall sider.
3. Transformer output fra 2 til en fysisk side adresseved å legge til start side-nummer for for første rad i tabellen.
![Page 47: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/47.jpg)
SQL HiA
Hashing a key to a database page - SQLBase - Eks
1. 9 3 0 5 E J S M --> 57 51 48 53 69 74 83 77ASCII
1A. Key1 = 57 51 48 53Key2 = 69 74 83 77
1B. Key1 = 0011 1001 0011 0011 0011 0000 0011 0101XOR Key2 = 0100 0101 0100 1010 0101 0011 0100 1101-------------------------------------------------------------------------= xKey = 0111 1100 0111 1001 0110 0011 0111 1000 = 124 121 99 120 ASCII
1C. ~xKey = 1000 0011 1000 0110 1001 1100 1000 0111 = 131 134 156 135 ASCIIbfKey = 2206637191 (fullword key)
2. Page Adresses 0 - 1752 (1753 hash buckets)2206637191 MOD 1753 = 1110
3. Første side-adresse for tabellen er 60 => Side-adresse = 1110 + 60 = 1170
![Page 48: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/48.jpg)
SQL HiA
Flerbrukersystem Client / Server
DatabaseDBMS
Application_2
SQL-Request
Data
Application_3
Application_1
Client Server
![Page 49: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/49.jpg)
SQL HiA
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
MID PID Count
...ACI 41 139...
MID PID Count
...ACI 41 39...
MID PID Count
...ACI 41 14...
Accept Order for 100
Accept Order for 125
Joe’s Program Products Table Mary’s Program
![Page 50: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/50.jpg)
SQL HiA
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
MID PID Count
...ACI 41 139...
MID PID Count
...ACI 41 39...
MID PID Count
...ACI 41 139...
Accept Order for 100
Refuse Order for 125
Joe’s Program Products Table Mary’s Program
ROLLBACK
![Page 51: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/51.jpg)
SQL HiA
Inkonistens problem i et flerbrukersystem uten lås
DELETE FROM Orders WHERE ...
SELECT * FROM Orders
OrderNr Amount
112961 $31.500113012 $03.745
UPDATE Program Orders Table Report Program
OrderNr Amount
112961 $31.500113012 $03.745
OrderNr Amount
112961 $31.500113012 $03.745113102 $05.000
Answer: 112961 $31.000
Answer: 113012 $03.745
INSERT INTO Orders VALUES (113102, $05.000)
COMMIT Answer: 113102 $05.000
![Page 52: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/52.jpg)
SQL HiA
Låse-mekanismer
UPDATE Orders
SELECT FROM Offices
UPDATE Orders
UPDATE Offices
COMMIT
UPDATE Products
SELECT ... FROM Offices
COMMIT
Orders Offices ProductsU U U
Ok L A
L B Ok
Ok L A
Wait
Ok
Ok
Ok U U Ok
L B
U U Ok
Transaction A DBMS Transaction B
![Page 53: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/53.jpg)
SQL HiA
Shared Lock / Exclusive Lock
Unlocked SharedLock
ExclusiveLock
Unlocked
SharedLock
ExclusiveLock
Ok Ok Ok
Ok Ok No
Ok No No
Transaction B
Transaction A
S-lås Shared Lock Settes på database-siden når en brukerleser (SELECT) fra databasen.
X-lås Exclusive Lock Settes 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 avdatabase-sider (pages)som hver er på 1 K.En database-side kan kuninneholde rader fra en tabell.
![Page 54: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/54.jpg)
SQL HiA
Shared Lock / Exclusive Lock
UPDATE Orders
SELECT FROM Offices
UPDATE Orders
UPDATE Offices
COMMIT
UPDATE Products
SELECT ... FROM Offices
COMMIT
Orders Offices ProductsU U U
Ok EL A
EL B Ok
Ok SL A
SL A,B Ok
Ok SL A U Ok
Ok EL A
Ok U U
Transaction A DBMS Transaction B
SL = Shared LockEL = Exclusive Lock
![Page 55: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/55.jpg)
SQL HiA
Dead Lock
UPDATE Orders
UPDATE Products
Orders ProductsU U
Ok EL A
EL B Ok
W
Ok
W
Transaction A DBMS Transaction B
SL = Shared LockEL = Exclusive Lock
UPDATE Products
UPDATE Orders
![Page 56: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/56.jpg)
SQL HiA
Låse-mekanismer
• Database• Tabell• Side (Page) 1-2-4-16 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
![Page 57: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/57.jpg)
SQL HiA
Database access cycle
Connect
Databaseoperations
Disconnect
Prepare (Compile)
Execute
Fetch (for a SELECT)
Select, Insert,Update, Delete, ...
![Page 58: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/58.jpg)
SQL HiA
Connect / Disconnect
SqlDatabase DEMOSqlUser SYSADMSqlPassword SYSADM
SqlConnectSqlDisconnect
Predefinerte variable Default-verdier
Centura-funksjoner
![Page 59: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/59.jpg)
SQL HiA
Connect / Disconnect Eksempel
Global Declarations…Variables
Sql Handle: hSqlBoolean: bConnect
...On SAM_AppStartup
Set SqlDatabase = ‘Handel’Set SqlDatabase = ‘BrukerA’Set SqlPassword = ‘PBrA’Set bConnect = SqlConnect ( hSql )
On SAM_AppExitIf bConnect
Call SqlDisconnect ( hSql )
![Page 60: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/60.jpg)
SQL HiA
SqlHandle
Name of DbConnection
Sql Handle: hSql
Row Position in Result Set
Input message buffer
Output message buffer
Work Spacein Memory
![Page 61: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/61.jpg)
SQL HiA
Compiling and Exexuting SQL statements
SqlPrepare : Kompilerer et SQL statement
SqlExecute : Eksekverer et SQL statement
SqlPrepareAndExecute : Kompilerer og eksekverer et SQL statement
![Page 62: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/62.jpg)
SQL HiA
SELECT
1. Prepare (compile) SELECT statement2. Execute SELECT statement3. Benytt SqlFetch…
for å hente en rad inn i INTO variable
SqlFetchNext Henter neste rad i et resultatsettSqlFetchPrevious Henter forrige rad i et resultatsettSqlFetchRow Henter en gitt rad i et resultatsettSqlGetResultSetCount Returnerer antall rader i et resultatsettSqlSetResultSet Setter 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
![Page 63: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/63.jpg)
SQL HiA
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 )
![Page 64: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/64.jpg)
SQL HiA
SqlImmediate
SqlImmediate
SqlConnectSqlPrepareSqlExecuteSqlFetchNext (SELECT)
SqlClearImmediate
Connect en intern SqlHandle,Prepare and Executea SQL Statement.
Disconnect SqlHandle fra SqlImmediate
![Page 65: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/65.jpg)
SQL HiA
Funksjoner for database-parametre Set / Get
SqlSetParameter Setter databaseparametre
SqlSetParameterAll Setter databaseparametre
SqlSetInMessage Setter størrelse på InputMessageBuffer (1-32K)
SqlSetIsolationLevel Setter isolasjonsnivå i tilknytning til S-lås
SqlSetLockTimeout Setter ventetid (-1,0,1…1800s)
SqlSetOutMessage Setter størrelse på OutputMessageBuffer (1-32K)
![Page 66: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/66.jpg)
SQL HiA
DBP_* parametre
DBP_AUTOCOMMIT On: Automatisk Commit ved SQL-statem.
DBP_BRAND Ulike databaser (DBV_BRAND_SQL, …)
DBP_FETCHTHROUGH On: Henter rader direkte fra datab.server
DBP_LOCKWAITTIMEOUT Tall som viser ventetid (-1,0,1…1800s)
DBP_NOPREBUILD On: Ingen prebuild av resultatsett ved ResultSetMode og RL.S-lås settes på gjeldende side.
DBP_PRESERVE On: Bevarer resultatsett ved Commit
DBP_ROLLBACKONTIMEOUT On: Rollback ved timeout
DBP_VERSION Database server versjon
![Page 67: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/67.jpg)
SQL HiA
DBP_BRAND
DBV_BRAND_ALLBASE Hewlett-Packard ALLBASEDBV_BRAND_AS400 IBM AS/400DBV_BRAND_CINCOM-SUPRA Cincom SupraDBV_BRAND_DB2 IBM DB2DBV_BRAND_INFORMIX InformixDBV_BRAND_INFORMIX-ONLINE Informix OnlineDBV_BRAND_ORACLE OracleDBV_BRAND_ORACLE7 Oracle v.7DBV_BRAND_OS2EE IBM OS/2 EEDBV_BRAND_SQL SQLBaseDBV_BRAND_SYBASE SQL Server
![Page 68: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/68.jpg)
SQL HiA
DBP_LOCKWAITTIMEOUT
Verdi Beskrivelse
1-1800 Ventetid for en lås ( 1 sek - 30 min, 300 s default )-1 Vent for evig0 Ingen venting
![Page 69: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/69.jpg)
SQL HiA
Input / Output Message Buffer (as seen from Client)
DatabaseDBMS
Application
SQL-Request
Data
Input Message Buffer
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
![Page 70: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/70.jpg)
SQL HiA
Resultatsett
DatabaseDBMS
Application
SQL-Request
Data
SELECT SNr, Navn, PNrFROM SelgerWHERE PNr = 6400
SNr Navn PNr
5 Nilsen 50022 Olsen 64001 Hansen 90004 Berg 6400
Tabellen Selger
SNr Navn PNr
2 Olsen 64004 Berg 6400
Resultatsett
Client Server
Fetch
![Page 71: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/71.jpg)
SQL HiA
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-statementved spesielle komplekse spørringer.
Innholdet i resultatsettets løvsider er pekere (ROWIDs)til rader i tabeller som tilfredsstiller SELECT-statementet.
…..
RowID
![Page 72: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/72.jpg)
SQL HiA
RowID
SELECT …..
Resultat-settav
løv-pekere
RowID 1RowID 2RowID 3
...
Resultat-settav
temporær tabell-data
…..…..…..…..
![Page 73: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/73.jpg)
SQL HiA
Resultatsett - RowID - Single tabell
Resultat-settav
løv-pekere
AABCAABE
ROWID SNr Navn PNr
AABB 5 Nilsen 5002AABC 2 Olsen 6400AABD 1 Hansen 9000AABE 4 Berg 6400
Selger (ID = SNr)
SELECT SNr, NavnFROM SelgerWHERE PNr = 6400
![Page 74: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/74.jpg)
SQL HiA
Resultatsett - RowID - Join
Resultat-settav
løv-pekere
ROWID SNr Navn PNr
AABB 5 Nilsen 5002AABC 2 Olsen 6400AABD 1 Hansen 9000AABE 4 Berg 6400
Selger (ID = SNr)
SELECT Selger.SNr, Selger.Navn, Selger.PNr, Adr.StedFROM Selger, AdrWHERE Selger.PNr = Adr.PNrID AND
Selger.PNr = 6400
ROWID PNrID Sted
GGHA 5002 BergenGGHB 6400 MoldeGGHC 9000 Tromsø
Adr (ID = PNr)
Selger-RowID Adr-RowID--------------------------------------AABC GGHBAABE GGHB
![Page 75: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/75.jpg)
SQL HiA
Resultatsett - RowID - Beregnede verdier
Resultat-settav
RowID til tmpTbl
ROWID SNr Navn PNr
AABB 5 Nilsen 5002AABC 2 Olsen 6400AABD 1 Hansen 9000AABE 4 Berg 6400
Selger (ID = SNr)
SELECT Selger.SNr, Selger.Navn, SUM(Mg)FROM Selger, SalgWHERE Selger.SNrID = Salg.SNrIDGROUP BY Selger.SNr, Selger.Navn
XXAAXXABXXACXXAD
ROWID SNr VNr Mg
YYAA 5 8 30YYAB 2 1 20YYAC 2 3 10YYAD 1 5 50YYAE 1 8 40YYAF 4 1 70YYAG 4 3 50YYAH 4 5 20
Salg (ID = SNr + VNr)
RowID SNrID Navn Sum(Mg)--------------------------------------------XXAA 1 Hansen 90XXAB 2 Olsen 30XXAC 4 Berg 140XXAD 5 Nilsen 30
Temporær tabell med resultat-rader
![Page 76: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/76.jpg)
SQL HiA
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, ‘‘ )
![Page 77: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/77.jpg)
SQL HiA
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 databasenog tidsgyldigheten av resultatsettet.
Låser implementeres i SQLBase vha en intern HashTabell.
![Page 78: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/78.jpg)
SQL HiA
Isolation Level - Consistency / Concurrency
RR (Read Repeatability) Alle sider som brukeren aksesserer (Fethed) er låst for andreinntil 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 bufferpå 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 updatefra en annen transaksjon), men slippes straks etter fetch.
4 isolasjons-nivåer:
Gjelder for alle cursors i en transaksjon
![Page 79: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/79.jpg)
SQL HiA
Isolation Level
bok = SqlSetIsolationLevel ( hSql, sIsolationLevel )
sIsolationLevel = RRCSRORL
RR (Read Repeatability er default).
Isolation Level som settes gjelder for alle cursorsi transaksjonen for denne brukeren.
Endring av Isolation Level medfører en implisitt Commit.
![Page 80: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/80.jpg)
SQL HiA
RR - Read Repeatability
RR (Read Repeatability) Alle sider som brukeren aksesserer er låst for andreinntil commit på transaksjonen.Garanterer lese-konsistens, men forårsaker mye venting.
Row 1Row 2Row 3Row 4
S-lås
S-lås
Resultatsett
Database sider (pages)
S-lås
![Page 81: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/81.jpg)
SQL HiA
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 bufferpå serveren og over nettverket til klienten.Forårsaker større nettverkstrafikk.Rader i resultatsettet kan bli endret av andre.
Row 1Row 2Row 3Row 4 S-lås
Resultatsett
Database sider (pages)
Fetch
![Page 82: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/82.jpg)
SQL HiA
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
Row 1Row 2Row 3Row 4 Lås fra annen bruker
Resultatsett
Database sider (pages)
![Page 83: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/83.jpg)
SQL HiA
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 updatefra en annen transaksjon), men slippes straks etter fetch.
Row 1Row 2Row 3Row 4
S-lås som slippesstraks resultatsetteter ferdig generert
Resultatsett
Database sider (pages)
Fetch
S-lås settes ved Fetch-operasjon(pga evnt uncommited update),men slippes straks etter.
![Page 84: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/84.jpg)
SQL HiA
FetchThrough
bOk = SqlSetParameter ( hSql, nParameter, nNumber, sString ) Syntaks
bOk = SqlSetParameter ( hSqlA, DBP_FETCHTHROUGH, TRUE, ‘‘ ) Eksempel
Row 1Row 2Row 3Row 4
Resultatsett
Database sider (pages)
Fetch
DBP_FETCHTHROUGH
![Page 85: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/85.jpg)
SQL HiA
Isolation Level
Isolation Level Locks (S-Locks) Data Consistency
RRLås holdes gjennomhele transaksjonen.Mer enn en sidekan være låst.
CS
Lås holdes kunpå den siden som inneholder gjeldende rad.
RO
RL
Ingen lås.Ingen INSERT,UPDATE, DELETE.
Lås slippesstraks vedend-of-fetch(når resultatsetteter ferdig generert).
User Concurrency
Høy Lav
Middels Middels
Høy Høyest
Lav Høy
![Page 86: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/86.jpg)
SQL HiA
Data Consistency - User Concurrency
DataConsistency
UserConcurrency
RO RR CS RL RO
![Page 87: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/87.jpg)
SQL HiA
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å serverfylles 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 datainntil 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 transaksjonenavsluttes, velg et isolasjonsnivå som holder S-lås inntil commit eller avslutt.
![Page 88: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/88.jpg)
SQL HiA
Isolation Level - Kriterier
Isolation Level Kriterie 1Buffere
RR Ja
Kriterie 2Contention
Kriterie 3Update
Kriterie 4Consistency
CS
RO
RL
Nei
Ja
Ja
Nei
Ja
Ja
Ja
Ja
Ja
Nei
Ja
Ja
Nei
Ja
Nei
![Page 89: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/89.jpg)
SQL HiA
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:
![Page 90: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/90.jpg)
SQL HiA
Fetch / Update av resultatsett rader i SQLBase (1)
SqlFetchNext ( hSql, nFetch )SqlFetchPrevious ( hSql, nFetch )SqlFetchRow ( hSql, nRow, nFetch )
Row 1Row 2Row 3Row 4
Slot
RowSerialNr RowUpdateSerialNr
FetchrRowID
1
2
3
LesPage
Les nBit1 for DeleteTest
4
Les Row (med pRowID) fra Pagefor test på Delete/Insert (RowSerialNr)og Update (RowUpdateSerialNr)
Resultatet fra testene ovenfor returneres gjennom nFetch
nFetch = FETCH_Delete Slettet siden forrige hentingFETCH_EOF Slutten / Begynnelsen av resultatsettetFETCH_Ok Henting ok, raden er ‘korrekt’FETCH_Update Oppdatert siden forrige henting
Page
Row
ResultatSett
![Page 91: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/91.jpg)
SQL HiA
Fetch av resultatsett rader i SQLBase (2)
Les rRowID i ResultatSett radLes Page ved å ved å benytte PageNumber i rRowIDLes nBit1 i SlotTable ved å benytte SlotKomponent i rRowIDIF 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 radELSE
IF RowUpdateSerialNumber(pRowID) != RowUpdateSerialNumber(rRowID)Raden er endret
ELSERaden i ResultatSett og Page er identiske
![Page 92: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/92.jpg)
SQL HiA
RowID validitering
Start
Ok
Prepare / Execute Select.
RowIDOk
Changed-rowprocessing
End
FetchRows
User changes a row
Prepare / Execute a DML
Errorprocessing
Commit
No No
YesYes
![Page 93: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/93.jpg)
SQL HiA
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 errornType : SQLERROR_Reason Error code reason
SQLERROR_Remedy Error messagestrError : Begrunnelse eller message tekstnLength : Maksimal lengde av strErrornRealLength: 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.
![Page 94: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/94.jpg)
SQL HiA
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_SqlErrorlParam : Verdien av lparam argument i SAM-SqlErrorhSql : 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.
![Page 95: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/95.jpg)
SQL HiA
SQL Error
Application Actions…On SAM_SqlError
Call SqlExtractArgs ( wParam, lParam, hSqlError, nErr, nPos )
……
When SqlError…
…
![Page 96: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/96.jpg)
SQL HiA
SQL Error
Start
WhenSqlE.
SqlE-WhenStatem.
Return SAMSqlE.
ReturnValueblir Sql*
function return
SqlE-WhenStatem.
SAMSqlE.
ReturnValueblir Sql*
function return
DefaultError handling.
End
Yes
No
Yes
No
Yes
No
![Page 97: K10](https://reader035.fdocuments.net/reader035/viewer/2022070517/58cf0c331a28ab5f2b8b5cb3/html5/thumbnails/97.jpg)
SQL HiA
End