Introduktion
SQL Server-designen innebär en en-till-många-mappning mellan databasmotorn (instansen) och databaserna som finns på instansen. Det betyder att du kan distribuera flera databaser på en instans av SQL-servern. Enligt Microsofts dokumentation kan du ha upp till 32767 databaser på en enda instans av SQL Server. Naturligtvis kommer det att finnas begränsningar, som resurserna på servern, hantering av samtidighet på TempDB, nätverkstrafik, etc.
Databaser som distribueras på en SQL Server-instans kan antingen vara systemdatabaser eller användardatabaser. Systemdatabaser kommer installerade med instansen. I den här artikeln kommer vi att diskutera syftet med varje systemdatabas. Vi kommer också att klargöra vad du behöver ta hand om när du hanterar systemdatabaser på SQL Server.
Översikt över systemdatabaser
Systemdatabaser är en del av många processer som äger rum när du installerar en instans av SQL Server. Som standard skapas dessa databaser i följande sökvägar:
%programfiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA
och
%programfiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log
Vägen kan vara annorlunda. Under installationen av SQL Server kan du ange platsen för systemdatabasfilerna.
För att lista alla systemdatabaser i en instans kan du anropa koden i Lista 1. Lista 2 kan användas för att bestämma platsen för de datafiler som är associerade med systemdatabaserna. Observera att i båda skripten använder vi ett filter som returnerar databaser med database_id på 5 eller högre än 5.
De väsentliga "synliga" systemdatabaserna har database_ids 1,2,3,4 – de hänvisar till master, tempdb, modell respektive msdb. Det finns också en "osynlig" databas som kallas resursdatabaser och andra systemdatabaser som skapas när du aktiverar 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
Masterdatabasen
Huvuddatabasen är den första databasen som öppnas vid starten av SQL Server, som innehåller följande data:
- Recorderna för strukturen/konfigurationen av instansen och alla andra databaser.
- De mest dynamiska hanteringsvyerna som är nödvändiga för att övervaka instansen.
Den har alltså den information som behövs för att öppna alla andra databaser. Det är därför det måste vara först att öppna. Frågan är hur man gör.
SQL Server-startparametrarna innehåller två poster som definierar placeringen av huvuddatabasens data och loggfiler. Standardstartparametrarna inkluderar endast tre rader – den tredje är platsen för felloggfilen. När SQL Server startar måste den kunna skriva till den felloggfilen.
Huvuddatabasen öppnas först. Informationen som lagras i huvuddatabasen, inklusive de konfigurationer som definieras med sp_configure, gäller för att öppna andra databaser och slutföra instansens startprocess.
Figur 3:SQL Server-startparametrar
Det finns flera sätt att lära sig om användbara SQL Server-systemobjekt, som Dynamic Management Views och Functions.
Utöka till exempel vyerna eller programmerbarhetsnoderna för huvuddatabasen på objektutforskaren. Där kan du granska dessa objekts namn och få mer information från Books Online.
Du kan också migrera inloggningar från en instans till en annan. För det, återställ en säkerhetskopia av huvuddatabasen till målinstansen. Vi kommer att beskriva den specifika tekniken i en separat artikel.
Figur 4:Navigera i huvuddatabasobjekt
tempDB-databasen
tempDB-databasen ansvarar för lagring av temporär data som mellanresultat av tunga operationer. Den kan innehålla indexombyggnader, radversioner av databaser konfigurerade med isoleringsnivåer och andra funktioner som beror på radversionshantering, såsom READ_COMMITTED_SNAPSHOT.
De flesta skulle betrakta tempDB som en potentiell prestandaflaskhals, eftersom varje användardatabas funktioner i en instans beror på tempDB.
Att justera tempDB bör vara en medveten övning. Men från och med SQL Server 2016 kan du ställa in tempDB exakt under installationen av SQL Server. En tidigare artikel beskriver i detalj hur du ska konfigurera och övervaka tempDB.
Modeldatabasen
Du kan behandla modelldatabasen som en mall. Varje användardatabas som skapas i en SQL Server-instans tar upp konfigurationen av modelldatabasen. Den har samma storlek och inställningar för autotillväxt, samma filplatser etc. Du kan dock ange dessa inställningar medvetet på ett annat sätt i CREATE DATABASE-satsen.
I huvudsak, om du har ett program som skapar en databas på egen hand med standardinställningar, kanske du vill konfigurera modelldatabasen. Det säkerställer att du har viss kontroll över hur dessa automatiskt skapade databaser ser ut.
Låt oss experimentera lite med det här med koden i Listing 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 utför följande steg:
- Fråga i sys.master_files för att fastställa inställningarna som används i modelldatabasen
- Skapa en databas
- Ändra inställningarna för modelldatabasfiltillväxt och autotillväxt
- Skapa en annan databas
- Fråga sys.master_files till igen
Var uppmärksam på den enda frasen för att skapa databasen - "SKAPA DATABAS." På så sätt hämtar den inställningarna som hör till modelldatabasen. Resultaten visar att andra gången vi utfärdade kommandot CREATE DATABASE, fick databasen EXP_AFTER en filstorlek på 96 GB och en autotillväxt på 128 MB (se figur 5).
Figur 5:Använda modelldatabasen
Det är också värt att nämna att inte alla databasinställningar automatiskt hämtas från modelldatabasen. Till exempel är MIXED_PAGE_ALLOCATION inställd på AV när du skapar en ny databas, även om den är PÅ i modell- och andra systemdatabaser.
msdb-databasen
Du kan betrakta msdb som en SQL Server Agent-databas. Den lagrar all data relaterad till jobb, databaspost, operatörer och automatisering. Data relaterade till transaktionsloggsändning, replikering etc. finns också där. Du kan verifiera det genom att köra uppsättningar av frågor i Lista 4 i din instans. Till exempel finns objekt relaterade till automatisering 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ära dig mycket om objekt i msdb-databaser genom att extrahera och undersöka dem på SQL Server Books Online. Tillvägagångssättet är detsamma som med huvuddatabasen.
Du kan migrera jobb, operatörer etc. från en SQL Server-instans till en annan. För det, ta säkerhetskopian av msdb-databasen från källinstansen och återställ den till målinstansen. Vi ska ta upp detta i en annan artikel.
Epilog
I den här artikeln har vi gett en snabb översikt över systemdatabaser.
Systemdatabaser levereras som standard med en SQL Server-installation. Att förstå olika systemdatabaser och deras roller är ett utmärkt hjälpmedel för att hantera din SQL Server-instans.
Du kan få mer information om vad de lagrar och förstå hur du hanterar dem från Books Online och andra artiklar om CodingSight.
Referenser
- Systemdatabaser
- MS SQL Server-databaser och lagring
- Kedjning av korsdatabasägande