dat 2800 databaser i
DESCRIPTION
DAT 2800 Databaser I. Flerbrukerproblematikk. FlerbrukersystemClient / Server. Client. Server. Database. DBMS. Application_1. SQL-Request. Data. Application_2. Application_3. Database-sider (Pages). c:\centura\.dbs. Physical Page No 1 1024 bytes total. - PowerPoint PPT PresentationTRANSCRIPT
SQL HiA
DAT 2800Databaser I
Flerbrukerproblematikk
SQL HiA
Flerbrukersystem Client / Server
DatabaseDBMSDBMS
Application_2Application_2
SQL-Request
Data
Application_3Application_3
Application_1Application_1
Client Server
SQL HiA
Database-sider (Pages)
Physical Page No 1
1024 bytes total
Physical Page No 1
1024 bytes total
Physical Page No 2
1024 bytes total
Physical Page No 2
1024 bytes total
Physical Page No 3
1024 bytes total
Physical Page No 3
1024 bytes total
…..
Logical File Offset
0 1023 1024 2047 2048 3071
c:\centura\<DatabaseName>.dbs
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
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.
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
SQL HiA
Row Pages
Page HeaderPage Header
Row Page HeaderRow Page Header
FreespaceFreespace
Page FooterPage Footer
Slot Table
Slot 5 Slot 4
Slot 3 Slot 1Slot 2
SQL HiA
Row Pages
Page HeaderPage Header Row Page HeaderRow Page Header
PhysicalPage No.
PhysicalPage No.
PageType
PageType Group No.Group No. Logical
Page No.
LogicalPage No.
PreviousPage No.
PreviousPage No.
NextPage No.
NextPage No.
LogPointer
LogPointer Slot SizeSlot Size Free
Space
FreeSpace
ExtentPage No.
ExtentPage No.
FreespaceFreespace
Slot Table
Entry 1 Entry 2 Entry 3
Page Footer Log PointerPage Footer Log Pointer
Slot 5 Slot 4
Slot 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
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
SQL HiA
RowID - Entydig rad-identifikator
RowIDRowID
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
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 tabellsom alltid kommer i tillegg til de kolonnenevi eksplisitt definerer.RowID er entydig for hver radog fungerer som en slags identifikator.
SQL HiA
Extent Pages
Page HeaderPage Header Row Page HeaderRow Page Header
PhysicalPage No.
3
PhysicalPage No.
3
PageTypeROW
PageTypeROW
Group No.20
Group No.20
LogicalPage No.
LogicalPage No.
PreviousPage No.
PreviousPage No.
NextPage No.
NextPage No.
LogPointer
LogPointer Slot SizeSlot Size Free
Space
FreeSpace
ExtentPage No.
7
ExtentPage No.
7
Slot Table
Slot 2
Page HeaderPage Header Row Page HeaderRow Page Header
PhysicalPage No.
7
PhysicalPage No.
7
PageType
EXTENT
PageType
EXTENTGroup No.
20
Group No.20
LogicalPage No.
LogicalPage No.
PreviousPage No.
PreviousPage No.
NextPage No.
NextPage No.
LogPointer
LogPointer Slot SizeSlot Size Free
Space
FreeSpace
ExtentPage No.
15
ExtentPage No.
15
Slot Table
Slot 2
Inneholder kolonner som ikke får plass i opprinnelig Row Page
SQL HiA
Long VarChar Pages
Page HeaderPage Header Row Page HeaderRow Page Header
PhysicalPage No.
3
PhysicalPage No.
3
PageTypeROW
PageTypeROW
Group No.20
Group No.20
LogicalPage No.
LogicalPage No.
PreviousPage No.
PreviousPage No.
NextPage No.
NextPage No.
LogPointer
LogPointer Slot SizeSlot Size Free
Space
FreeSpace
ExtentPage No.
1014
ExtentPage No.
1014
Slot Table
Slot 2
Page HeaderPage Header Row Page HeaderRow Page Header
PhysicalPage No.
7
PhysicalPage No.
7
PageType
LONG
PageType
LONGGroup No.
20
Group No.20
LogicalPage No.
LogicalPage No.
PreviousPage No.
PreviousPage No.
NextPage No.
NextPage No.
LogPointer
LogPointer Slot SizeSlot Size Free
Space
FreeSpace
ExtentPage No.
1015
ExtentPage No.
1015
Slot Table
Slot 2
Long VarChar kolonner plasseres i egne Long Pages
SQL HiA
Overflow Pages - Designed Overflow Pages
Page 1Page 1 Page 2Page 2 Page 3Page 3 Page NPage N... Page 1Page 1 Page 2Page 2 Page 3Page 3 Page NPage N...
Avsettes plass til eventuelle overløps-rader for hver N page
SQL HiA
Overflow Pages - Dynamically Created Overflow Pages
Page 1Page 1 Page 2Page 2 Page 3Page 3 Page NPage N... Page 1Page 1 Page 2Page 2 Page 3Page 3 Page NPage N...
Hvis et ikke er plass til overløps-poster i Designed Overflow Pages,opprettes dynamiske overløps-sider.
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.
SQL HiA
CREATE INDEX
Oppretter en indeksOppretter 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
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))
SQL HiA
Clustered Index / Non-Clustered Index
Index
Data
Clustered Non-Clustered
SQL HiA
Indekser i form av trestruktur
…..
SQL HiA
Binært tre
4242
818177
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.
SQL HiA
Multiway tre
42 8142 81
95 10795 1077 247 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 6150 61
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.
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
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
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:-
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
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
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:-
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
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:-
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:-
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:
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
SQL HiA
Hashing / Nøkkel-transformering / Randomisering
HashingKey Transformed Key
SQL HiA
Nøkkel-transformering
123456789...
PNr
123456789...
ID
PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID
SQL HiA
Nøkkel-transformering
6 4 7 2 1KundeNr TverrSum
Distrikt
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
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
SQL HiA
Hash-tabeller
3434
6767
88
2121
7373
6262
6868
8686
66
77
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
33
44
11
22
55
88
IDID TransTrans
34 467 78 121 373 862 768 786 9
34
67
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
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
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:
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;
}
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
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.
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
SQL HiA
Flerbrukersystem Client / Server
DatabaseDBMSDBMS
Application_2Application_2
SQL-Request
Data
Application_3Application_3
Application_1Application_1
Client Server
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
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
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
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
SQL HiA
Shared Lock / Exclusive Lock
UnlockedSharedLock
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.
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
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
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
SQL HiA
Database access cycle
Connect
Databaseoperations
Disconnect
Prepare (Compile)
Execute
Fetch (for a SELECT)
Select, Insert,Update, Delete, ...
SQL HiA
Connect / Disconnect
SqlDatabase DEMOSqlUser SYSADMSqlPassword SYSADM
SqlConnectSqlDisconnect
Predefinerte variable Default-verdier
Centura-funksjoner
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 )
SQL HiA
SqlHandle
Name of DbConnectionName of DbConnection
Sql Handle: hSql
Row Position in Result SetRow Position in Result Set
Input message bufferInput message buffer
Output message bufferOutput message buffer
Work Spacein Memory
SQL HiA
Compiling and Exexuting SQL statements
SqlPrepare : Kompilerer et SQL statement
SqlExecute : Eksekverer et SQL statement
SqlPrepareAndExecute : Kompilerer og eksekverer et SQL statement
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
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 )
SQL HiA
SqlImmediate
SqlImmediate
SqlConnectSqlPrepareSqlExecuteSqlFetchNext (SELECT)
SqlClearImmediate
Connect en intern SqlHandle,Prepare and Executea SQL Statement.
Disconnect SqlHandle fra SqlImmediate
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)
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
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
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
SQL HiA
Input / Output Message Buffer (as seen from Client)
DatabaseDBMSDBMS
ApplicationApplication
SQL-Request
Data
Input Message BufferInput Message Buffer
Input Message BufferInput Message Buffer
Output Message BufferOutput Message Buffer
hSql1
hSql2
Input Message BufferInput Message Buffer
Output Message BufferOutput Message Buffer
Input Message BufferInput Message Buffer
Output Message BufferOutput Message Buffer
hSql1 Input Message BufferInput Message Buffer
Output Message BufferOutput Message Buffer
Application 1
Application 2
Output Message BufferOutput Message Buffer
SQL HiA
Resultatsett
DatabaseDBMSDBMS
ApplicationApplication
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
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
SQL HiA
RowID
SELECT ….. SELECT …..
Resultat-settav
løv-pekere
Resultat-settav
løv-pekere
RowID 1RowID 2RowID 3
...
RowID 1RowID 2RowID 3
...
Resultat-settav
temporær tabell-data
Resultat-settav
temporær tabell-data
…..…..…..…..
…..…..…..…..
SQL HiA
Resultatsett - RowID - Single tabell
Resultat-settav
løv-pekere
Resultat-settav
løv-pekere
AABCAABE
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
SQL HiA
Resultatsett - RowID - Join
Resultat-settav
løv-pekere
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
SQL HiA
Resultatsett - RowID - Beregnede verdier
Resultat-settav
RowID til tmpTbl
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
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, ‘‘ )
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.
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
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.
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
Row 1Row 2Row 3Row 4
S-lås
S-lås
Resultatsett
Database sider (pages)
S-lås
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
Row 1Row 2Row 3Row 4 S-lås
Resultatsett
Database sider (pages)
Fetch
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).
xx
Row 1Row 2Row 3Row 4
Row 1Row 2Row 3Row 4 Lås fra annen bruker
Resultatsett
Database sider (pages)
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
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.
SQL HiA
FetchThrough
bOk = SqlSetParameter ( hSql, nParameter, nNumber, sString ) Syntaks
bOk = SqlSetParameter ( hSqlA, DBP_FETCHTHROUGH, TRUE, ‘‘ ) Eksempel
Row 1Row 2Row 3Row 4
Row 1Row 2Row 3Row 4
Resultatsett
Database sider (pages)
Fetch
DBP_FETCHTHROUGH
SQL HiA
Isolation Level
Isolation LevelIsolation Level Locks (S-Locks)Locks (S-Locks) Data ConsistencyData Consistency
RRRRLås holdes gjennomhele transaksjonen.Mer enn en sidekan være låst.
CSCS
Lås holdes kunpå den siden som inneholder gjeldende rad.
RORO
RLRL
Ingen lås.Ingen INSERT,UPDATE, DELETE.
Lås slippesstraks vedend-of-fetch(når resultatsetteter ferdig generert).
User ConcurrencyUser Concurrency
Høy Lav
Middels Middels
Høy Høyest
Lav Høy
SQL HiA
Data Consistency - User Concurrency
DataConsistency
UserConcurrency
RO RR CS RL RO
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.
SQL HiA
Isolation Level - Kriterier
Isolation LevelIsolation Level Kriterie 1Buffere
Kriterie 1Buffere
RRRR JaJa
Kriterie 2Contention
Kriterie 2Contention
Kriterie 3Update
Kriterie 3Update
Kriterie 4Consistency
Kriterie 4Consistency
CSCS
RORO
RLRL
NeiNei
JaJa
JaJa
NeiNei
JaJa
JaJa
JaJa
JaJa
JaJa
NeiNei
JaJa
JaJa
NeiNei
JaJa
NeiNei
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:
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
Row 1Row 2Row 3Row 4
SlotSlot
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
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
SQL HiA
RowID validitering
StartStart
OkOk
Prepare / Execute Select.Prepare / Execute Select.
RowIDOk
RowIDOk
Changed-rowprocessing
Changed-rowprocessing
EndEnd
FetchRowsFetchRows
User changes a rowUser changes a row
Prepare / Execute a DMLPrepare / Execute a DML
Errorprocessing
Errorprocessing
CommitCommit
No No
YesYes
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.
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.
SQL HiA
SQL Error
Application Actions…On SAM_SqlError
Call SqlExtractArgs ( wParam, lParam, hSqlError, nErr, nPos )
……
When SqlError…
…
SQL HiA
SQL Error
StartStart
WhenSqlE.
WhenSqlE.
SqlE-WhenStatem.SqlE-WhenStatem.
ReturnReturn SAMSqlE.
SAMSqlE.
ReturnValueblir Sql*
function return
ReturnValueblir Sql*
function return
SqlE-WhenStatem.SqlE-WhenStatem.
SAMSqlE.
SAMSqlE.
ReturnValueblir Sql*
function return
ReturnValueblir Sql*
function return
DefaultError handling.
DefaultError handling.
EndEnd
Yes
No
Yes
No
Yes
No
SQL HiA
End