sql >> Database teknologi >  >> RDS >> Sqlserver

Administrer MDF-filer i SQL Server 2019

En SQL Server-database indeholder primære datafiler, sekundære datafiler (valgfrit) og transaktionslogfiler.

De primære og sekundære datafiler indeholder tabeller, databaseobjekter, skemaer og data.

Filtypenavnet på den primære databasefil er *.mdf , og filtypenavnet på den sekundære datafil er *.ndf .

Transaktionslogfilerne gemmer alle ændringer foretaget af transaktionerne (indsæt, opdater og slet). Hvis SQL Server genstarter uventet eller går ned, ruller databasemotoren den ufuldstændige transaktion tilbage før fejlpunktet ved hjælp af transaktionslogfilen.

Udvidelsen af ​​transaktionslogfilen er *.ldf . Du kan eventuelt henvise til denne artikel for at forstå arkitekturen for transaktionslogfiler.

I denne artikel vil jeg forklare, hvordan vi kan administrere databasefilerne (MDF-filer) i SQL Server 2019.

Artiklen vil dække følgende punkter:

  1. Se databasefildetaljerne ved hjælp af DMV'er og SQL Server Management Studio.
  2. Vedhæft og frigør brugerdatabasernes MDF-filer.
  3. Vedhæft og frigør systemdatabasernes MDF-filer.

Se databasefiler ved hjælp af dynamiske administrationsvisninger

For at se detaljerne i databasens mdf-filer kan vi bruge sys.database_files og sys.master_files . Forespørgslen skal skrives som følger:

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

Da eksemplet refererer til MDF-detaljerne for alle databaser, har vi brug for en anden kode for at se de specifikke databasefiler. Til det formål bruger vi sys.database_files .

Følgende script vil hente detaljerne i SSISDB database:

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

Se databasefilerne ved hjælp af SQL Server Management Studio

Muligheden for at se MDF-fillisten, der er tilgængelig i SQL Server Management Studio (SSMS).

I SQL Server Management Studio, oprette forbindelse til SQL Server-instansen. Udvid derefter Databaser -> Højreklik på enhver database -> Klik på Egenskaber :

I Databaseegenskaber vindue, skal du klikke på Filer . Det vil præsentere listen over databasen MDF og LDF filer:

Fjern og vedhæft brugerdatabasens MDF-filer

Der er to måder at frakoble og vedhæfte MDF-filer i brugerdatabasen:

  1. Brug af SQL Server Management Studio.
  2. Bruger T-SQL-script.

Vedhæft og frakoble database ved hjælp af SSMS

Vedhæft databasen

Start SSMS -> Opret forbindelse til SQL Server-instansen -> Højreklik på Database -> Klik på Vedhæft .

Det åbner Vedhæft databaser vindue. Klik på Tilføj i det vindue:

I den nye Find databasefiler vindue, gennemse filsystemet for at finde MDF fil. Dobbeltklik på det.

De tilknyttede datafiler og logfiler er udfyldt i de tilknyttede filer gittervisning i Vedhæft databaser vindue. Klik på OK for at vedhæfte databasen.

Når databasen er vedhæftet, kan du se den i SQL Server Management Studio:

Ladgør databasen

Start SQL Server Management Studio, og opret forbindelse til SQL Server-instansen . Udvid databaselisten.

Højreklik på den nødvendige database -> Opgaver -> Klik på Fjern .

Hvis du tvangsmæssigt vil afbryde forbindelsen til alle brugere og processer, der er forbundet til databasen, gør du det i Frakoble databasen vindue.

Markér Slet forbindelser mulighed i Databaser, der skal frakobles og klik på OK .

Vedhæft og frakoble databasen ved hjælp af T-SQL

Vi kan bruge CREATE DATABASE WITH ATTACH forespørgsel med følgende syntaks:

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

For at vedhæfte databasen skal du køre følgende T-SQL-forespørgsel:

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

