Въведение
Дизайнът на SQL Server предполага съпоставяне едно към много между машината на базата данни (екземпляр) и базите данни, хоствани в екземпляра. Това означава, че можете да разположите няколко бази данни на един екземпляр на SQL сървъра. Според документацията на Microsoft можете да имате до 32767 бази данни в един екземпляр на SQL Server. Разбира се, ще има ограничения, като ресурсите на сървъра, управление на паралелност на TempDB, мрежов трафик и т.н.
Базите данни, разположени на екземпляр на SQL Server, могат да бъдат системни бази данни или потребителски бази данни. Системните бази данни се инсталират заедно с инстанцията. В тази статия ще обсъдим целта на всяка база данни на системата. Освен това ще изясним за какво трябва да се грижите, когато управлявате системни бази данни на SQL Server.
Преглед на системните бази данни
Системните бази данни са част от много процеси, протичащи, когато инсталирате екземпляр на SQL Server. По подразбиране тези бази данни се създават по следните пътища:
%programfiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA
и
%programfiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log
Пътят може да бъде различен. По време на инсталирането на SQL Server можете да посочите местоположението на файловете на системната база данни.
За да изброите всички системни бази данни в даден екземпляр, можете да извикате кода в листинг 1. Списък 2 може да се използва за определяне на местоположението на файловете с данни, свързани със системните бази данни. Имайте предвид, че и в двата скрипта използваме филтър, връщащ бази данни с database_id от 5 или по-висок от 5.
Основните „видими“ системни бази данни имат database_ids 1,2,3,4 – те се отнасят съответно до master, tempdb, model и msdb. Съществува и „невидима“ база данни, наречена бази данни с ресурси и други системни бази данни, създадени, когато активирате функции като репликация.
-- 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;
Фигура 1:Системни бази данни
Основната база данни
Основната база данни е първата база данни, отворена в началото на SQL Server, съдържаща следните данни:
- Записите на структурата/конфигурацията на потребителския модел и всички други бази данни.
- Най-динамичните изгледи за управление, които са необходими за наблюдение на екземпляра.
По този начин той разполага с необходимата информация за отваряне на всички други бази данни. Ето защо трябва първо да се отвори. Въпросът е как да го направя.
Параметрите за стартиране на SQL Server съдържат два записа, които определят местоположенията на главната база данни и регистрационните файлове. Параметрите за стартиране по подразбиране включват само три реда – третият е местоположението на регистрационния файл за грешки. Когато SQL Server се стартира, той трябва да може да пише в този регистрационен файл за грешки.
Първо се отваря основната база данни. Информацията, съхранявана в главната база данни, включително конфигурациите, дефинирани с помощта на sp_configure, се прилага за отваряне на други бази данни и завършване на процеса на стартиране на екземпляра.
Фигура 3:Параметри за стартиране на SQL Server
Има няколко начина да научите за полезни системни обекти на SQL Server, като изгледи и функции за динамично управление.
Например, разширете изгледите или възлите за програмиране за главната база данни на обект Explorer. Там прегледайте имената на тези обекти и получете повече подробности от Books Online.
Можете също да мигрирате данни за влизане от един екземпляр в друг. За това възстановете резервно копие на главната база данни в целевия екземпляр. Ще опишем конкретната техника в отделна статия.
Фигура 4:Навигиране на обекти на главните бази данни
База данни tempDB
Базата данни tempDB е отговорна за съхранението на временни данни като междинни резултати от тежки операции. Той може да съдържа повторно изграждане на индекс, версии на редове на бази данни, конфигурирани с нива на изолация, и други функции, които зависят от версията на реда, като READ_COMMITTED_SNAPSHOT.
Повечето хора биха сметнали tempDB за потенциално затруднение в производителността, тъй като функциите на всяка потребителска база данни в даден случай зависят от tempDB.
Настройката на tempDB трябва да бъде умишлено упражнение. Въпреки това, като се започне от SQL Server 2016, можете да настроите tempDB точно по време на инсталирането на SQL Server. Предишна статия описва подробно как трябва да конфигурирате и наблюдавате tempDB.
Моделната база данни
Можете да третирате базата данни на модела като шаблон. Всяка потребителска база данни, създадена в екземпляр на SQL Server, поема конфигурацията на базата данни на модела. Той има същия размер и настройки за автоматично нарастване, едни и същи местоположения на файлове и т.н. Въпреки това, можете да посочите тези настройки умишлено по различен начин в израза CREATE DATABASE.
По същество, ако имате приложение, създаващо самостоятелно база данни с настройки по подразбиране, може да искате да конфигурирате базата данни на модела. Това ви гарантира, че имате известен контрол върху показването на тези автоматично създадени бази данни.
Нека експериментираме малко с това, като използваме кода в листинг 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
Кодът изпълнява следните стъпки:
- Потърсете sys.master_files за да определите настройките, използвани в базата данни на модела
- Създайте база данни
- Променете настройките за растеж и автоматично нарастване на файла на базата данни на модела
- Създайте друга база данни
- Потърсете sys.master_files до отново
Обърнете внимание на единствената фраза за създаване на база данни – „СЪЗДАВАНЕ НА БАЗА ДАННИ“. По този начин той приема настройките, принадлежащи към базата данни на модела. Резултатите показват, че вторият път, когато издадохме командата CREATE DATABASE, базата данни EXP_AFTER придоби размер на файла от 96 GB и автоматично нарастване от 128 MB (вижте фигура 5).
Фигура 5:Използване на базата данни на модела
Също така си струва да се спомене, че не всички настройки на базата данни се взимат автоматично от базата данни на модела. Например, MIXED_PAGE_ALLOCATION е зададено на OFF, когато създавате нова база данни, въпреки че е ВКЛЮЧЕНО в модели и други системни бази данни.
База данни msdb
Може да считате msdb за база данни на агент на SQL Server. Той съхранява всички данни, свързани с работни места, поща в базата данни, оператори и автоматизация. Има и данни, свързани с доставката на регистрационни файлове на транзакциите, репликацията и т.н. Можете да проверите това, като стартирате набори от заявки в листинг 4 във вашия екземпляр. Например обекти, свързани с автоматизацията, присъстват в 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
Можете да научите много за обектите в msdb бази данни, като ги извлечете и проучите в SQL Server Books Online. Подходът е същият като при главната база данни.
Можете да мигрирате задания, оператори и т.н. от един екземпляр на SQL Server към друг. За това вземете резервното копие на базата данни msdb от изходния екземпляр и го възстановете в целевия екземпляр. Ще разгледаме това в друга статия.
Епилог
В тази статия сме предоставили бърз преглед на системните бази данни.
Системните бази данни идват с инсталация на SQL Server по подразбиране. Разбирането на различните системни бази данни и техните роли е отлично помощно средство за управление на вашия екземпляр на SQL Server.
Можете да получите повече информация за това какво съхраняват и да разберете как да ги управлявате от Books Online и други статии в CodingSight.
Препратки
- Системни бази данни
- Бази данни и съхранение на MS SQL Server
- Кръстосана верига на собственост върху база данни