Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Systemdatenbanken – Grundlegende Konzepte

Einführung

Das SQL Server-Design impliziert eine Eins-zu-Viele-Zuordnung zwischen der Datenbank-Engine (Instanz) und den Datenbanken, die auf der Instanz gehostet werden. Das bedeutet, dass Sie mehrere Datenbanken auf einer Instanz des SQL-Servers bereitstellen können. Gemäß der Microsoft-Dokumentation können Sie bis zu 32767 Datenbanken auf einer einzelnen Instanz von SQL Server haben. Natürlich wird es Einschränkungen geben, wie die Ressourcen auf dem Server, die Verwaltung der Parallelität in TempDB, den Netzwerkverkehr usw.

Auf einer SQL Server-Instanz bereitgestellte Datenbanken können entweder Systemdatenbanken oder Benutzerdatenbanken sein. Systemdatenbanken werden mit der Instanz installiert. In diesem Artikel werden wir den Zweck jeder Systemdatenbank besprechen. Außerdem klären wir, worauf Sie bei der Verwaltung von Systemdatenbanken auf SQL Server achten müssen.

Übersicht der Systemdatenbanken

Systemdatenbanken sind Teil vieler Prozesse, die stattfinden, wenn Sie eine Instanz von SQL Server installieren. Standardmäßig werden diese Datenbanken in den folgenden Pfaden erstellt:

%Programmdateien%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA

und

%Programmdateien%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log

Der Weg kann unterschiedlich sein. Während der Installation von SQL Server können Sie den Speicherort der Systemdatenbankdateien angeben.

Um alle Systemdatenbanken in einer Instanz aufzulisten, können Sie den Code in Listing 1 aufrufen. Listing 2 kann verwendet werden, um den Speicherort der Datendateien zu ermitteln, die den Systemdatenbanken zugeordnet sind. Beachten Sie, dass wir in beiden Skripten einen Filter verwenden, der Datenbanken mit einer Datenbank-ID von 5 oder höher als 5 zurückgibt.

Die wesentlichen „sichtbaren“ Systemdatenbanken haben die Datenbank-IDs 1,2,3,4 – sie beziehen sich jeweils auf master, tempdb, model und msdb. Es gibt auch eine „unsichtbare“ Datenbank namens Ressourcendatenbanken und andere Systemdatenbanken, die erstellt werden, wenn Sie Funktionen wie die Replikation aktivieren.

-- 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;

Abbildung 1:Systemdatenbanken

Die Master-Datenbank

Die Master-Datenbank ist die erste Datenbank, die beim Start von SQL Server geöffnet wird und die folgenden Daten enthält:

  • Die Aufzeichnungen der Struktur/Konfiguration der Instanz und aller anderen Datenbanken.
  • Die dynamischsten Verwaltungsansichten, die für die Überwachung der Instanz erforderlich sind.

Somit verfügt es über die notwendigen Informationen, um alle anderen Datenbanken zu öffnen. Deshalb muss es zuerst geöffnet werden. Die Frage ist, wie man es macht.

Die SQL Server-Startparameter enthalten zwei Einträge, die die Speicherorte der Master-Datenbankdaten und Protokolldateien definieren. Die Standardstartparameter umfassen nur drei Zeilen – die dritte ist der Speicherort der Fehlerprotokolldatei. Wenn SQL Server gestartet wird, muss es in der Lage sein, in diese Fehlerprotokolldatei zu schreiben.

Die Master-Datenbank wird zuerst geöffnet. Die in der master-Datenbank gespeicherten Informationen, einschließlich der mit sp_configure definierten Konfigurationen, gelten zum Öffnen anderer Datenbanken und zum Abschließen des Instanz-Startvorgangs.

Abbildung 3:SQL Server-Startparameter

Es gibt mehrere Möglichkeiten, sich über nützliche SQL Server-Systemobjekte wie dynamische Verwaltungsansichten und -funktionen zu informieren.

Erweitern Sie beispielsweise die Ansichten oder Programmierbarkeitsknoten für die Master-Datenbank im Objekt-Explorer. Überprüfen Sie dort die Namen dieser Objekte und erhalten Sie weitere Details von Books Online.

Sie können auch Anmeldungen von einer Instanz zu einer anderen migrieren. Stellen Sie dazu eine Sicherung der Master-Datenbank auf der Zielinstanz wieder her. Wir werden die spezifische Technik in einem separaten Artikel beschreiben.

Abbildung 4:Navigieren in Master-Datenbankobjekten

Die tempDB-Datenbank

