# SQL Server

## 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](/da/portfolio/designed-deployed-and-maintained-10-postgresql-and-ms-13/).
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](/da/portfolio/designed-implemented-and-administered-6-etl-elt-pipelines-8/),
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](/da/portfolio/improved-geographical-map-application-performance-by-10x-through-6/).
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`:

```sql
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](https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases)
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

- [What is SQL Server?](https://learn.microsoft.com/en-us/sql/sql-server/what-is-sql-server)
  — Microsofts overblik over motoren, hvor den kan installeres, og tjenesterne
  omkring den.
- [SQL Server 2019 lifecycle](https://learn.microsoft.com/en-us/lifecycle/products/sql-server-2019)
  — start, mainstream support og udvidet support for den udgivelse,
  praksisafsnittet kørte.
- [Editions and supported features of SQL Server 2025](https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2025)
  — grænser for processor, hukommelse og databasestørrelse pr. udgave, med noter
  om ændringerne siden 2022.
- [What is SQL Server on Linux?](https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-overview)
  — udgivelsen, Linux-understøttelsen begyndte med, og distributionerne for hver
  udgivelse.
- [RESTORE statements (Transact-SQL)](https://learn.microsoft.com/en-us/sql/t-sql/statements/restore-statements-transact-sql)
  — den fulde syntaks, `MOVE` og `FILELISTONLY` samt reglerne for gendannelse på
  tværs af versioner.
- [bcp utility](https://learn.microsoft.com/en-us/sql/tools/bcp-utility) —
  bulkkopiering ind i og ud af Database Engine, dataformater og formatfiler.

<https://engineer.company/da/glossary/sql-server/>
