Databáze SQL Server obsahuje primární datové soubory, sekundární datové soubory (volitelné) a soubory protokolu transakcí.
Primární a sekundární datové soubory obsahují tabulky, databázové objekty, schémata a data.
Přípona souboru primární databáze je *.mdf a přípona sekundárního datového souboru je *.ndf .
Soubory protokolu transakcí ukládají všechny změny provedené transakcemi (vložení, aktualizace a odstranění). Pokud se SQL Server neočekávaně restartuje nebo selže, databázový stroj vrátí nedokončenou transakci zpět před bod selhání pomocí souboru protokolu transakcí.
Přípona souboru protokolu transakcí je *.ldf . Možná budete chtít nahlédnout do tohoto článku, abyste porozuměli architektuře souborů protokolu transakcí.
V tomto článku vysvětlím, jak můžeme spravovat databázové soubory (soubory MDF) v SQL Server 2019.
Článek se bude týkat následujících bodů:
- Zobrazte podrobnosti o databázovém souboru pomocí DMV a SQL Server Management Studio.
- Připojte a odpojte soubory MDF s uživatelskými databázemi.
- Připojte a odpojte soubory MDF systémových databází.
Zobrazení databázových souborů pomocí dynamických zobrazení správy
Pro zobrazení podrobností o databázových mdf souborech můžeme použít sys.database_files a sys.master_files . Dotaz by měl být napsán následovně:
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
Protože příklad odkazuje na podrobnosti MDF pro všechny databáze, potřebujeme k zobrazení konkrétních databázových souborů jiný kód. K tomuto účelu používáme sys.database_files .
Následující skript načte podrobnosti o SSISDB databáze:
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
Zobrazení databázových souborů pomocí SQL Server Management Studio
Možnost zobrazení seznamu souborů MDF dostupný v SQL Server Management Studio (SSMS).
V SQL Server Management Studio, připojit k instanci SQL Server. Poté rozbalte položku Databáze -> Klikněte pravým tlačítkem na libovolnou databázi -> Klikněte na Vlastnosti :
V části Vlastnosti databáze klikněte na Soubory . Zobrazí seznam databáze MDF a LDF soubory:
Odpojte a připojte soubory MDF databáze uživatelů
Existují dva způsoby, jak odpojit a připojit soubory MDF databáze uživatelů:
- Použití SQL Server Management Studio.
- Použití skriptu T-SQL.
Připojit a odpojit databázi pomocí SSMS
Připojte databázi
Spusťte SSMS -> Připojte se k instanci serveru SQL -> Klikněte pravým tlačítkem na Databáze -> Klikněte na Připojit .
Otevře se Připojit databáze okno. Klikněte na Přidat v tomto okně:
V novém Vyhledání databázových souborů v okně, procházejte systém souborů a vyhledejte MDF soubor. Dvakrát na něj klikněte.
Přidružené datové soubory a soubory protokolu jsou vyplněny v přidružených souborech zobrazení mřížky v Připojit databáze okno. Klikněte na OK pro připojení databáze.
Jakmile je databáze připojena, můžete ji vidět v SQL Server Management Studio:
Odpojit databázi
Spusťte SQL Server Management Studio a připojte se k instanci SQL Server . Rozbalte seznam databáze.
Klikněte pravým tlačítkem na potřebnou databázi -> Úkoly -> Klikněte na Odpojit .
Pokud chcete násilně odpojit všechny uživatele a procesy připojené k databázi, udělejte to v Odpojit databázi okno.
Zaškrtněte políčko Zrušit připojení možnost v Databázích k odpojení a klikněte na OK .
Připojit a odpojit databázi pomocí T-SQL
Můžeme použít CREATE DATABASE WITH ATTACH dotaz s následující syntaxí:
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
Chcete-li připojit databázi, spusťte následující dotaz 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
Můžeme také spustit sp_detach_db uložená procedura k odpojení databáze.
Pokud chcete uživatele násilně odpojit, můžete použít ALTER DATABASE SET SINGLE_USER příkaz v následujícím skriptu:
Use [master]
GO
ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
EXEC sp_detach_db [WideWorldImporters]
GO
Správa souborů MDF systémové databáze
Předpokládejme, že chceme přesunout MDF soubory systémových databází (master, model, msdb a Tempdb) na jiné místo. Podívejme se na proces.
Přesun hlavní databáze
Chcete-li přesunout předlohu databáze, otevřete správce konfigurace SQL Server -> Klikněte na Služby SQL Server -> Klikněte pravým tlačítkem na službu SQL Server požadované instance SQL Server (MSSQLSERVER ) -> Klikněte na Vlastnosti :
Chcete-li změnit master.mdf umístění souboru, klikněte na cestu k datovému souboru hlavního souboru.
Soubor master.mdf za hodnotou cesty následuje -d a mastlog.ldf za hodnotou cesty následuje -l
Nahraďte tyto hodnoty následujícím:
Datový soubor:-dD:\MS_SQL\Data\master.mdf
Soubor protokolu:-lD:\MS_SQL\Log\mastlog.ldf
Jakmile se hodnoty změní, klikněte na Aktualizovat jak je znázorněno na obrázku níže:
Klikněte na OK pro uložení hodnot.
Potom zastavte služby SQL Server a zkopírujte soubory databáze do nového umístění. Po dokončení znovu spusťte službu SQL.
Spusťte níže uvedený dotaz a ověřte umístění souboru.
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='master'
Přesuňte databázi modelů
Chcete-li přesunout databázi modelu na jiný disk, musíme nejprve spustit příkaz ALTER DATABASE MODIFY FILE. Slouží ke změně umístění v katalogu systému SQL Server.
Spusťte níže uvedený příkaz:
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
Poté zastavte služby SQL Server provedením níže uvedeného příkazu v PowerShell:
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER
Zkopírujte model.mdf a modellog.ldf soubory do nového umístění a spusťte služby.
Spuštěním níže uvedeného dotazu ověřte umístění souboru:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='model'
Přesun databáze MSDB
Chcete-li přesunout MSDB databázi na jiný disk, nejprve spusťte příkaz ALTER DATABASE MODIFY FILE, abyste změnili umístění v systémovém katalogu 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
Zastavte služby SQL Server provedením následujícího příkazu v prostředí PowerShell:
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER
Zkopírujte soubor MSDBData.mdf a MSDBLog.ldf soubory do nového umístění a spusťte služby.
Spuštěním níže uvedeného dotazu ověřte umístění souboru:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='msdb'
Přesun databáze TempDB
Chcete-li přesunout TempDB databázi na jiný disk, nejprve spusťte příkaz ALTER DATABASE MODIFY FILE, abyste změnili umístění souboru v systémovém katalogu 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
Restartujte služby SQL Server provedením následujícího příkazu v prostředí PowerShell:
/*Restart SQL Services*/
PS C:\> Restart-Service MSSQLSERVER -Force
Spuštěním níže uvedeného dotazu ověřte umístění souboru:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='tempdb'
Můžete také použít nástroj Transaction Log od společnosti Devart – obsahuje také možnost prohlížení dat souborů MDF a LDF.
Shrnutí
Tento článek vysvětlil databázové soubory databáze SQL Server a způsoby zobrazení umístění souborů MDF. Popsal také procesy připojování a odpojování databází a ilustroval krok za krokem proces přesunu datových souborů systémových databází.