Spring til indhold

SQL Server

Microsofts relationelle database

Hvad det er

SQL Server, som mange skriver MSSQL eller MS SQL, er et relationelt databasesystem fra Microsoft: et serverprogram, der gemmer data i tabeller, håndhæver reglerne mellem dem og svarer de applikationer, der taler til det på Transact-SQL, eller T-SQL, Microsofts dialekt af SQL. En klient forbinder sig til en instans, altså én kørende kopi af motoren, og arbejder inde i en af de databaser, instansen rummer. På disken består hver database af mindst to filer, én til data og én til transaktionsloggen.

Kernen hedder Database Engine, den tjeneste, der gemmer, behandler og sikrer data. Den installeres på Windows eller Linux, i en Linux-container eller på en virtuel maskine. Linux-understøttelsen begyndte med SQL Server 2017 (14.x) og bruger samme Database Engine som på Windows, og Red Hat Enterprise Linux og Ubuntu er understøttet for hver udgivelse siden. Den samme motor ligger også under flere af Microsofts hostede tjenester, blandt dem Azure SQL Database, Azure SQL Managed Instance og SQL database i Microsoft Fabric.

Udgivelserne får navn efter årstal og et internt versionsnummer: 2017 er 14.x, 2019 er 15.x, 2022 er 16.x, og SQL Server 2025, hvis support begyndte den 18. november 2025, er 17.x. Omkring motoren ligger flere tjenester. Integration Services (SSIS) bygger pakker til udtræk, transformation og indlæsning med data warehousing som mål, og SQL Server Agent kører job efter en tidsplan. Fra og med SQL Server 2025 er rapportering on-premises samlet i Power BI Report Server, og Data Quality Services og Master Data Services udgår af produktet; 2022 og ældre udgivelser beholder dem.

Udgaverne trækker de kommercielle grænser. For SQL Server 2022 hedder de Enterprise, Standard, Web, Express (gratis), Developer og Evaluation. De to sidste har hele Enterprise-funktionssættet, Developer med licens til udviklings- og testsystemer alene og Evaluation i 180 dage. SQL Server 2025 tegner listen om: Web-udgaven slutter med 2022, Developer deles i Enterprise Developer og Standard Developer, og Express vokser.

Hvorfor det betyder noget

Version og udgave afgør tilsammen, hvor stor en server må blive, hvilke funktioner den har, og hvor længe Microsoft bliver ved med at rette den.

Størrelse og funktioner følger udgaven. Express i SQL Server 2022 bruger det mindste af én socket eller fire kerner, højst 1.410 MB hukommelse til sin buffer pool og rummer højst 10 GB i hver database. I SQL Server 2025 hæves Express-loftet til 50 GB med de samme grænser for processor og hukommelse. Standard i 2022 bruger det mindste af fire sockets eller 24 kerner og 128 GB buffer pool; i 2025 bliver det til 32 kerner og 256 GB. Enterprise begrænses alene af styresystemet. SQL Server Agent følger med Enterprise, Standard og, i 2022, Web. Express leveres uden, så en gratis instans, der skal tage backup hver nat, har brug for en planlægger uden for produktet.

Rettelserne følger versionen. Under Microsofts Fixed Lifecycle Policy får hver udgivelse mindst ti års support: fem års mainstream support med opdateringer til funktioner, ydeevne, skalering og sikkerhed og fem års udvidet support med sikkerhedsopdateringer alene. For SQL Server 2019 løb mainstream support fra november 2019 til udgangen af februar 2025, og den udvidede support fortsætter til januar 2030. Microsofts liste over opdateringer viser CU32 fra februar 2025 som den seneste kumulative opdatering til 2019, med sikkerhedsudgivelser lagt oven på siden. SQL Server 2022 har mainstream support til januar 2028 og udvidet support til januar 2033, mens SQL Server 2025 går over i udvidet support i januar 2031 og forlader den i januar 2036.

Produktet når også folk, der aldrig kører det i produktion, fordi data rejser i dets formater. En .bak-fil er en backup fra SQL Server, og man læser den ved at gendanne den i en instans, sådan som et af projekterne nedenfor gjorde.

Sådan ser det ud i praksis

