Krenite na Access izlet kroz SQL poslužitelj

Krenite na Access izlet kroz SQL poslužitelj

Nakon što migrirate podatke iz programa Access na SQL Server, imate klijentsko-poslužiteljsku bazu podataka, koja može biti izvedena lokalno ili pak kao hibridno rješenje u oblaku Azure. U svakom slučaju, Access sada čini prezentacijski, a SQL Server podatkovni sloj. Sada je dobar trenutak da opet razmislite o aspektima rješenja, osobito o performansama upita, sigurnosti i neprekidnosti poslovanja kako biste mogli unaprijediti i skalirati svoje rješenje koje se oslanja na bazu podataka.

Pristupite lokalno i u oblaku

Korisnicima programa Access prvi se susret s dokumentacijom vezanom za SQL Server i Azure može doimati zastrašujuće. Zbog toga vam treba vodič kroz najvažnija mjesta koja su vama relevantna. Kada završite ovaj izlet, bit ćete spremni za istraživanje pomaka u tehnologiji baza podataka i početak duljeg putovanja.

Sadržaj članka

Upravljanje bazom podataka

Omogućivanje neprekidnosti poslovanja

Sigurnost sustava SQL Server

Pitanja zaštite privatnosti

Stvaranje snimaka stanja baze podataka

Kontrola istodobnosti

Upiti i povezane teme

Poboljšavanje performansi upita

Načini postavljanja upita

Dodavanje ključeva i indeksa

Izvođenje transakcija

Korištenje ograničenja i okidača

Vrste podataka

Korištenje izračunatih stupaca

Vremensko označavanje podataka

Upravljanje velikim objektima

Razno

Rad s hijerarhijskim podacima

Rukovanje JSON tekstom



Resursi

Omogućivanje neprekidnosti poslovanja

Cilj vam je da vaše rješenje za Access bude u punom pogonu sa što manje prekida, ali pozadinska baza podataka programa Access pruža ograničene mogućnosti za to. Sigurnosno kopiranje baze podataka programa Access ključno je za zaštitu podataka, ali za to je neophodno da korisnici prekinu vezu s bazom. Tu je i neplanirani prazan hod zbog nadogradnji hardvera i softvera u sklopu održavanja, padova mreže ili napajanja, otkazivanja hardvera, sigurnosnih incidenata ili čak digitalnih napada. Da biste prazan hod i posljedice po svoju tvrtku sveli na najmanju moguću mjeru, bazu podataka sustava SQL Server možete sigurnosno kopirati tijekom njezina korištenja. Osim toga, SQL Server nudi i strategije visoke dostupnosti (HA) i oporavka od katastrofe (DR). Kombinacija tih dviju tehnologija naziva se HADR. Dodatne informacije potražite u članku Neprekidnost poslovanja i oporavak baze podataka te e-knjizi Omogućivanje neprekidnosti poslovanja uz SQL Server.

Sigurnosno kopiranje tijekom korištenja

SQL Server koristi mrežni proces sigurnosnog kopiranja tijekom rada, koji se može provoditi dok je baza podataka pokrenuta. Možete provesti puno ili djelomično sigurnosno kopiranje, ili pak sigurnosno kopiranje datoteka. Sigurnosno kopiranje kopira podatke i zapisnike transakcija da bi se osigurala potpunost operacije vraćanja. Osobito u slučaju lokalnog rješenja imajte na umu razlike između mogućnosti jednostavnog i potpunog oporavka te načina na koji one utječu na rast zapisnika transakcija. Dodatne informacije potražite u članku Modeli oporavka.

Većina operacija sigurnosnog kopiranja izvodi se odmah, osim operacija upravljanja datotekama i smanjivanja baze podataka. Nasuprot tome, ako pokušate stvoriti ili izbrisati datoteku baze podataka dok je postupak sigurnosnog kopiranja u tijeku, operacija neće uspjeti. Dodatne informacije potražite u članku Pregled sigurnosnog kopiranja.

HADR

Dvije su najčešće tehnike postizanja visoke dostupnosti i neprekidnosti poslovanja zrcaljenje i klasteriranje. SQL Server integrira tehnologije zrcaljenja i klasteriranja sa značajkama „Uvijek uključene instance klastera za prebacivanje u slučaju pogreške” i „Uvijek uključene grupe za dostupnost”.

Zrcaljenje je rješenje za neprekidnost na razini baze podataka koje podržava gotovo trenutno prebacivanje u slučaju pogreške putem održavanja baze podataka u stanju mirovanja – kompletne zrcalne kopije aktivne baze podataka na odvojenom hardveru. Ono može funkcionirati u sinkronom načinu rada (za visoku sigurnost), u kojem se dolazne transakcije istodobno provode na svim poslužiteljima, ili u asinkronom načinu rada (za visoke performanse), u kojem se dolazne transakcije provode na aktivnoj bazi podataka, a potom se u nekom unaprijed određenom trenutku prenose na njezinu zrcalnu kopiju. Zrcaljenje je rješenje na razini baze podataka te funkcionira samo s bazama podataka koje koriste potpuni model oporavka.

Klasteriranje je rješenje na razini poslužitelja, koje objedinjuje poslužitelje u jedinstveno spremište podataka koje korisniku izgleda kao jedna instanca. Korisnici se povezuju s instancom i nikad ne moraju saznati koji je poslužitelj u sklopu te instance trenutačno aktivan. Ako jedan poslužitelj otkaže ili se mora isključiti iz sustava radi održavanja, korisnikov se doživljaj neće promijeniti. Upravitelj klastera nadzire puls svih poslužitelja u klasteru i otkriva kada se aktivni poslužitelj u klasteru isključi iz sustava te se pokušava neprimjetno prebaciti na sljedeći poslužitelj u klasteru, premda tijekom prebacivanja dolazi do varijabilnog vremena kašnjenja.

Dodatne informacije potražite u članku Uvijek uključene instance klastera za prebacivanje u slučaju pogreške i Uvijek uključene grupe za dostupnost: rješenje za visoku dostupnost i oporavak od katastrofe.

Vrh stranice

Sigurnost sustava SQL Server

Premda bazu podataka programa Access možete zaštititi putem centra za pouzdanost i šifriranjem, SQL Server raspolaže naprednijim sigurnosnim značajkama. Pogledajmo tri mogućnosti koje korisniku programa Access upadaju u oči. Dodatne informacije potražite u članku Zaštita sustava SQL Server.

