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

Gestisci i file MDF in SQL Server 2019

Un database di SQL Server contiene file di dati primari, file di dati secondari (facoltativi) e file di registro delle transazioni.

I file di dati primari e secondari contengono tabelle, oggetti di database, schemi e dati.

L'estensione del file del database primario è *.mdf e l'estensione del file di dati secondario è *.ndf .

I file di registro delle transazioni memorizzano tutte le modifiche apportate dalle transazioni (inserimento, aggiornamento ed eliminazione). Se SQL Server si riavvia in modo imprevisto o si arresta in modo anomalo, il motore di database ripristina la transazione incompleta prima del punto di errore utilizzando il file di registro delle transazioni.

L'estensione del file di registro delle transazioni è *.ldf . Potresti fare riferimento a questo articolo per comprendere l'architettura dei file di registro delle transazioni.

In questo articolo spiegherò come possiamo gestire i file di database (file MDF) in SQL Server 2019.

L'articolo tratterà i seguenti punti:

  1. Visualizza i dettagli del file di database utilizzando DMV e SQL Server Management Studio.
  2. Allega e scollega i file MDF dei database utente.
  3. Allega e scollega i file MDF dei database di sistema.

Visualizza i file di database utilizzando le viste a gestione dinamica

Per visualizzare i dettagli dei file mdf del database, possiamo utilizzare sys.database_files e sys.master_files . La query deve essere scritta come segue:

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

Poiché l'esempio si riferisce ai dettagli MDF per tutti i database, è necessario un codice diverso per visualizzare i file di database specifici. A tale scopo, utilizziamo sys.database_files .

Il seguente script recupererà i dettagli del SSISDB banca dati:

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

Visualizza i file di database utilizzando SQL Server Management Studio

L'opzione per visualizzare l'elenco dei file MDF disponibile in SQL Server Management Studio (SSMS).

In SQL Server Management Studio, connettersi all'istanza di SQL Server. Quindi, espandi Database -> Fare clic con il pulsante destro del mouse su qualsiasi database -> Fare clic su Proprietà :

In Proprietà database finestra, fare clic su File . Presenterà l'elenco del database MDF e LDF file:

Stacca e allega i file MDF del database utente

Esistono due modi per staccare e allegare file MDF del database utente:

  1. Utilizzo di SQL Server Management Studio.
  2. Utilizzo dello script T-SQL.

Allega e scollega il database utilizzando SSMS

Allega il database

Avvia SSMS -> Connetti all'istanza di SQL Server -> Fare clic con il pulsante destro del mouse su Database -> Fai clic su Allega .

Si aprirà il Allega database finestra. Fai clic su Aggiungi in quella finestra:

Nel nuovo Individua file di database finestra, sfoglia il file system per individuare l'MDF file. Fare doppio clic su di esso.

I file di dati e di registro associati vengono inseriti nei file associati vista griglia in Allega database finestra. Fai clic su OK per allegare il database.

Una volta collegato il database, puoi vederlo in SQL Server Management Studio:

Scollega il database

Avvia SQL Server Management Studio e connettiti all'istanza di SQL Server . Espandi l'elenco Database.

Fare clic con il pulsante destro del mouse sul database necessario -> Compiti -> Fare clic su Stacca .

Se vuoi disconnettere forzatamente tutti gli utenti e i processi connessi al database, fallo in Scollega database finestra.

Seleziona Rilascia connessioni opzione nei Database da scollegare sezione e fai clic su OK .

Allega e scollega il database utilizzando T-SQL

Possiamo usare CREA DATABASE WITH ATTACH query con la seguente sintassi:

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

Per allegare il database, eseguire la seguente query 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

Inoltre, possiamo eseguire sp_detach_db stored procedure per scollegare il database.

Se desideri disconnettere gli utenti in modo forzato, puoi utilizzare ALTER DATABASE SET SINGLE_USER comando nel seguente script:

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

Gestire i file MDF del database di sistema

Supponiamo di voler spostare i file MDF dei database di sistema (master, modello, msdb e Tempdb) in un'altra posizione. Esaminiamo il processo.

Sposta il database principale

Per spostare il master database, aprire Gestione configurazione SQL Server -> Fare clic su Servizi SQL Server -> Fare clic con il pulsante destro del mouse sul servizio SQL Server dell'istanza di SQL Server desiderata (MSSQLSERVER ) -> Fare clic su Proprietà :

Per modificare master.mdf percorso del file, fare clic sul percorso del file di dati del file master.

Il master.mdf il valore del percorso è seguito da -d e mastlog.ldf il valore del percorso è seguito da -l

Sostituisci questi valori con i seguenti:

File di dati:-dD:\MS_SQL\Data\master.mdf

File di registro:-lD:\MS_SQL\Log\mastlog.ldf

Una volta modificati i valori, fai clic su Aggiorna come mostrato nell'illustrazione seguente:

Fai clic su OK per salvare i valori.

Quindi arrestare i servizi di SQL Server e copiare i file di database in una nuova posizione. Al termine, riavvia il servizio SQL.

Esegui la query seguente per verificare il percorso del file.

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

Sposta il database del modello

Per spostare il database del modello su un'altra unità, dobbiamo prima eseguire un comando ALTER DATABASE MODIFY FILE. Serve per modificare la posizione nel catalogo di sistema di SQL Server.

Esegui sotto il comando:

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

Quindi, arresta i servizi di SQL Server eseguendo il comando seguente in PowerShell:

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

Copia il model.mdf e modellog.ldf file in una nuova posizione e avviare i servizi.

Esegui la query seguente per verificare il percorso del file:

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

Sposta il database MSDB

Per spostare l'MSDB database su un'altra unità, eseguire prima un comando ALTER DATABASE MODIFY FILE per modificare la posizione nel catalogo di sistema di 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

Arrestare i servizi di SQL Server eseguendo il comando seguente in PowerShell:

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

Copia MSDBData.mdf e MSDBLog.ldf file nella nuova posizione e avviare i servizi.

Esegui la query seguente per verificare il percorso del file:

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

Sposta il database TempDB

Per spostare il TempDB database su un'altra unità, eseguire prima un comando ALTER DATABASE MODIFY FILE per modificare la posizione del file nel catalogo di sistema di 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

Riavvia i servizi di SQL Server eseguendo il comando seguente in PowerShell:

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

Esegui la query seguente per verificare il percorso del file:

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

Puoi anche utilizzare lo strumento Registro transazioni della società Devart:include anche la possibilità di visualizzare i dati dei file MDF e LDF.

Riepilogo

In questo articolo vengono illustrati i file di database del database di SQL Server e le modalità di visualizzazione dei percorsi dei file MDF. Descriveva inoltre i processi di collegamento e scollegamento dei database e illustrava passo passo il processo di spostamento dei file di dati dei database di sistema.