Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zarządzaj plikami MDF w SQL Server 2019

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:

  1. Wyświetl szczegóły pliku bazy danych za pomocą DMV i SQL Server Management Studio.
  2. Dołącz i odłącz pliki MDF baz danych użytkowników.
  3. 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:

  1. Korzystanie z SQL Server Management Studio.
  2. 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SYSUTCDATETIME() vs GETUTCDATE() w SQL Server:jaka jest różnica?

  2. Jak sprawdzić wersję serwera SQL?

  3. Jakie są zalety i wady przechowywania SQL w Stored Procs w porównaniu z kodem?

  4. Wstawianie listy<> do tabeli SQL Server

  5. Czy można zapisać wartość jednej wybranej kolumny i użyć jej w następnej?