Vi kan også køre sp_detach_db gemt procedure for at frakoble databasen.

Hvis du vil afbryde brugernes forbindelse kraftigt, kan du bruge ALTER DATABASE SET SINGLE_USER kommando i følgende script:

Use [master]
GO
ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
EXEC sp_detach_db [WideWorldImporters]
GO

Administrer systemdatabasens MDF-filer

Antag, at vi ønsker at flytte systemdatabasernes MDF-filer (master, model, msdb og Tempdb) til en anden placering. Lad os undersøge processen.

Flyt masterdatabasen

For at flytte masteren database, åbn SQL Server Configuration Manager -> Klik på SQL Server Services -> Højreklik på SQL Server-tjenesten for den ønskede SQL Server-instans (MSSQLSERVER ) -> Klik på Egenskaber :

For at ændre master.mdf filplacering, klik på datafilstien til masterfilen.

master.mdf stiværdi efterfølges af -d og mastlog.ldf stiværdi efterfølges af -l

Erstat disse værdier med følgende:

Datafil:-dD:\MS_SQL\Data\master.mdf

Logfil:-lD:\MS_SQL\Log\mastlog.ldf

Når værdierne er ændret, skal du klikke på Opdater som vist i illustrationen nedenfor:

Klik på OK for at gemme værdierne.

Stop derefter SQL Server-tjenesterne og kopier databasefilerne til en ny placering. Efter afslutningen skal du starte SQL-tjenesten igen.

Kør nedenstående forespørgsel for at bekræfte filplaceringen.

select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='master'

Flyt modeldatabasen

For at flytte modeldatabasen til et andet drev skal vi først køre en ALTER DATABASE MODIFY FILE-kommando. Det tjener til at ændre placeringen i SQL Server-systemkataloget.

Kør nedenstående kommando:

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

Stop derefter SQL Server-tjenester ved at udføre nedenstående kommando i PowerShell:

/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER 

Kopiér model.mdf og modellog.ldf filer til en ny placering og start tjenesterne.

Kør nedenstående forespørgsel for at bekræfte filplaceringen:

select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='model'

Flyt MSDB-databasen

For at flytte MSDB database til et andet drev, kør først en ALTER DATABASE MODIFY FILE-kommando for at ændre placeringen i SQL Server-systemkataloget:

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

Stop SQL Server-tjenesterne ved at udføre følgende kommando i PowerShell:

/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER 

Kopiér MSDBData.mdf og MSDBLog.ldf filer til den nye placering og start tjenesterne.

Kør nedenstående forespørgsel for at bekræfte filplaceringen:

select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='msdb'

Flyt TempDB-databasen

For at flytte TempDB database til et andet drev, kør først en ALTER DATABASE MODIFY FILE-kommando for at ændre filplaceringen i SQL Server-systemkataloget:

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

Genstart SQL Server-tjenesterne ved at udføre følgende kommando i PowerShell:

/*Restart SQL Services*/
PS C:\> Restart-Service MSSQLSERVER -Force

Kør nedenstående forespørgsel for at bekræfte filplaceringen:

select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='tempdb'

Du kan også bruge Transaction Log-værktøjet fra Devart-virksomheden – det inkluderer også muligheden for at se MDF- og LDF-filernes data.

Oversigt

Denne artikel forklarede databasefilerne i SQL Server-databasen og måderne at se MDF-filplaceringerne på. Den beskrev også processerne for at vedhæfte og frakoble databaserne og illustrerede trin for trin processen med at flytte systemdatabasens datafiler.


  1. ScaleGrid DigitalOcean Support til MySQL, PostgreSQL og Redis™ nu tilgængelig

  2. EXECUTE...USING statement i PL/pgSQL virker ikke med posttype?

  3. Implementering af en-til-nul-eller-en relation i SQL Server

  4. Opsætning af maven-afhængighed til SQL Server