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:
- Visualizza i dettagli del file di database utilizzando DMV e SQL Server Management Studio.
- Allega e scollega i file MDF dei database utente.
- 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:
- Utilizzo di SQL Server Management Studio.
- 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.