Ti databaseservere i en mellemstor teknologivirksomhed var hovedansvaret i en DevOps-rolle, hvor PostgreSQL 14 og MS SQL Server 2019 blev installeret og konfigureret på Ubuntu 20.04 LTS. Backup kørte med pg_dump for PostgreSQL og med SQL Server Agent-job for MS SQL, med retention og offsite-lagring. Prometheus og Grafana overvågede serverne, og resultatet blev 99,9 % oppetid på tværs af alle ti.

Andre gange er SQL Server kilden, som data skal læses ud af. Interne analyse-dashboards og Python-API’er brugt af kunder og partnere hentede deres data fra et fjernt data warehouse bag en IPsec VPN, leveret som komprimerede arkiver med Parquet-, CSV- og .bak-filer. Pipelinen gendannede .bak-filerne i en lokal MSSQL Server-instans, indlæste strukturerede data i staging-skemaer med bcp, psql og SSIS og lod procedurer i T-SQL og PL/pgSQL rense og berige rækkerne, før de gik videre til BigQuery. Gendannelsen i SQL Server var dermed ét automatiseret led i seks pipelines, der erstattede over 3 timers manuelt arbejde med en kørsel på under 20 minutter og synkroniserede dataene dagligt i stedet for ugentligt.

Nogle gange er opgaven at forlade SQL Server. En geografisk kortapplikation byggede på en ældre MSSQL-database uden native geospatial indeksering og blev migreret fra MSSQL til PostgreSQL med PostGIS-udvidelsen. Over 50 millioner spatiale records gik gennem ETL til EPSG:4326, og GiST- og SP-GiST-indeks kom på geometri- og geografikolonnerne, den indeksering, den gamle database manglede. Efter migreringen tog en spatial forespørgsel i gennemsnit under 250 millisekunder, hvor den på MSSQL havde taget 2,5 sekunder, og backendens CPU-belastning faldt med 65 %.

Hvor det går galt

Hvert af disse problemer opstår ved en grænse: mellem versioner, mellem maskiner eller mellem en backup og første gang, den bliver brugt.

En backup rejser fremad i version, og kun fremad. En backup kan gendannes på den version af SQL Server, der skrev den, eller på en nyere. En database fra en ældre version opgraderes automatisk under gendannelsen, og den opgradering går kun én vej. En .bak-fil skrevet af en 2022-server kræver derfor en instans på 2022 eller 2025, og en 2019-instans afviser den. Tjek, hvilken version der skrev filen, før du bygger den instans, der skal læse den.

Gendannelsen beder om mapper, den nye server mangler. En backup husker, hvor dens data- og logfiler lå på kildeserveren, og hver version af SQL Server har sin egen standardsti. På en anden maskine lister man først de logiske filnavne og placerer derefter hver fil med MOVE:

RESTORE FILELISTONLY
FROM DISK = '/srv/incoming/sales.bak';

RESTORE DATABASE Sales
FROM DISK = '/srv/incoming/sales.bak'
WITH MOVE 'Sales_Data' TO '/srv/mssql/data/Sales.mdf',
     MOVE 'Sales_Log' TO '/srv/mssql/data/Sales_log.ldf';

Backupperne hober sig op, og ingen læser en tilbage. Microsofts egen side om emnet siger det ligeud: en gendannelsesstrategi har man først, når backupperne er testet. Gendan en kopi på et testsystem efter en fast plan, og kør DBCC CHECKDB mod den. Checksummer på backuppen opdager fejl på selve backupmediet.

En bulk-copy-fil ankommer uden sin tabel. Filer skrevet af bcp indeholder rækkerne og intet om deres form, hverken skema eller formatinformation. Er kildetabellen ændret eller væk, kræver en ny import en identisk tabeldefinition eller en formatfil. Microsoft anbefaler native format (-n) mellem to SQL Server-instanser og tegnformat (-c), når data skal over i et andet system.

Den gratis udgave løber fuld. Express passer til læring og små applikationer, og 10 GB pr. database i 2022, eller 50 GB i 2025, er en lille ramme for alt, der gemmer historik. Planlæg skiftet til en licenseret udgave, og budgettet til det, før databasen når loftet.

En gammel udgivelse kører videre på sikkerhedssporet alene. En server på SQL Server 2019 virker stadig og får indtil januar 2030 kun sikkerhedsopdateringer. Instanserne i det første projekt ovenfor kørte 2019 fra 2022 til 2024, inden for mainstream support. Fordi backupper gendannes fremad, går vejen væk fra sådan en udgivelse gennem en gendannelse på en nyere instans og derefter en test af alt, der taler med den.

Læs mere

Ordliste