Die tempDB-Datenbank ist für die Speicherung temporärer Daten wie Zwischenergebnisse schwerer Operationen zuständig. Es könnte Indexneuerstellungen, Zeilenversionen von Datenbanken, die mit Isolationsstufen konfiguriert sind, und andere Funktionen enthalten, die von der Zeilenversionsverwaltung abhängen, wie z. B. READ_COMMITTED_SNAPSHOT.

Die meisten Leute würden tempDB als potenziellen Leistungsengpass betrachten, da die Funktionen jeder Benutzerdatenbank in einer Instanz von tempDB abhängen.

Das Optimieren von tempDB sollte eine bewusste Übung sein. Ab SQL Server 2016 können Sie tempDB jedoch während der Installation von SQL Server genau einrichten. Ein früherer Artikel beschreibt ausführlich, wie Sie tempDB konfigurieren und überwachen sollten.

Die Modelldatenbank

Sie können die Modelldatenbank als Vorlage behandeln. Jede in einer SQL Server-Instanz erstellte Benutzerdatenbank übernimmt die Konfiguration der Modelldatenbank. Es hat die gleichen Größen- und Autowachstumseinstellungen, die gleichen Dateispeicherorte usw. Sie können diese Einstellungen jedoch in der CREATE DATABASE-Anweisung bewusst anders angeben.

Wenn Sie eine Anwendung haben, die selbst eine Datenbank mit Standardeinstellungen erstellt, möchten Sie möglicherweise die Modelldatenbank konfigurieren. Es stellt sicher, dass Sie eine gewisse Kontrolle über das Ergebnis dieser automatisch erstellten Datenbanken haben.

Lassen Sie uns ein wenig damit experimentieren, indem wir den Code in Listing 3 verwenden.

-- 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

Der Code führt die folgenden Schritte aus:

  1. Fragen Sie die sys.master_files ab um die in der Modelldatenbank verwendeten Einstellungen zu ermitteln
  2. Erstellen Sie eine Datenbank
  3. Ändern Sie die Einstellungen für Wachstum und automatisches Wachstum der Modelldatenbankdatei
  4. Erstellen Sie eine weitere Datenbank
  5. Fragen Sie sys.master_files ab wieder

Achten Sie auf den einzelnen Satz für die Datenbankerstellung – „CREATE DATABASE“. Auf diese Weise übernimmt es die zur Modelldatenbank gehörenden Einstellungen. Die Ergebnisse zeigen, dass bei der zweiten Ausgabe des CREATE DATABASE-Befehls die EXP_AFTER-Datenbank eine Dateigröße von 96 GB und eine automatische Vergrößerung von 128 MB erlangte (siehe Abbildung 5).

Abbildung 5:Verwenden der Modelldatenbank

Erwähnenswert ist auch, dass nicht alle Datenbankeinstellungen automatisch aus der Modelldatenbank übernommen werden. Beispielsweise wird MIXED_PAGE_ALLOCATION auf OFF gesetzt, wenn Sie eine neue Datenbank erstellen, obwohl es in Modell- und anderen Systemdatenbanken auf ON gesetzt ist.

Die msdb-Datenbank

Sie können msdb als SQL Server-Agent-Datenbank betrachten. Es speichert alle Daten in Bezug auf Jobs, Datenbank-Mail, Bediener und Automatisierung. Daten zum Versand von Transaktionsprotokollen, zur Replikation usw. sind ebenfalls vorhanden. Sie können dies überprüfen, indem Sie Abfragesätze in Listing 4 in Ihrer Instanz ausführen. Beispielsweise sind Objekte im Zusammenhang mit der Automatisierung in der msdb vorhanden.

-- 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

Sie können viel über Objekte in msdb-Datenbanken lernen, indem Sie sie in der SQL Server-Onlinedokumentation extrahieren und untersuchen. Die Vorgehensweise ist die gleiche wie bei der Master-Datenbank.

Sie können Jobs, Operatoren usw. von einer SQL Server-Instanz zu einer anderen migrieren. Nehmen Sie dazu die Sicherung der msdb-Datenbank von der Quellinstanz und stellen Sie sie auf der Zielinstanz wieder her. Darauf werden wir in einem anderen Artikel eingehen.

Epilog

In diesem Artikel haben wir einen schnellen Überblick über Systemdatenbanken gegeben.

Systemdatenbanken werden standardmäßig mit einer SQL Server-Installation geliefert. Das Verständnis verschiedener Systemdatenbanken und ihrer Rollen ist eine hervorragende Hilfe für die Verwaltung Ihrer SQL Server-Instanz.

Weitere Informationen darüber, was sie speichern, und wie sie verwaltet werden, finden Sie in Books Online und anderen Artikeln auf CodingSight.

Referenzen

  1. Systemdatenbanken
  2. MS SQL Server-Datenbanken und -Speicherung
  3. Cross Database Ownership Chaining