Provjera autentičnosti prilikom pristupanja bazi podataka

SQL Server raspolaže s četiri načina provjere autentičnosti prilikom pristupanja bazi podataka, a svaki od njih možete navesti u nizu za ODBC povezivanje. Dodatne informacije potražite u članku Povezivanje ili uvoz podataka iz baze podataka sustava Azure SQL Server. Svaka metoda ima određenih prednosti.

Integrirana provjera autentičnosti u sustavu Windows    Koristite vjerodajnice za Windows za provjeru valjanosti korisnika, sigurnosne uloge i ograničavanje korisnika na značajke i podatke. Možete primjenjivati domenske vjerodajnice i lako upravljati korisničkim pravima u aplikaciji. Ako želite, unesite nazive upravitelja servisa (SPN-ove). Dodatne informacije potražite u članku Odabir metode provjere autentičnosti.

Provjera autentičnosti u sustavu SQL Server    Korisnici se moraju povezati pomoću vjerodajnica postavljenih u bazi podataka, unoseći ID za prijavu i lozinku kada prvi put tijekom sesije pristupaju bazi podataka. Dodatne informacije potražite u članku Odabir metode provjere autentičnosti.

Integrirana provjera autentičnosti na servisu Azure Active Directory    Povezivanje s bazom podataka sustava Azure SQL Server pomoću servisa Azure Active Directory. Kada konfigurirate provjeru autentičnosti servisa Azure Active Directory, nije potrebno dodatno korisničko ime ni lozinka. Dodatne informacije potražite u članku Povezivanje sa SQL bazom podataka pomoću provjere autentičnosti servisa Azure Active Directory.

Provjera autentičnosti pomoću lozinke za Active Directory    Povezivanje s vjerodajnicama koje su postavljene na servisu Azure Active Directory putem unosa korisničkog imena i lozinke. Dodatne informacije potražite u članku Povezivanje sa SQL bazom podataka pomoću provjere autentičnosti servisa Azure Active Directory.

Savjet    Koristite otkrivanje prijetnji da biste primali upozorenja o neuobičajenim aktivnostima u bazi podataka koje ukazuju na potencijalne sigurnosne prijetnje bazi podataka sustava Azure SQL Server. Dodatne informacije potražite u članku Otkrivanje prijetnji SQL bazi podataka

Sigurnost aplikacija

SQL Server raspolaže dvjema mogućnostima zaštite na razini aplikacije koje možete koristiti putem programa Access.

Dinamičko maskiranje podataka    Sakrijte osjetljive podatke maskirajući ih pred neovlaštenim korisnicima. Možete, primjerice, maskirati brojeve socijalnog osiguranja, bilo djelomično ili u potpunosti.

Djelomična maska podataka

Djelomična podatkovna maska

Maska s potpunim podacima

Potpuna podatkovna maska

Podatkovne maske možete definirati na nekoliko načina te ih primjenjivati na različite vrste podataka. Maskiranje podataka regulira se pravilnicima na razini tablica i stupaca za definiran skup korisnika te se u stvarnom vremenu primjenjuje na upit. Dodatne informacije potražite u članku Dinamičko maskiranje podataka.

Zaštita na razini retka    Pomoću zaštite na razini retka možete na temelju karakteristika korisnika kontrolirati pristup specifičnim recima baze podataka koji sadrže osjetljive podatke. Ta ograničenja pristupa primjenjuje sustav baze podataka, što sustav zaštite čini pouzdanijim i robusnijim.

Sigurnost redaka SQL poslužitelja

Postoje dvije vrste sigurnosnih predikata:

  • Predikat filtra filtrira retke iz upita. Filtar je transparentan, a krajnji korisnik nije ni svjestan bilo kakvog filtriranja.

  • Predikat blokiranja sprječava neovlaštenu akciju i generira iznimku ako se ta akcija ne može provesti.

Dodatne informacije potražite u odjeljku Zaštita na razini retka.

Zaštita podataka šifriranjem

Možete zaštititi podatke u mirovanju, u tranzitu i dok su u upotrebi ne utječući pritom na performanse baze podataka. Dodatne informacije potražite u članku Šifriranje u sustavu SQL Server.

Šifriranje u mirovanju    Da biste zaštitili osobne podatke od napada na medij na sloju fizičke pohrane dok baza podataka nije u upotrebi, koristite šifriranje u mirovanju, koje se često naziva i transparentnim šifriranjem podataka (TDE). To znači da su vaši podaci zaštićeni čak i ako dođe do krađe ili neodgovarajućeg odlaganja fizičkih medija. TDE u stvarnom vremenu obavlja šifriranje i dešifriranje baza podataka, sigurnosnih kopija i zapisnika transakcija bez potrebe za bilo kakvim promjenama u aplikacijama.

Šifriranje u tranzitu    Da biste se zaštitili od njuškanja i „napada putem posrednika”, možete šifrirati podatke koji se prenose kroz mrežu. SQL Server podržava Transport Layer Security (TLS) 1.2 za vrlo sigurnu komunikaciju. Za zaštitu komuniciranja putem nepouzdanih mreža može se koristiti i protokol Tabular Data Stream (TDS).

Šifriranje na strani klijenta    Da biste zaštitili osobne podatke tijekom korištenja, potreba vam je značajka „Uvijek šifrirano”. Osobne podatke šifrira i dešifrira upravljački program na klijentskom računalu, koji ključeve za šifriranje ne otkriva mehanizmu baze podataka. Zbog toga se šifrirani podaci prikazuju samo osobama odgovornim za upravljanje tim podacima, a ne i drugim korisnicima s visokom razinom ovlasti, koji im ne bi trebali imati pristup. Ovisno o odabranoj vrsti šifriranja, značajka „Uvijek šifrirano” može ograničiti funkcije baze podataka kao što su pretraživanje, grupiranje i indeksiranje šifriranih stupaca.

Vrh stranice

Pitanja zaštite privatnosti

Pitanja zaštite privatnosti toliko su rasprostranjena da je Europska unija putem Opće uredbe o zaštiti podataka (GDPR-a) definirala pravne zahtjeve. Srećom, pozadina sustava SQL Server dobro je opremljena za udovoljavanje tim zahtjevima. Implementaciju GDPR-a promatrajte kao okvir razdvojen na tri koraka.

