# SQL Server

## Hva det er

SQL Server, som mange team skriver som MSSQL eller MS SQL, er et relasjonelt
databasehåndteringssystem: et serverprogram som holder data i tabeller,
håndhever reglene mellom dem og svarer applikasjonene som snakker med det på
Transact-SQL, eller T-SQL, Microsofts dialekt av SQL. En klient kobler seg til
en instans, som er én kjørende kopi av motoren, og gjør jobben sin inne i en av
databasene instansen er vert for. På disk består hver av dem av minst to filer,
én for dataene og én for transaksjonsloggen.

Kjernen er Database Engine, tjenesten som lagrer, behandler og sikrer dataene.
Den kan installeres på Windows eller Linux, i en Linux-container eller på en
virtuell maskin. Støtten for Linux kom med SQL Server 2017 (14.x), med den samme
Database Engine som på Windows, og Red Hat Enterprise Linux og Ubuntu har vært
støttet i hver versjon siden. Den samme motoren ligger også under flere av
Microsofts driftede tjenester, bl.a. Azure SQL Database, Azure SQL Managed
Instance og SQL database i Microsoft Fabric.

Versjonene får navn etter årstall og et internt nummer: 2017 er 14.x, 2019 er
15.x, 2022 er 16.x, og SQL Server 2025, som fikk støtte fra 18. november 2025,
er 17.x. Rundt motoren ligger flere tjenester. Integration Services (SSIS)
bygger pakker for uttrekk, transformasjon og innlasting rettet mot datavarehus,
og SQL Server Agent kjører jobber etter en timeplan. Fra og med SQL Server 2025
er rapportering på egne servere samlet i
[Power BI Report Server](https://learn.microsoft.com/en-us/power-bi/report-server/),
og Data Quality Services og Master Data Services forsvinner fra produktet.
Versjon 2022 og tidligere beholder dem.

Utgavene trekker de kommersielle grensene. For SQL Server 2022 er de Enterprise,
Standard, Web, Express (gratis), Developer og Evaluation. De to siste har hele
funksjonssettet til Enterprise, men Developer er lisensiert bare for utviklings-
og testsystemer, og Evaluation gjelder i 180 dager. SQL Server 2025 tegner
listen på nytt: Web-utgaven slutter med 2022, Developer deles i Enterprise
Developer og Standard Developer, og Express blir større.

## Hvorfor det er viktig

Versjon og utgave avgjør til sammen hvor stor en server kan bli, hvilke
funksjoner den har, og hvor lenge Microsoft fortsetter å rette den.

Størrelse og funksjoner følger utgaven. Express i SQL Server 2022 bruker den
minste av én sokkel eller fire kjerner, høyst 1 410 MB minne til bufferpoolen og
høyst 10 GB per database. I SQL Server 2025 hever Express taket til 50 GB, med
de samme grensene for regnekraft og minne. Standard i 2022 bruker den minste av
fire sokler eller 24 kjerner og 128 GB bufferpool, og i 2025 blir det 32
kjerner og 256 GB. Enterprise begrenses bare av operativsystemet. SQL Server
Agent følger med Enterprise, Standard og, i 2022, Web. Express er uten den, så
en gratis instans som trenger nattlige sikkerhetskopier, trenger en planlegger
utenfor produktet.

Tidsplanen for rettelser følger versjonen. Etter Microsofts Fixed Lifecycle
Policy får hver versjon minst ti års støtte: fem år med ordinær støtte, med
oppdateringer for funksjoner, ytelse, skalerbarhet og sikkerhet, og fem år med
utvidet støtte, med sikkerhetsoppdateringer alene. For SQL Server 2019 varte den
ordinære støtten fra november 2019 til utgangen av februar 2025, og den utvidede
fortsetter til januar 2030. Microsofts oversikt over oppdateringer viser CU32
fra februar 2025 som den siste kumulative oppdateringen for 2019, med
sikkerhetsutgivelser lagt oppå den siden. SQL Server 2022 har ordinær støtte til
januar 2028 og utvidet støtte til januar 2033. SQL Server 2025 går over til
utvidet støtte i januar 2031 og ut av den i januar 2036.

Produktet når også folk som aldri kjører det i produksjon, fordi data reiser i
formatene dets. En `.bak`-fil er en sikkerhetskopi fra SQL Server, og å lese
den betyr å gjenopprette den i en instans, slik ett av prosjektene nedenfor
gjorde.

## Slik ser det ut i praksis

SQL Server har vært noe å drifte, noe å lese fra og noe å forlate i arbeidet
her.

Først driften. I en DevOps-rolle i et mellomstort teknologiselskap ble
[PostgreSQL 14 og MS SQL Server 2019 installert på VPS-instanser med Ubuntu 20.04 LTS](/nb/portfolio/designed-deployed-and-maintained-10-postgresql-and-ms-13/),
ti databaseservere i alt. Sikkerhetskopieringen brukte `pg_dump` for PostgreSQL
og jobber i SQL Server Agent for MS SQL, med regler for oppbevaring og ekstern
lagring. Prometheus og Grafana fulgte med på serverne, og resultatet var 99,9 %
oppetid på alle ti.

Så lesingen. Data til interne dashbord og til Python-API-er for kunder kom fra
et eksternt datavarehus bak et IPsec-VPN, som komprimerte arkiver med Parquet-,
CSV- og `.bak`-filer.
[Pipelinen gjenopprettet hver sikkerhetskopi i en lokal MSSQL Server-instans med `RESTORE DATABASE`](/nb/portfolio/designed-implemented-and-administered-6-etl-elt-pipelines-8/)
og kontrollerte at skjemaet var intakt. Innlastingen til staging brukte `bcp`,
`psql` og SSIS etter kildeformatet, og prosedyrer i T-SQL og PL/pgSQL renset og
beriket radene før de gikk videre til BigQuery. Med gjenopprettingen
automatisert sammen med resten tok en hel kjøring av de seks pipelinene under 20
minutter, der arbeidet for hånd hadde tatt mer enn 3 timer, og dataene ble
synkronisert daglig i stedet for ukentlig.

Til slutt utgangen. En geografisk kartapplikasjon sto på en eldre
MSSQL-database, og teamet
[flyttet den til PostgreSQL med PostGIS-utvidelsen for innebygd geospatial indeksering](/nb/portfolio/improved-geographical-map-application-performance-by-10x-through-6/).
Mer enn 50 millioner romlige poster gikk gjennom ETL til EPSG:4326, GiST- og
SP-GiST-indekser ble lagt på geometri- og geografikolonnene, og den
gjennomsnittlige svartiden for romlige spørringer, 2,5 sekunder i SQL Server,
kom under 250 millisekunder i PostgreSQL, mens CPU-belastningen i backend gikk
ned med 65 %.

## Hvor det går galt

Hver av disse begynner ved en grense: mellom versjoner, mellom maskiner, eller
mellom en sikkerhetskopi og første gang noen bruker den.

**En sikkerhetskopi som bare kan flytte framover i versjon.** En sikkerhetskopi
kan gjenopprettes på den versjonen av SQL Server som skrev den, eller på en
nyere. En database som gjenopprettes fra en eldre versjon, oppgraderes
automatisk på veien inn, og den oppgraderingen går bare én vei. En `.bak`-fil
skrevet av en 2022-server trenger derfor en instans på 2022 eller 2025, og en
instans på 2019 avviser den. Sjekk hvilken versjon som skrev filen, før du
bygger instansen som skal lese den.

**En gjenoppretting som ber om mapper den nye serveren mangler.** En
sikkerhetskopi husker hvor data- og loggfilene lå på kildeserveren, og hver
versjon av SQL Server har sin egen standardsti. På en annen maskin lister du
først de logiske filnavnene og plasserer så hver av dem 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';
```

**Sikkerhetskopier som hoper seg opp mens ingen leser dem tilbake.** Microsofts
[egen side om emnet](https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases)
sier det rett ut: en strategi for gjenoppretting har du først når du har testet
sikkerhetskopiene. Gjenopprett en kopi på et testsystem etter en fast plan, og
kjør `DBCC CHECKDB` mot den. Kontrollsummer i sikkerhetskopien avslører feil i
selve lagringsmediet.

**En bulkkopifil som kommer uten tabellen sin.** Filer skrevet av `bcp` har
radene og ingenting om formen deres, verken skjema eller formatinformasjon. Når
kildetabellen er endret eller borte, krever en ny import en identisk
tabelldefinisjon eller en formatfil. Microsoft anbefaler det native formatet
(`-n`) mellom to SQL Server-instanser og tegnformat (`-c`) når dataene skal
over i et annet system.

**En gratisutgave som blir full.** Express passer til læring og små
applikasjoner, og 10 GB per database i 2022, eller 50 GB i 2025, er lite for
noe som tar vare på historikk. Planlegg overgangen til en lisensiert utgave, og
budsjettet for den, før databasen når taket.

**En gammel versjon som lever videre på sikkerhetsoppdateringer.** En server på
SQL Server 2019 virker fortsatt, og fram til januar 2030 får den
sikkerhetsoppdateringer og ingenting annet. Instansene i det første prosjektet
over kjørte 2019 mellom 2022 og 2024, innenfor den ordinære støtten. Siden
sikkerhetskopier bare kan gjenopprettes framover, går veien bort fra en slik
versjon gjennom en gjenoppretting på en nyere instans, og deretter en test av
alt som snakker med den.

## Les mer

- [What is SQL Server?](https://learn.microsoft.com/en-us/sql/sql-server/what-is-sql-server)
  — Microsofts oversikt over motoren, hvor den kan installeres, og tjenestene
  rundt den.
- [SQL Server 2019 lifecycle](https://learn.microsoft.com/en-us/lifecycle/products/sql-server-2019)
  — datoene for start, ordinær og utvidet støtte for versjonen prosjektet i
  praksisdelen kjø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)
  — grenser for regnekraft, minne og databasestørrelse per utgave, med merknader
  om hva som er endret siden 2022.
- [What is SQL Server on Linux?](https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-overview)
  — versjonen Linux-støtten begynte med, og distribusjonene hver versjon kjører
  på.
- [RESTORE statements (Transact-SQL)](https://learn.microsoft.com/en-us/sql/t-sql/statements/restore-statements-transact-sql)
  — hele syntaksen, `MOVE` og `FILELISTONLY`, og reglene for gjenoppretting på
  tvers av versjoner.
- [bcp utility](https://learn.microsoft.com/en-us/sql/tools/bcp-utility)
  — bulkkopiering inn og ut av Database Engine, dataformater og formatfiler.

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