Inleiding
Het ontwerp van SQL Server impliceert een een-op-veel-toewijzing tussen de database-engine (instantie) en de databases die op de instantie worden gehost. Dit betekent dat u meerdere databases op één exemplaar van de SQL-server kunt implementeren. Volgens de Microsoft-documentatie kunt u maximaal 32767 databases hebben op één exemplaar van SQL Server. Natuurlijk zijn er beperkingen, zoals de bronnen op de server, het beheren van gelijktijdigheid op TempDB, netwerkverkeer, enz.
Databases die op een SQL Server-instantie zijn geïmplementeerd, kunnen systeemdatabases of gebruikersdatabases zijn. Systeemdatabases worden met de instantie geïnstalleerd. In dit artikel bespreken we het doel van elke systeemdatabase. We zullen ook verduidelijken waar u op moet letten bij het beheren van systeemdatabases op SQL Server.
Overzicht van systeemdatabases
Systeemdatabases maken deel uit van veel processen die plaatsvinden wanneer u een exemplaar van SQL Server installeert. Standaard worden deze databases in de volgende paden aangemaakt:
%programfiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA
en
%programfiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log
Het pad kan anders zijn. Tijdens de installatie van SQL Server kunt u de locatie van de systeemdatabasebestanden opgeven.
Om alle systeemdatabases in een instance weer te geven, kunt u de code in Listing 1 aanroepen. Listing 2 kan worden gebruikt om de locatie te bepalen van de databestanden die bij de systeemdatabases horen. Merk op dat we in beide scripts een filter gebruiken dat databases retourneert met database_id van 5 of hoger dan 5.
De essentiële "zichtbare" systeemdatabases hebben database_ids 1,2,3,4 - ze verwijzen respectievelijk naar master, tempdb, model en msdb. Er is ook een "onzichtbare" database, de resourcedatabases genaamd, en andere systeemdatabases die worden gemaakt wanneer u functies zoals replicatie inschakelt.
-- 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;
Figuur 1:Systeemdatabases
De hoofddatabase
De hoofddatabase is de eerste database die wordt geopend bij het starten van SQL Server en bevat de volgende gegevens:
- De records van de structuur/configuratie van de instance en alle andere databases.
- De meest dynamische beheerweergaven die nodig zijn voor het bewaken van de instantie.
Het heeft dus de informatie die nodig is om alle andere databases te openen. Daarom moet het als eerste worden geopend. De vraag is hoe het moet.
De opstartparameters van SQL Server bevatten twee vermeldingen die de locaties van de hoofddatabasegegevens en logbestanden definiëren. De standaard opstartparameters bevatten slechts drie regels - de derde is de locatie van het foutenlogbestand. Wanneer SQL Server opstart, moet het in staat zijn om naar dat foutenlogbestand te schrijven.
De hoofddatabase wordt eerst geopend. De informatie die is opgeslagen in de hoofddatabase, inclusief de configuraties die zijn gedefinieerd met sp_configure, is van toepassing op het openen van andere databases en het voltooien van het opstartproces van de instantie.
Afbeelding 3:Opstartparameters voor SQL Server
Er zijn verschillende manieren om meer te weten te komen over nuttige SQL Server-systeemobjecten, zoals dynamische beheerweergaven en -functies.
Vouw bijvoorbeeld de weergaven of programmeerknooppunten voor de hoofddatabase uit in de objectverkenner. Bekijk daar de namen van deze objecten en krijg meer details van Books Online.
U kunt ook aanmeldingen van de ene instantie naar de andere migreren. Herstel daarvoor een back-up van de hoofddatabase naar het doelexemplaar. We zullen de specifieke techniek in een apart artikel beschrijven.
Figuur 4:Navigeren door hoofddatabaseobjecten
De tempDB-database
De tempDB-database is verantwoordelijk voor de opslag van tijdelijke gegevens zoals tussenresultaten van zware operaties. Het kan indexreconstructies bevatten, rijversies van databases die zijn geconfigureerd met isolatieniveaus en andere functies die afhankelijk zijn van rijversiebeheer, zoals READ_COMMITTED_SNAPSHOT.
De meeste mensen beschouwen tempDB als een potentieel prestatieprobleem, omdat de functies van elke gebruikersdatabase in een instantie afhankelijk zijn van tempDB.
Het afstemmen van tempDB zou een bewuste oefening moeten zijn. Vanaf SQL Server 2016 kunt u tempDB echter nauwkeurig instellen tijdens de installatie van SQL Server. Een vorig artikel beschrijft in detail hoe je tempDB moet configureren en monitoren.
De modeldatabase
U kunt de modeldatabase als een sjabloon behandelen. Elke gebruikersdatabase die in een SQL Server-instantie is gemaakt, neemt de configuratie van de modeldatabase over. Het heeft dezelfde instellingen voor grootte en autogrowth, dezelfde bestandslocaties, enz. U kunt deze instellingen echter bewust op een andere manier specificeren in de instructie CREATE DATABASE.
Als u een toepassing heeft die zelf een database maakt met standaardinstellingen, kunt u in wezen de modeldatabase configureren. Het zorgt ervoor dat u enige controle heeft over het resultaat van deze automatisch aangemaakte databases.
Laten we hier een beetje mee experimenteren, met behulp van de code in 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
De code voert de volgende stappen uit:
- Bezoek de sys.master_files om de instellingen te bepalen die in de modeldatabase worden gebruikt
- Maak een database
- Wijzig de instellingen voor de bestandsgroei en autogroei van de modeldatabase
- Maak nog een database
- Query sys.master_files opnieuw
Besteed aandacht aan de enkele zin voor het maken van de database - "CREATE DATABASE". Op deze manier pikt het de instellingen op die bij de modeldatabase horen. De resultaten laten zien dat de tweede keer dat we de opdracht CREATE DATABASE gaven, de EXP_AFTER-database een bestandsgrootte van 96 GB en autogrowth van 128 MB kreeg (zie afbeelding 5).
Figuur 5:De Model Database gebruiken
Vermeldenswaard is ook dat niet alle database-instellingen automatisch worden opgehaald uit de modeldatabase. MIXED_PAGE_ALLOCATION wordt bijvoorbeeld ingesteld op UIT wanneer u een nieuwe database maakt, ook al is deze AAN in model- en andere systeemdatabases.
De msdb-database
U kunt de msdb beschouwen als een SQL Server Agent-database. Het slaat alle gegevens op met betrekking tot taken, databasemail, operators en automatisering. Gegevens met betrekking tot verzending van transactielogboeken, replicatie, enz. Zijn er ook. U kunt dat verifiëren door reeksen query's uit te voeren in Listing 4 in uw instantie. Objecten gerelateerd aan automatisering zijn bijvoorbeeld aanwezig in de 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
U kunt veel leren over objecten in msdb-databases door ze te extraheren en te onderzoeken in SQL Server Books Online. De aanpak is hetzelfde als bij de masterdatabase.
U kunt taken, operators, enz. migreren van het ene SQL Server-exemplaar naar het andere. Neem daarvoor de back-up van de msdb-database van de broninstantie en herstel deze naar de bestemmingsinstantie. We zullen dit in een ander artikel behandelen.
Epiloog
In dit artikel hebben we een snel overzicht gegeven van systeemdatabases.
Systeemdatabases worden standaard geleverd met een SQL Server-installatie. Het begrijpen van verschillende systeemdatabases en hun rollen is een uitstekend hulpmiddel bij het beheren van uw SQL Server-instantie.
U kunt meer informatie krijgen over wat ze opslaan en begrijpen hoe u ze kunt beheren via Books Online en andere artikelen op CodingSight.
Referenties
- Systeemdatabases
- MS SQL Server-databases en opslag
- Cross-database eigendomsketens