GDPR je postupak od tri koraka.

Prvi korak: Procjena rizika povezanog s usklađenosti i upravljanje njime

GDPR nalaže identifikaciju i inventuru osobnih podataka koje imate u tablicama i datotekama. Ti podaci mogu biti bilo što, od imena, fotografije, adrese e-pošte i bankovnih pojedinosti do objava na web-mjestima društvenih mreža, medicinskih podataka ili čak IP adrese.

Novi alat, Otkrivanje i klasifikacija SQL podataka, ugrađen u SQL Server Management Studio, omogućuje otkrivanje, klasifikaciju i označavanje osjetljivih podataka te izvješćivanje o njima primjenom dvaju metapodatkovnih atributa stupaca:

  • Oznake    Za definiranje osjetljivosti podataka.

  • Vrste podataka    Za omogućivanje dodatne granularnosti u ovisnosti o vrstama podataka pohranjenih u stupcu.

Drugi mehanizam otkrivanja koji možete koristiti jest pretraživanje cijelog teksta, što obuhvaća korištenje predikata CONTAINS i FREETEXT te funkcija čiji su rezultat skupovi redaka, kao što su CONTAINSTABLE i FREETEXTTABLE, u SELECT izrazima. Primjenom pretraživanja cijelog teksta možete pretraživati tablice da biste pronašli riječi, kombinacije riječi ili inačice riječi poput sinonima ili padežnih oblika. Dodatne informacije potražite u članku Pretraživanje cijelog teksta.

Drugi korak: Zaštita osobnih podataka

GDPR nalaže da zaštitite osobne podatke i ograničite pristup njima. Uz standardne korake koje poduzimate za upravljanje pristupom svojoj mreži i resursima, poput postavki vatrozida, kao pomoć pri kontroli pristupa podacima možete koristiti i sigurnosne značajke sustava SQL Server:

  • Provjera autentičnosti u sustavu SQL Server za upravljanje korisničkim identitetima i onemogućivanje neovlaštenog pristupa.

  • Sigurnost na razini retka radi ograničavanja pristupa recima tablice na temelju odnosa između korisnika i tih podataka.

  • Dinamičko maskiranje podataka radi ograničavanja izloženosti osobnih podataka njihovim maskiranjem pred korisnicima koji nemaju potrebne ovlasti.

  • Šifriranje radi osiguranja osobnih podataka tijekom prijenosa i skladištenja te njihove zaštite od ugroza, uključujući i one na strani poslužitelja.

Dodatne informacije potražite u članku Sigurnost sustava SQL Server.

Treći korak: Učinkovito reagiranje na zahtjeve

GDPR nalaže održavanje evidencije obrada osobnih podataka i predočavanje te evidencije nadzornim tijelima na njihov zahtjev. Ako se pojave problemi u sklopu kojih dođe do nehotičnog curenja podataka, kontrole zaštite omogućuju brz odgovor. Podaci moraju biti brzo dostupni kada se traži izvješćivanje. GDPR, primjerice, zahtijeva da se nadzorno tijelo o narušavanju sigurnosti osobnih podataka izvijesti „najkasnije 72 sata nakon što za to saznate”.

SQL Server 2017 pomaže u zadacima izvještavanja na nekoliko načina:

  • Nadzor sustava SQL Server osigurava postojanje trajnih zapisa o aktivnostima povezanim s pristupanjem bazi podataka i obradom podataka. On provodi detaljnu reviziju koja prati aktivnosti baze podataka kako bi olakšao razumijevanje i identifikaciju potencijalnih prijetnji, mogućih zloupotreba ili povreda sigurnosti. Možete smjesta provesti forenzičku analizu podataka.

  • Vremenske tablice sustava SQL Server korisničke su tablice kojima verzije dodjeljuje sustav, projektirane tako da se u njima sačuva potpuna povijest promjena podataka. Te tablice možete koristiti za jednostavno izvješćivanje i analizu vremenskih točaka.

  • Procjena ranjivosti za SQL omogućuje otkrivanje problema sa sigurnošću i dozvolama. Kada se otkrije problem, možete i dubinski analizirati izvješća o skeniranju baze podataka da biste definirali akcije za rješavanje problema.

Dodatne informacije potražite u e-knjizi Stvaranje platforme povjerenja i brošuri Put do usklađenosti s GDPR-om.

Vrh stranice

Stvaranje snimaka stanja baze podataka

Snimka stanja baze podataka statičan je prikaz baze podataka sustava SQL Server u određenoj vremenskoj točki, koji se može samo čitati. Iako u programu Access možete kopirati datoteku baze podataka da biste faktički stvorili snimku stanja baze podataka, Access nema ugrađenu metodologiju kao SQL Server. Snimku stanja baze podataka možete koristiti za pisanje izvješća koja se temelje na podacima u trenutku stvaranja te snimke. Snimke stanja možete koristiti i za održavanje povijesnih podataka, kao npr. čuvajući po jednu za svako financijsko tromjesečje i koristeći ih za sastavljanje izvješća za kraj vremenskog razdoblja. Preporučujemo ove najbolje primjere iz prakse:

  • Snimci stanja dajte naziv    Svaka snimka stanja baze podataka mora imati jedinstven naziv. U naziv dodajte svrhu i vremenski okvir radi lakše identifikacije. Na primjer, da biste stvarali snimke stanja baze podataka AdventureWorks tri puta dnevno u intervalima od 6 sati između 6.00 i 18.00 (prema 24-satnom satu), dajte im nazive AdventureWorks_snimka_stanja_0600, AdventureWorks_snimka_stanja_1200 i AdventureWorks_snimka_stanja_1800.

  • Ograničite broj snimki stanja    Svaka snimka stanja baze podataka čuva se sve dok je eksplicitno ne odbacite. Budući da će svaka sljedeća snimka stanja biti sve veća, bilo bi dobro čuvati diskovni prostor brisanjem starije snimke stanja nakon stvaranja nove. Ako, primjerice, radite dnevna izvješća, snimku stanja baze podataka čuvajte 24 sata, a zatim je odbacite i zamijenite novom.

  • Povežite se s odgovarajućom snimkom stanja    Da bi mogao koristiti snimku stanja baze podataka, pristupni dio programa Access mora znati njezino točno mjesto. Kada postojeću snimku stanja zamijenite novom, morate preusmjeriti Access na novu snimku. U pristupni dio programa Access dodajte logiku koja će osigurati povezivanje s pravom snimkom stanja baze podataka.

