Baza danych SQL Server zawiera podstawowe pliki danych, wtórne pliki danych (opcjonalnie) i pliki dziennika transakcji.
Podstawowe i dodatkowe pliki danych zawierają tabele, obiekty bazy danych, schemat i dane.
Rozszerzenie pliku podstawowej bazy danych to *.mdf , a rozszerzenie pomocniczego pliku danych to *.ndf .
Pliki dziennika transakcji przechowują wszystkie zmiany dokonane przez transakcje (wstawianie, aktualizowanie i usuwanie). Jeśli SQL Server nieoczekiwanie uruchomi się ponownie lub ulegnie awarii, silnik bazy danych cofnie niekompletną transakcję przed punktem awarii, używając pliku dziennika transakcji.
Rozszerzenie pliku dziennika transakcji to *.ldf . Możesz zapoznać się z tym artykułem, aby zrozumieć architekturę plików dziennika transakcji.
W tym artykule wyjaśnię, jak możemy zarządzać plikami baz danych (plikami MDF) w SQL Server 2019.
Artykuł obejmuje następujące punkty:
- Wyświetl szczegóły pliku bazy danych za pomocą DMV i SQL Server Management Studio.
- Dołącz i odłącz pliki MDF baz danych użytkowników.
- Dołącz i odłącz pliki MDF systemowych baz danych.
Wyświetl pliki bazy danych za pomocą dynamicznych widoków zarządzania
Aby wyświetlić szczegóły plików mdf bazy danych, możemy użyć sys.database_files i sys.master_files . Zapytanie powinno być napisane w następujący sposób:
use master
go
select DB_NAME(database_id),
name as [logical Name],
physical_name as [File Location],
state_desc as [State of the file],
Size [Size of data File],
case when convert(varchar,max_size) =-1 then 'Unlimited' else convert(varchar,max_size) end as [Maximum Size]
from sys.master_files where type_desc='ROWS'
and database_id >5

Ponieważ przykład odnosi się do szczegółów MDF dla wszystkich baz danych, potrzebujemy innego kodu, aby wyświetlić określone pliki bazy danych. W tym celu używamy sys.database_files .
Poniższy skrypt pobierze szczegóły SSISDB baza danych:
use SSISDB
Go
select
name as [logical Name],
physical_name as [File Location],
state_desc as [State of the file],
Size [Size of data File],
case when convert(varchar,max_size) =-1 then 'Unlimited' else convert(varchar,max_size) end as [Maximum Size]
from sys.database_files

Wyświetl pliki bazy danych za pomocą SQL Server Management Studio
Opcja przeglądania listy plików MDF dostępna w SQL Server Management Studio (SSMS).
W SQL Server Management Studio połączyć się z instancją SQL Server. Następnie rozwiń Bazy danych -> Kliknij prawym przyciskiem myszy dowolną bazę danych -> Kliknij Właściwości :

W Właściwościach bazy danych kliknij Pliki . Wyświetli listę bazy danych MDF i LDF pliki:

Odłącz i dołącz pliki MDF bazy danych użytkowników
Istnieją dwa sposoby odłączania i dołączania plików MDF bazy danych użytkowników:
- Korzystanie z SQL Server Management Studio.
- Korzystanie ze skryptu T-SQL.
Dołącz i odłącz bazę danych za pomocą programu SSMS
Dołącz bazę danych
Uruchom SSMS -> Połącz się z instancją SQL Server -> Kliknij prawym przyciskiem myszy Baza danych -> Kliknij Dołącz .

Otworzy się Dołącz bazy danych okno. Kliknij Dodaj w tym oknie:

W nowym Zlokalizuj pliki bazy danych przejrzyj system plików, aby znaleźć MDF plik. Kliknij go dwukrotnie.

Powiązane pliki danych i pliki dziennika są umieszczane w plikach powiązanych widok siatki w Dołącz bazy danych okno. Kliknij OK aby dołączyć bazę danych.

Po podłączeniu bazy danych możesz ją zobaczyć w SQL Server Management Studio:

Odłącz bazę danych
Uruchom studio zarządzania SQL Server i połącz się z instancją SQL Server . Rozwiń listę Bazy danych.
Kliknij prawym przyciskiem myszy niezbędną bazę danych -> Zadania -> Kliknij Odłącz .

Jeśli chcesz na siłę odłączyć wszystkich użytkowników i procesy połączone z bazą danych, robisz to w Odłącz bazę danych okno.
Zaznacz Upuść połączenia opcja w Bazach danych do odłączenia sekcji i kliknij OK .

