Introduktion
SQL Server-designet indebærer en en-til-mange-mapping mellem databasemotoren (instansen) og databaserne hostet på instansen. Det betyder, at du kan installere flere databaser på én instans af SQL-serveren. Ifølge Microsoft-dokumentationen kan du have op til 32767 databaser på en enkelt forekomst af SQL Server. Selvfølgelig vil der være begrænsninger, såsom ressourcerne på serveren, administration af samtidighed på TempDB, netværkstrafik osv.
Databaser implementeret på en SQL Server-instans kan enten være systemdatabaser eller brugerdatabaser. Systemdatabaser kommer installeret med instansen. I denne artikel vil vi diskutere formålet med hver systemdatabase. Vi vil også præcisere, hvad du skal passe på, når du administrerer systemdatabaser på SQL Server.
Oversigt over systemdatabaser
Systemdatabaser er en del af mange processer, der finder sted, når du installerer en forekomst af SQL Server. Som standard oprettes disse databaser i følgende stier:
%programfiler%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA
og
%programfiler%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log
Vejen kan være anderledes. Under installationen af SQL Server kan du angive placeringen af systemdatabasefilerne.
For at liste alle systemdatabaserne i en instans kan du kalde koden i Listing 1. Listing 2 kan bruges til at bestemme placeringen af de datafiler, der er knyttet til systemdatabaserne. Bemærk, at i begge scripts bruger vi et filter, der returnerer databaser med database_id på 5 eller højere end 5.
De væsentlige "synlige" systemdatabaser har database_ids 1,2,3,4 - de refererer til henholdsvis master, tempdb, model og msdb. Der er også en "usynlig" database kaldet ressourcedatabaserne og andre systemdatabaser, der oprettes, når du aktiverer funktioner som replikering.
-- Listing 1: System Databases
select
name
,database_id
,create_date
,state_desc
,recovery_model_desc
,log_reuse_wait_desc
,physical_database_name
,is_db_chaining_on
,is_broker_enabled
,is_mixed_page_allocation_on
from sys.databases
where database_id<5;
-- Listing 2: System Database Files
select
name
,database_id
,DB_NAME(database_id)
,name
,physical_name
,type_desc
from sys.master_files
where database_id<5;
Figur 1:Systemdatabaser
Hoveddatabasen
Masterdatabasen er den første database, der åbnes ved starten af SQL Server, og som indeholder følgende data:
- Records for strukturen/konfigurationen af forekomsten og alle andre databaser.
- De mest dynamiske administrationsvisninger, der er nødvendige for at overvåge forekomsten.
Den har således de nødvendige oplysninger til at åbne alle andre databaser. Derfor skal den først åbnes. Spørgsmålet er, hvordan man gør det.
SQL Server-startparametrene indeholder to indgange, som definerer placeringen af masterdatabasedata og logfiler. Standardopstartsparametrene omfatter kun tre linjer - den tredje er fejllogfilens placering. Når SQL Server starter op, skal den kunne skrive til den fejllogfil.
Masterdatabasen åbnes først. De oplysninger, der er gemt i masterdatabasen, inklusive de konfigurationer, der er defineret ved hjælp af sp_configure, gælder for at åbne andre databaser og fuldføre instansens opstartsprocessen.
Figur 3:SQL Server-startparametre
Der er flere måder at lære om nyttige SQL Server-systemobjekter, såsom Dynamic Management Views og Functions.
Udvid f.eks. visningerne eller programmerbarhedens noder for masterdatabasen på objektudforsker. Der kan du gennemgå disse objekters navne og få flere detaljer fra Books Online.
Du kan også migrere logins fra én instans til en anden. Til det skal du gendanne en sikkerhedskopi af masterdatabasen til destinationsforekomsten. Vi vil beskrive den specifikke teknik i en separat artikel.
Figur 4:Navigering af masterdatabaseobjekter
tempDB-databasen
tempDB-databasen er ansvarlig for lagring af midlertidige data som mellemresultater af tunge operationer. Det kan indeholde indeksgenopbygninger, rækkeversioner af databaser konfigureret med isolationsniveauer og andre funktioner, der afhænger af rækkeversionering, såsom READ_COMMITTED_SNAPSHOT.
De fleste mennesker ville betragte tempDB som en potentiel flaskehals i ydeevnen, da hver brugerdatabases funktioner i en instans afhænger af tempDB.
Tuning tempDB bør være en bevidst øvelse. Fra og med SQL Server 2016 kan du dog opsætte tempDB nøjagtigt under installationen af SQL Server. En tidligere artikel beskriver i detaljer, hvordan du skal konfigurere og overvåge tempDB.
Modeldatabasen
Du kan behandle modeldatabasen som en skabelon. Hver brugerdatabase, der oprettes i en SQL Server-instans, optager konfigurationen af modeldatabasen. Det har samme størrelse og autovækstindstillinger, samme filplaceringer osv. Du kan dog angive disse indstillinger bevidst på en anden måde i CREATE DATABASE-sætningen.
I bund og grund, hvis du har et program, der opretter en database alene med standardindstillinger, vil du måske konfigurere modeldatabasen. Det sikrer, at du har en vis kontrol over, hvordan disse automatisk oprettede databaser bliver.
Lad os eksperimentere lidt med dette ved at bruge koden i liste 3.
-- Listing 3: Using the Model Database
select
name
,database_id
,DB_NAME(database_id) database_name
,name
,physical_name
,type_desc
,size/1024*8 [size (MB)]
,growth/1024*8 [size (MB)]
from sys.master_files
where DB_NAME(database_id)='model' or DB_NAME(database_id) like 'EXP%';
GO
create database EXP_BEFORE;
GO
USE [master]
GO
ALTER DATABASE [model] MODIFY FILE ( NAME = N'modeldev', SIZE = 102400KB , FILEGROWTH = 131072KB )
GO
ALTER DATABASE [model] MODIFY FILE ( NAME = N'modellog', SIZE = 102400KB )
GO
create database EXP_AFTER;
GO
select
name
,database_id
,DB_NAME(database_id) database_name
,name
,physical_name
,type_desc
,size/1024*8 [size (MB)]
,growth/1024*8 [size (MB)]
from sys.master_files
where DB_NAME(database_id)='model' or DB_NAME(database_id) like 'EXP%';
GO
Koden udfører følgende trin:
- Forespørg på sys.master_files for at bestemme de indstillinger, der bruges i modeldatabasen
- Opret en database
- Skift indstillingerne for vækst af modeldatabasefil og autovækst
- Opret en anden database
- Forespørg sys.master_files til igen
Vær opmærksom på den enkelte sætning til databaseoprettelse - "CREATE DATABASE." På denne måde henter den de indstillinger, der hører til modeldatabasen. Resultaterne viser, at anden gang, vi udstedte CREATE DATABASE-kommandoen, fik EXP_AFTER-databasen en filstørrelse på 96 GB og autovækst på 128 MB (se figur 5).
Figur 5:Brug af modeldatabasen
Det er også værd at nævne, at ikke alle databaseindstillinger automatisk hentes fra modeldatabasen. For eksempel er MIXED_PAGE_ALLOCATION sat til FRA, når du opretter en ny database, selvom den er TIL i model- og andre systemdatabaser.
msdb-databasen
Du kan betragte msdb som en SQL Server Agent-database. Den gemmer alle data relateret til job, databasemail, operatører og automatisering. Data relateret til transaktionslogforsendelse, replikering osv. er der også. Du kan bekræfte det ved at køre sæt forespørgsler i liste 4 i din instans. For eksempel er objekter relateret til automatisering til stede i msdb.
-- Listing 4: Querying msdb Objects
-- Jobs, Alerts, Operators sit in the msdb database ...
select * from msdb..sysjobs
select * from msdb..sysalerts
select * from msdb..sysoperators
select * from msdb..sysmail_allitems
-- ... NOT in the master database
select * from master..sysjobs
select * from master..sysalerts
select * from master..sysoperators
select * from master..sysmail_allitems
Du kan lære meget om objekter i msdb-databaser ved at udtrække og undersøge dem på SQL Server Books Online. Fremgangsmåden er den samme som med masterdatabasen.
Du kan migrere job, operatører osv. fra en SQL Server-instans til en anden. Til det skal du tage backup af msdb-databasen fra kildeforekomsten og gendanne den til destinationsforekomsten. Vi vil behandle dette i en anden artikel.
Epilog
I denne artikel har vi givet et hurtigt overblik over systemdatabaser.
Systemdatabaser leveres som standard med en SQL Server-installation. At forstå forskellige systemdatabaser og deres roller er en glimrende hjælp til at administrere din SQL Server-instans.
Du kan få flere oplysninger om, hvad de gemmer og forstå, hvordan du administrerer dem fra Books Online og andre artikler om CodingSight.
Referencer
- Systemdatabaser
- MS SQL Server-databaser og -lagring
- Kædning på tværs af databaseejerskab