Evo kako se stvara snimka stanja baze podataka:

CREATE DATABASE AdventureWorks_dbss1800 ON  
( NAME = AdventureWorks_Data, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks_snapshot_0600' )  
AS SNAPSHOT OF AdventureWorks;  

Dodatne informacije potražite u članku Snimke stanja baze podataka (SQL Server).

Vrh stranice

Kontrola istodobnosti

Kada više osoba istodobno pokušava izmijeniti podatke u bazi podataka, potreban je sustav kontrole kako promjene koje je načinila jedna osoba ne bi negativno utjecale na one koje je načinio netko drugi. To se naziva kontrolom istodobnosti, a temelji se na dvije osnovne strategije zaključavanja, pesimističkoj i optimističkoj. Zaključavanje korisnicima onemogućuje mijenjanje podataka na način koji bi utjecao na ostale korisnike. Zaključavanje pomaže i osigurati integritet baze podataka, osobito u slučaju upita koji bi u suprotnom mogli dati neočekivane rezultate. Postoje bitne razlike između načina na koje Access i SQL Server implementiraju te strategije kontrole istodobnosti.

U programu Access zadana je strategija zaključavanja optimistička te se vlasništvo nad zaključavanjem odobrava prvoj osobi koja pokuša zapisivati u zapis. Drugoj osobi koja istodobno pokuša pisati u isti zapis Access prikazuje dijaloški okvir Sukob prilikom zapisivanja. Da bi se konflikt riješio, druga osoba može spremiti zapis, kopirati ga u međuspremnik ili odustati od promjena.

Za promjenu strategije kontrole istodobnosti možete upotrijebiti i svojstvo RecordLocks. To svojstvo utječe na obrasce, izvješća i upite, a ima tri postavke:

  • Bez zaključavanja    U obrascu korisnici mogu pokušati istodobno uređivati isti zapis, no može se pojaviti dijaloški okvir Sukob prilikom zapisivanja. U izvješćima se zapisi ne zaključavaju dok se izvješće pregledava ili ispisuje. U upitima se zapisi ne zaključavaju dok se upit izvodi. To je način na koji se u programu Access implementira optimističko zaključavanje.

  • Svi zapisi    Svi zapisi u temeljnoj tablici ili upitu zaključavaju se dok je obrazac otvoren u prikazima Obrazac ili Podatkovni list, dok se izvješće pregledava ili ispisuje te tijekom izvođenja upita. Korisnici tijekom zaključavanja mogu čitati zapise.

  • Uređivani zapis    U slučaju obrazaca i upita, stranica zapisa zaključava se čim bilo koji korisnik počne uređivati bilo koje polje zapisa te ostaje zaključana sve dok korisnik ne pređe na neki drugi zapis. Shodno tome, samo jedan korisnik u određenom trenutku može uređivati zapis. To je način na koji se u programu Access implementira pesimističko zaključavanje.

Dodatne informacije potražite u člancima Dijaloški okvir Sukob prilikom zapisivanja i Svojstvo RecordLocks.

U sustavu SQL Server kontrola istodobnosti funkcionira ovako:

  • Pesimistički    Kada korisnik provede akciju koja uzrokuje zaključavanje, drugi korisnici ne mogu provoditi akcije koje bi došle u sukob sa zaključavanjem sve dok vlasnik ne oslobodi zapis. Ta se kontrola istodobnosti koristi uglavnom u okruženjima u kojima je prisutno snažno nadmetanje za podatke.

  • Optimistički    U optimističkoj kontroli istodobnosti korisnici ne zaključavaju podatke dok ih čitaju. Kada korisnik ažurira podatke, sustav provjerava je li neki drugi korisnik mijenjao podatke nakon čitanja. Ako je drugi korisnik ažurirao podatke, prijavljuje se pogreška. Obično korisnik koji dobije poruku o pogrešci poništava svoju transakciju i počinje iznova. Ta se kontrola istodobnosti koristi uglavnom u okruženjima u kojima je prisutno slabo nadmetanje za podatke.

Vrstu kontrole istodobnosti možete odrediti tako da primjenom naredbe SET TRANSACTION odaberete nekoliko razina izolacije transakcija, kojima se definira razina zaštite transakcije od promjena koje načine druge transakcije:

 SET TRANSACTION ISOLATION LEVEL
 { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ  
    | SNAPSHOT
    | SERIALIZABLE
 }

Razina izolacije

Opis

Čitanje neprovedenog

Transakcije su izolirane tek toliko da se osigura da se ne čitaju fizički oštećeni podaci.

Čitanje provedenog

Transakcije mogu čitati podatke koje je prethodno pročitala neka druga transakcija ne čekajući dovršenje te druge transakcije.

Ponovljivo čitanje

Odabrani se podaci zaključavaju za čitanje i pisanje do kraja transakcije, ali može doći do fantomskog čitanja.

Snimka stanja

Koristi verzije redaka da bi se osigurala dosljednost čitanja na razini transakcije.

Serijalizabilno

Transakcije su potpuno izolirane jedna od druge.

Dodatne informacije potražite u članku Vodič kroz zaključavanje transakcija i praćenje verzija redaka.

Vrh stranice

Poboljšavanje performansi upita

Nakon što osposobite prolazne upite kroz Access, iskoristite prednosti sofisticiranijih načina na koje ih SQL Server može učinkovitije izvoditi.

Za razliku od baze podataka programa Access, SQL Server omogućuje paralelne upite kojima se optimiziraju izvođenje upita i operacije indeksiranja na računalima koja imaju više mikroprocesora (CPU-a). Budući da SQL Server može paralelno izvoditi operacije upita ili indeksiranja koristeći više sistemskih radnih niti, operacija se može dovršiti brzo i učinkovito.

Upiti su kritična komponenta za poboljšavanje ukupnih performansi rješenja koje se oslanja na bazu podataka. Loši upiti izvode se neodređeno dugo, sve do isteka vremena čekanja, i crpe resurse kao što su procesori, memorija i mrežna propusnost. To ugrožava dostupnost kritičnih poslovnih informacija. Čak i samo jedan loš upit može uzrokovati ozbiljne probleme s performansama baze podataka.

Dodatne informacije potražite u e-knjizi Brži upiti uz SQL Server.

Optimizacija upita

Nekoliko alata surađuje kako bi vam olakšali analiziranje i poboljšavanje performansi upita: optimizator upita, planovi izvršenja i spremište upita.

kako funkcionira optimizacija upita

Optimizator upita

Optimizator upita jedna je od najvažnijih komponenti sustava SQL Server. Pomoću optimizatora upita možete analizirati upit i odrediti najučinkovitiji način pristupanja traženim podacima. Ulazne podatke za optimizator upita čine upit, shema baze podataka (definicije tablica i indeksa) te statistike baze podataka. Izlazni je podatak optimizatora upita plan izvršenja.

Dodatne informacije potražite u članku Optimizator upita u sustavu SQL Server.

Plan izvršenja

Plan izvršenja je definicija sastavljena od niza izvornih tablica kojima treba pristupiti i metoda za izvlačenje podataka iz svake tablice. Optimizacija je postupak odabira jednog od potencijalno mnogih mogućih planova izvršenja. Svakom od mogućih planova izvršenja pridružena je cijena izražena u obliku količine potrebnih računalnih resursa, a optimizator upita bira onaj s najmanjom procijenjenom cijenom.

SQL Server mora se i dinamički prilagođavati promjenama uvjeta u bazi podataka. Regresije u planovima izvršenja upita mogu uvelike utjecati na performanse. Određene promjene u bazi podataka mogu uzrokovati da plan izvršenja postane neučinkovit ili nevaljan za novo stanje baze podataka. SQL Server otkriva promjene koje poništavaju planove izvršenja i označava plan kao nevaljan.

Za sljedeću vezu koja izvodi upit u tom se slučaju mora kompilirati novi plan. U uvjete koji poništavaju plan ubrajaju se:

  • Promjene u tablici ili prikazu na koji se upit poziva (ALTER TABLE i ALTER VIEW).

  • Promjene u indeksima koje plan izvršavanja koristi.

  • Ažuriranja statistika koje plan izvršavanja koristi, bilo da su generirana eksplicitno putem naredbe kao što je UPDATE STATISTICS ili automatski.

Dodatne informacije potražite u članku Planovi izvršenja.

Spremište upita

Spremište upita daje uvid u odabir i performanse plana izvršenja. Ono olakšava otklanjanje poteškoća s performansama pomažući vam da brzo pronađete razlike u performansama uzrokovane promjenama u planu izvršenja. Spremište upita prikuplja telemetrijske podatke kao što su povijest upita, planovi, statistike izvođenja i statistike čekanja. Za implementaciju spremišta upita koristite naredbu ALTER DATABASE:

ALTER DATABASE AdventureWorks2012 SET QUERY_STORE = ON;

Dodatne informacije potražite u članku Praćenje performansi pomoću spremišta upita.

Automatska korekcija plana

Možda i najlakši način poboljšavanja performansi upita jest automatska korekcija plana, značajka dostupna za baze podataka sustava Azure SQL. Samo je uključite i pustite da odradi svoje. Ona kontinuirano prati i analizira plan izvršenja, otkriva problematične planove izvršenja i automatski rješava probleme s performansama. Automatska korekcija plana u pozadini koristi strategiju sastavljenu od četiri koraka: učenje, prilagođavanje, provjera i ponavljanje.

Dodatne informacije potražite u članku Automatsko ugađanje.

Prilagodljiva obrada upita

Upite možete ubrzati i samom nadogradnjom na SQL Server 2017, koji raspolaže novom značajkom pod nazivom prilagodljiva obrada upita. SQL Server prilagođava izbor plana upita na temelju karakteristika u trenutku izvođenja.

Procjena kardinalnosti aproksimira broj redaka obrađenih u svakom od koraka plana izvršenja. Netočne procjene mogu rezultirati sporim odzivom na upit, nepotrebnim korištenjem resursa (memorija, procesor i U/I) te smanjenom propusnošću i istodobnošću. Za prilagođavanje karakteristika radnog opterećenja aplikacije koriste se tri tehnike:

  • Skupni način rada s povratnim informacijama o dodjeljivanju memorije    Slaba procjena kardinalnosti može uzrokovati da se upiti „preliju na disk” ili zauzmu previše memorije. SQL Server 2017 prilagođava dodjeljivanje memorije na temelju povratnih informacija o izvršavanju, otklanja prelijevanje na disk i poboljšava istodobnost za ponavljajuće upite.

  • Skupni način rada s adaptivnim pridruživanjima    Adaptivna pridruživanja dinamički odabiru bolju vrstu internog pridruživanja (pridruživanja s ugniježđenim petljama, pridruživanja spajanjem ili pridruživanja raspršivanjem) u trenutku izvođenja na temelju stvarnih ulaznih redaka. Posljedično, plan se može dinamički prebaciti na bolju strategiju pridruživanja tijekom izvršavanja.

  • Izvršavanje s preplitanjem    Obrada upita funkcije od više naredbi čiji je rezultat tablica tradicionalno tretira kao crnu kutiju. SQL Server 2017 može bolje procijeniti broj redaka radi poboljšanja kasnijih operacija.

Radna opterećenja možete automatski podvrgnuti adaptivnoj obradi upita tako da omogućite razinu kompatibilnosti od 140 za bazu podataka:

ALTER DATABASE [YourDatabaseName] SET COMPATIBILITY_LEVEL = 140;

Dodatne informacije potražite u članku Inteligentna obrada upita u SQL bazama podataka.

Vrh stranice

Načini postavljanja upita

U sustavu SQL Server postoji nekoliko načina postavljanja upita, a svaki od njih ima svojih prednosti. Bitno je znati te načine da biste mogli odabrati onaj pravi za vaše rješenje koje koristi Access. Najbolji način stvaranja TSQL upita jest njihovo interaktivno uređivanje i testiranje pomoću Transact-SQL uređivača SQL Server Management Studio (SSMS), koji raspolaže funkcijom intellisense kako bi vam pomogao odabrati prave ključne riječi i provjeriti ima li pogrešaka u sintaksi.

Prikazi

U sustavu SQL Server prikaz je poput virtualne tablice čiji podaci potječu iz neke tablice ili drugog prikaza, ili pak iz više njih. Prikazi se u upitima referenciraju jednako kao i tablice. Prikazi mogu prikriti složenost upita i pripomoći zaštiti podataka ograničavanjem skupa redaka i stupaca. Evo primjera jednog jednostavnog prikaza:

CREATE VIEW HumanResources.EmployeeHireDate AS  
SELECT p.FirstName, p.LastName, e.HireDate  
FROM HumanResources.Employee AS e JOIN Person.Person AS p  
ON e.BusinessEntityID = p.BusinessEntityID;

Radi optimalnih performansi i uređivanja rezultata prikaza stvorite indeksirani prikaz koji u bazi podataka postoji kao tablica, ima alociranu pohranu te mu se mogu postavljati upiti kao i bilo kojoj tablici. Da biste ga mogli koristiti u programu Access, povežite se s prikazom na isti način na koji se povezujete i s tablicom. Evo primjera jednog indeksiranog prikaza:

CREATE VIEW Sales.vOrders  
WITH SCHEMABINDING  
AS  
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue,  
        OrderDate, ProductID, COUNT_BIG(*) AS COUNT  
    FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o  
    WHERE od.SalesOrderID = o.SalesOrderID  
    GROUP BY OrderDate, ProductID;  

CREATE UNIQUE CLUSTERED INDEX IDX_V1   
    ON Sales.vOrders (OrderDate, ProductID);  

Postoje, međutim, i ograničenja. Podatke nije moguće ažurirati ako to utječe na više osnovnih tablica ili ako prikaz sadrži agregacijske funkcije ili izraz DISTINCT. Ako SQL Server vraća poruku o pogrešci koja kaže da ne zna koji zapis izbrisati, možda ćete u prikaz morati dodati okidač za brisanje. Za kraj, ne možete koristiti izraz ORDER BY, koji je moguć u svim upitima u programu Access.

Dodatne informacije potražite u člancima Prikazi i Stvaranje indeksiranih prikaza.

Spremljene procedure

Spremljena je procedura grupa TSQL naredbi koje uzimaju ulazne parametre, vraćaju izlazne parametre te naznačuju uspjeh ili neuspjeh putem vrijednosti statusa. One djeluju kao međusloj između pristupnog sučelja programa Access i sustava SQL Server u pozadini. Spremljene procedure mogu biti jednostavne kao naredba SELECT ili složene kao bilo koji program. Evo jednog primjera:

CREATE PROCEDURE HumanResources.uspGetEmployees   
    @LastName nvarchar(50),   
    @FirstName nvarchar(50)   
AS   
    SET NOCOUNT ON;  
    SELECT FirstName, LastName, Department  
    FROM HumanResources.vEmployeeDepartmentHistory  
    WHERE FirstName = @FirstName AND LastName = @LastName  
    AND EndDate IS NULL;  

Kada koristite spremljenu proceduru u programu Access, ona obično vraća skup rezultata u obrazac ili izvješće. Ona, međutim, može izvršavati i druge radnje koje ne vraćaju rezultate, kao što su DDL ili DML naredbe. Kada koristite prolazni upit, provjerite jeste li na odgovarajući način postavili svojstvo Vraća zapise.

Dodatne informacije potražite u članku Spremljene procedure.

Uobičajeni izrazi tablice

Uobičajeni izrazi tablice (CTE) nalik su na privremenu tablicu koja generira imenovani skup rezultata. Postoje samo za izvršenje jednog upita ili DML naredbe. CTE se formira u istoj liniji koda kao i naredba SELECT ili DML naredba koja ga koristi, dok je stvaranje i korištenje privremene tablice ili prikaza obično proces sastavljen od dva koraka. Evo jednog primjera:

-- Define the CTE expression name and column list.  
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)  
AS  
-- Define the CTE query.  
(  
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear  
    FROM Sales.SalesOrderHeader  
    WHERE SalesPersonID IS NOT NULL  
)  
-- Define the outer query referencing the CTE name.  
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear  
FROM Sales_CTE  
GROUP BY SalesYear, SalesPersonID  
ORDER BY SalesPersonID, SalesYear;