Dołącz i odłącz bazę danych za pomocą T-SQL
Możemy użyć TWORZENIE BAZY DANYCH Z DOŁĄCZENIEM zapytanie o następującej składni:
USE [master]
GO
CREATE DATABASE [DatabaseName] ON
( FILENAME = 'Path of Primary Database file (MDF)' ),
( FILENAME = N'Path of Secondary Database file (NDF)' ),
...
...
( FILENAME = N'Path of Transactional Log file (LDF)' )
FOR ATTACH
GO
Aby dołączyć bazę danych, uruchom następujące zapytanie T-SQL:
USE [master]
GO
CREATE DATABASE [WideWorldImporters] ON
( FILENAME = N'C:\MSSQL\SQLData\WideWorldImporters.mdf' ),
( FILENAME = N'C:\MSSQL\SQLLog\WideWorldImporters.ldf' ),
( FILENAME = N'C:\MSSQL\SQLData\WideWorldImporters_UserData.ndf' )
FOR ATTACH
GO
Ponadto możemy uruchomić sp_detach_db procedura składowana do odłączania bazy danych.
Jeśli chcesz na siłę rozłączać użytkowników, możesz użyć ZMIEŃ ZESTAW BAZY DANYCH SINGLE_USER polecenie w następującym skrypcie:
Use [master]
GO
ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
EXEC sp_detach_db [WideWorldImporters]
GO
Zarządzaj plikami MDF bazy danych systemu
Załóżmy, że chcemy przenieść pliki MDF systemowych baz danych (master, model, msdb i Tempdb) w inne miejsce. Przyjrzyjmy się procesowi.
Przenieś główną bazę danych
Aby przenieść master baza danych, otwórz menedżera konfiguracji SQL Server -> Kliknij Usługi SQL Server -> Kliknij prawym przyciskiem myszy usługę SQL Server żądanej instancji SQL Server (MSSQLSERVER ) -> Kliknij Właściwości :

Aby zmienić master.mdf lokalizację pliku, kliknij ścieżkę pliku danych głównego pliku.
master.mdf po wartości ścieżki następuje -d i mastlog.ldf po wartości ścieżki następuje -l
Zastąp te wartości następującymi:
Plik danych:-dD:\MS_SQL\Data\master.mdf
Plik dziennika:-lD:\MS_SQL\Log\mastlog.ldf
Po zmianie wartości kliknij Aktualizuj jak pokazano na poniższej ilustracji:

Kliknij OK aby zapisać wartości.
Następnie zatrzymaj usługi SQL Server i skopiuj pliki bazy danych do nowej lokalizacji. Po zakończeniu ponownie uruchom usługę SQL.
Uruchom poniższe zapytanie, aby zweryfikować lokalizację pliku.
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='master'

Przenieś bazę danych modelu
Aby przenieść bazę danych Model na inny dysk, musimy najpierw uruchomić polecenie ALTER DATABASE MODIFY FILE. Służy do zmiany lokalizacji w katalogu systemowym SQL Server.
Uruchom poniżej polecenie:
ALTER DATABASE model
MODIFY FILE (NAME = modeldev, FILENAME = 'D:\MS_SQL\Data\model.mdf');
GO
ALTER DATABASE model
MODIFY FILE (NAME = modellog, FILENAME = 'D:\MS_SQL\Log\modellog.ldf');
GO
Następnie zatrzymaj usługi SQL Server, wykonując poniższe polecenie w PowerShell:
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER
Skopiuj model.mdf i modellog.ldf pliki do nowej lokalizacji i uruchom usługi.
Uruchom poniższe zapytanie, aby zweryfikować lokalizację pliku:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='model'

Przenieś bazę danych MSDB
Aby przenieść MSDB bazy danych na inny dysk, uruchom najpierw polecenie ALTER DATABASE MODIFY FILE, aby zmienić lokalizację w katalogu systemowym SQL Server:
ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBData, FILENAME = 'D:\MS_SQL\Data\MSDBData.mdf');
GO
ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBLog, FILENAME = 'D:\MS_SQL\Log\MSDBLog.ldf');
GO
Zatrzymaj usługi SQL Server, wykonując następujące polecenie w PowerShell:
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER
Skopiuj plik MSDBData.mdf i MSDBLog.ldf pliki do nowej lokalizacji i uruchom usługi.
Uruchom poniższe zapytanie, aby zweryfikować lokalizację pliku:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='msdb'

Przenieś bazę danych TempDB
Aby przenieść TempDB bazy danych na inny dysk, uruchom najpierw polecenie ALTER DATABASE MODIFY FILE, aby zmienić lokalizację pliku w katalogu systemowym SQL Server:
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\MS_SQL\Data\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp2, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_2.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp3, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_3.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp4, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_4.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp5, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_5.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp6, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_6.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp7, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_7.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp8, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_8.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'D:\MS_SQL\Log\templog.ldf');
GO
Uruchom ponownie usługi SQL Server, wykonując następujące polecenie w PowerShell:
/*Restart SQL Services*/
PS C:\> Restart-Service MSSQLSERVER -Force
Uruchom poniższe zapytanie, aby zweryfikować lokalizację pliku:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='tempdb'

Możesz również skorzystać z narzędzia Dziennik transakcji firmy Devart – zawiera ono również opcję przeglądania danych z plików MDF i LDF.
Podsumowanie
W tym artykule wyjaśniono pliki bazy danych programu SQL Server oraz sposoby przeglądania lokalizacji plików MDF. Opisano również procesy dołączania i odłączania baz danych oraz zilustrowano krok po kroku proces przenoszenia plików danych systemowych baz danych.