CTE ima nekoliko prednosti, uključujući ove:

  • Budući da su CTE-ovi prolazni, ne morate ih stvarati kao stalne objekte baze podataka kao što su prikazi.

  • Na isti se CTE možete pozvati više puta u istom upitu ili DML naredbi, što olakšava upravljanje kodom.

  • Pomoću upita koji se pozivaju na CTE možete definirati pokazivač.

Dodatne informacije potražite u članku WITH uobičajeni_izraz_tablice.

Korisnički definirane funkcije

Korisnički definirana funkcije (UDF) mogu izvršavati upite i izračune te vraćati skalarne vrijednosti ili skupove podatkovnih rezultata. One su poput funkcija u programskim jezicima, koje prihvaćaju parametre, provode akciju kao što je neki složen izračun i kao vrijednost vraćaju rezultat te akcije. Evo jednog primjera:

CREATE FUNCTION dbo.ISOweek (@DATE datetime)  
RETURNS int WITH SCHEMABINDING -- Helps improve performance
WITH EXECUTE AS CALLER  
AS  
BEGIN  
     DECLARE @ISOweek int;  
     SET @ISOweek= DATEPART(wk,@DATE)+1  
          -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104');  
-- Special cases: Jan 1-3 may belong to the previous year  
     IF (@ISOweek=0)   
          SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1   
               AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1;  
-- Special case: Dec 29-31 may belong to the next year  
     IF ((DATEPART(mm,@DATE)=12) AND   
          ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))  
          SET @ISOweek=1;  
     RETURN(@ISOweek);  
END;  
GO  
SET DATEFIRST 1;  
SELECT dbo.ISOweek(CONVERT(DATETIME,'12/26/2004',101)) AS 'ISO Week';  

UDF-ovi imaju određena ograničenja. Ne mogu, primjerice, koristiti određene nedeterminističke sistemske funkcije, kao ni izvršavati DML ili DDL naredbe te dinamičke SQL upite.

Dodatne informacije potražite u članku Korisnički definirane funkcije.

Vrh stranice

Dodavanje ključeva i indeksa

Koji god sustav baza podataka koristite, ključevi i indeksi idu ruku pod ruku.

Ključevi

U sustavu SQL Server obavezno stvarajte primarne ključeve za svaku tablicu i vanjske ključeve za svaku povezanu tablicu. Značajka sustava SQL Server istovjetna vrsti podataka AutoNumber u programu Access jest svojstvo IDENTITY, koje se može koristiti za stvaranje vrijednosti ključeva. Kada to svojstvo primijenite na bilo koji numerički stupac, on postaje dostupan samo za čitanje, a održava ga sustav baze podataka. Kada umetnete zapis u tablicu koja sadrži stupac IDENTITY, sustav automatski povećava vrijednost u stupcu IDENTITY za 1 počevši od 1, ali te vrijednosti možete kontrolirati putem argumenata.

Dodatne informacije potražite u članku CREATE TABLE, IDENTITY (svojstvo).

Indeksi

Kao i uvijek, odabir indeksa pitanje je ravnoteže između brzine upita i troškova ažuriranja. U programu Access imate jednu vrstu indeksa, ali u sustavu SQL Server ima ih 12. Srećom, za pouzdan odabir najučinkovitijih indeksa možete koristiti optimizator upita. U sustavu Azure SQL možete pak koristiti automatsko upravljanje indeksima, značajku automatskog ugađanja koja vam preporučuje dodavanje ili uklanjanje indeksa. Za razliku od programa Access, za vanjske ključeve u sustavu SQL Server morate stvoriti vlastite indekse. Možete i stvarati indekse u indeksiranom prikazu da biste poboljšali performanse upita. Loša je strana indeksiranog prikaza dodatan posao prilikom izmjene podataka u osnovnim tablicama prikaza jer se mora ažurirati i prikaz. Dodatne informacije potražite u člancima Vodič kroz arhitekturu i dizajn indeksa u sustavu SQL Server i Indeksi.

Vrh stranice

Izvođenje transakcija

Izvođenje procesa mrežne transakcije (OLTP) teško je kada se koristi Access, ali je relativno jednostavno u sustavu SQL Server. Transakcija je jedinica rada koja provodi sve promjene podataka kada su uspješne, ali ih poništava ako nisu. Transakcija mora imati četiri svojstva, za koja se često koristi akronim ACID:

  • Atomicitet    (Atomicity – A) Transakcija mora biti najmanja moguća jedinica rada; ili se provode sve pripadne promjene podataka ili se ne provodi nijedna.

  • Dosljednost    (Consistency – C) Kada završite, transakcija mora ostaviti sve podatke u dosljednom stanju. To znači da se primjenjuju sva pravila integriteta podataka.

  • Izolacija    (Isolation – I) Promjene koje su načinile istodobne transakcije izoliraju se od trenutne transakcije.

  • Trajnost    (Durability – D) Nakon dovršetka transakcije promjene postaju trajne čak i u slučaju otkazivanja sustava.

Transakcija se koristi za osiguranje zajamčenog integriteta podataka, poput isplate gotovine na bankomatu ili automatskog deponiranja platnih čekova. Možete provoditi eksplicitne, implicitne ili skupne transakcije. Evo dva primjera TSQL-a:

-- Using an explicit transaction

BEGIN TRANSACTION;  
DELETE FROM HumanResources.JobCandidate  
    WHERE JobCandidateID = 13;  
COMMIT;  

-- the ROLLBACK statement rolls back the INSERT statement, but the created table still exists.

CREATE TABLE ValueTable (id int);  
BEGIN TRANSACTION;  
       INSERT INTO ValueTable VALUES(1);  
       INSERT INTO ValueTable VALUES(2);  
ROLLBACK;

Dodatne informacije potražite u članku Transakcije.

Vrh stranice

Korištenje ograničenja i okidača

Sve baze podataka raspolažu načinima održavanja integriteta podataka.

Ograničenja

U programu Access referencijalni se integritet u odnosu između tablica osigurava putem uparivanja vanjskih i primarnih ključeva, kaskadnih ažuriranja i brisanja te pravila provjere valjanosti. Dodatne informacije potražite u člancima Vodič kroz odnose između tablica i Ograničavanje unosa podataka pomoću pravila provjere valjanosti.

U sustavu SQL Server koriste se ograničenja UNIQUE i CHECK, objekti baze podataka koji osiguravaju integritet podataka u tablicama sustava SQL Server. Da biste provjerili je li vrijednost valjana u drugoj tablici, upotrijebite ograničenje vanjskog ključa. Da biste potvrdili je li vrijednost u stupcu unutar određenog raspona, upotrijebite ograničenje provjere. Ti su objekti prva linija obrane te su projektirani za učinkovito funkcioniranje. Dodatne informacije potražite u članku Ograničenja UNIQUE i CHECK.

Okidači

Access nema okidače baze podataka. U sustavu SQL Server okidače možete koristiti za provedbu složenih pravila integriteta podataka i izvođenje te poslovne logike na poslužitelju. Okidač baze podataka spremljena je procedura koja se pokreće kada se u bazi podataka dogodi određena akcija. Okidač je događaj, npr. dodavanje ili brisanje zapisa u tablici, koji pokreće i izvodi spremljenu proceduru. Iako baza podataka programa Access može osigurati referencijalni integritet kada korisnik pokuša ažurirati ili brisati podatke, SQL Server raspolaže sofisticiranim skupom okidača. Možete, primjerice, programirati okidač za masovno brisanje zapisa i osiguranje integriteta podataka. Možete čak i dodavati okidače tablicama i prikazima.

Dodatne informacije potražite u člancima Okidači-DML, Okidači-DDL i Projektiranje T-SQL okidača.

Vrh stranice

Korištenje izračunatih stupaca

U programu Access izračunati se stupac stvara dodavanjem u upit i formiranjem izraza, kao npr.:

Extended Price: [Quantity] * [Unit Price]

U sustavu SQL Server istovjetna se značajka naziva izračunatim stupcem, što je virtualni stupac koji nije fizički pohranjen u tablici, osim ako ima oznaku PERSISTED. Poput izračunatog stupca u programu Access, taj izračunati stupac koristi podatke iz ostalih stupaca u izrazu. Da biste stvorili izračunati stupac, dodajte ga u tablicu. Na primjer:

CREATE TABLE dbo.Products   
(  
    ProductID int IDENTITY (1,1) NOT NULL  
  , QtyAvailable smallint  
  , UnitPrice money  
  , InventoryValue AS QtyAvailable * UnitPrice  
);  

Dodatne informacije potražite u članku Specificiranje izračunatih stupaca u tablici.

Vrh stranice

Vremensko označavanje podataka

Ponekad se u zapis dodaje polje tablice u koje se bilježi vremenska oznaka stvaranja zapisa radi praćenja unosa podataka. U programu Access možete jednostavno stvoriti datumski stupac sa zadanom vrijednosti =Now(). Da biste zabilježili vrijeme u sustavu SQL Server, upotrijebite vrstu podataka datetime2 sa zadanom vrijednosti SYSDATETIME().

Napomena    Pazite da ne pomiješate rowversion s dodavanjem vremenske oznake podacima. Ključna riječ timestamp sinonim je za rowversion u sustavu SQL Server, no trebali biste koristiti ključnu riječ rowversion. U sustavu SQL Server rowversion je vrsta podataka koja u bazi podataka opisuje automatski generirane, jedinstvene binarne brojeve te se općenito koristi kao mehanizam za označavanje verzija redaka tablica. No vrsta podataka rowversion predstavlja običan broj koji se povećava te ne čuva podatke o datumu ili vremenu i nije namijenjena vremenskom označavanju redaka.

Dodatne informacije potražite u članku rowversion. Dodatne informacije o korištenju vrste podataka rowversion za minimiziranje sukoba među zapisima potražite u članku Migracija baze podataka programa Access na SQL Server.

Vrh stranice

Upravljanje velikim objektima

U programu Access nestrukturiranim se podacima, kao što su datoteke, fotografije i slike, upravlja pomoću vrste podataka Privitak. U terminologiji sustava SQL Server za nestrukturirane se podatke koristi naziv blob (binarni veliki objekt) i s njima možete raditi na nekoliko načina:

Bajtovni zapis datoteke    Koristi vrstu podataka varbinary(max) za pohranu nestrukturiranih podataka u datotečnom sustavu umjesto u bazi podataka. Dodatne informacije potražite u članku Pristupanje podacima u bajtovnom zapisu datoteke pomoću servisa Transact-SQL.

Datotečna tablica    Pohranjuje blobove u posebne tablice koje se nazivaju datotečnim tablicama te omogućuje kompatibilnost s aplikacijama sustava Windows kao da su oni pohranjeni u datotečnom sustavu, bez ikakvih promjena u klijentskim aplikacijama. Datotečna tablica mora koristiti bajtovni zapis datoteke. Dodatne informacije potražite u članku Datotečne tablice.

Udaljeno spremište blobova (RBS)    Pohranjuje binarne velike objekte (BLOB-ove) u rješenja za distribuiranu pohranu umjesto izravno na poslužitelj. To štedi prostor i smanjuje hardverske resurse. Dodatne informacije potražite u članku Podaci u binarnim velikim objektima (blobovima).

Vrh stranice

Rad s hijerarhijskim podacima

Iako su relacijske baze podataka kao što je Access vrlo fleksibilne, rad s hijerarhijskim odnosima jest iznimka i često zahtijeva složene SQL naredbe ili kod. U primjere hijerarhijskih podataka ubrajaju se organizacijska struktura, datotečni sustav, taksonomija jezičnih termina i grafikon veza među web-stranicama. SQL Server ima ugrađenu vrstu podataka hierarchyid i skup hijerarhijskih funkcija za jednostavnu pohranu hijerarhijskih podataka te postavljanje upita i upravljanje njima.

Tipična hijerarhija

Dodatne informacije potražite u članku Hijerarhijski podaci i vodiču Korištenje vrste podataka hierarchyid.

Vrh stranice

Rukovanje JSON tekstom

JavaScript Object Notation (JSON) jest web-servis koji koristi ljudima čitljiv tekst za prijenos podataka kao parova atributa i vrijednosti u asinkronoj komunikaciji između preglednika i poslužitelja. Na primjer:

{
"firstName": "Mary",
"lastName": "Contrary",
"spouse": null,
"age": 27
}

Access ne raspolaže nikakvim ugrađenim načinima upravljanja JSON podacima, ali u sustavu SQL Server možete bez poteškoća pohranjivati, indeksirati i izvlačiti JSON podatke te im postavljati upite. Možete pretvoriti i pohraniti JSON tekst u tablicu ili oblikovati podatke kao JSON tekst. Na primjer, može biti korisno rezultate upita oblikovati kao JSON za web-aplikaciju ili dodati JSON podatkovne strukture u retke i stupce.

Napomena    JSON nije podržan u VBA-u. Kao alternativu u VBA-u možete koristiti XML-a pomoću biblioteke MSXML.

Dodatne informacije potražite u članku JSON podaci u sustavu SQL Server.

Vrh stranice

Resursi

Sada je pravi trenutak da saznate više o sustavima SQL Server i Transact SQL (TSQL). Kao što ste vidjeli, postoji mnogo značajki nalik na one u programu Access, ali i mogućnosti kojima Access naprosto ne raspolaže. Da biste svoj izlet podigli na višu razinu, ovdje su navedeni neki od resursa za učenje:

Resurs

Opis

Postavljanje upita pomoću servisa Transact-SQL

Videotečaj

Vodiči kroz mehanizam baze podataka

Vodiči kroz SQL Server 2017

Učenje uz Microsoft

Praktična poduka za Azure

Obuka i certificiranje za SQL Server

Postanite stručnjak

SQL Server 2017

Glavna odredišna stranica

Dokumentacija o sustavu SQL Server

Informacije za pomoć

Dokumentacija o bazi podataka Azure SQL

Informacije za pomoć

Temeljni vodič za podatke u oblaku (e-knjiga)

Pregled tehnologije oblaka

Podatkovni list za SQL Server 2017

Vizualni sažetak novih značajki

Usporedba verzija sustava Microsoft SQL Server

Sažetak značajki po verzijama

Izdanja iz serije Microsoft SQL Server Express

Preuzmite SQL Server Express 2017

Ogledne SQL baze podataka

Preuzimanje oglednih baza podataka

Vrh stranice

Proširite svoje vještine korištenja sustava Office
Istražite osposobljavanje

Jesu li vam ove informacije bile korisne?

Hvala vam na povratnim informacijama!

Hvala vam na povratnim informacijama! Čini se da bi vam pomoglo kad bismo vas povezali s nekim od naših agenata podrške za Office.

×