Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Gerenciar arquivos MDF no SQL Server 2019


Um banco de dados SQL Server contém arquivos de dados primários, arquivos de dados secundários (opcional) e arquivos de log de transações.

Os arquivos de dados primários e secundários contêm tabelas, objetos de banco de dados, esquema e dados.

A extensão do arquivo do banco de dados primário é *.mdf , e a extensão do arquivo de dados secundário é *.ndf .

Os arquivos de log de transações armazenam todas as alterações feitas pelas transações (inserir, atualizar e excluir). Se o SQL Server for reiniciado inesperadamente ou travar, o mecanismo de banco de dados reverterá a transação incompleta antes do ponto de falha usando o arquivo de log de transações.

A extensão do arquivo de log de transações é *.ldf . Você pode querer consultar este artigo para entender a arquitetura de arquivos de log de transações.

Neste artigo, explicarei como podemos gerenciar os arquivos de banco de dados (arquivos MDF) no SQL Server 2019.

O artigo abordará os seguintes pontos:
  1. Visualize os detalhes do arquivo de banco de dados usando DMVs e SQL Server Management Studio.
  2. Anexar e desanexar os arquivos MDF do banco de dados do usuário.
  3. Anexar e desanexar os arquivos MDF dos bancos de dados do sistema.

Visualizar arquivos de banco de dados usando visualizações de gerenciamento dinâmico


Para visualizar os detalhes dos arquivos mdf do banco de dados, podemos usar sys.database_files e sys.master_files . A consulta deve ser escrita da seguinte forma:
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

Como o exemplo se refere aos detalhes do MDF para todos os bancos de dados, precisamos de um código diferente para visualizar os arquivos de banco de dados específicos. Para isso, usamos sys.database_files .

O script a seguir recuperará os detalhes do SSISDB base de dados:
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

Visualize os arquivos de banco de dados usando o SQL Server Management Studio


A opção de visualizar a lista de arquivos MDF disponível no SQL Server Management Studio (SSMS).

No SQL Server Management Studio, conectar-se à instância do SQL Server. Em seguida, expanda Bancos de dados -> Clique com o botão direito do mouse em qualquer banco de dados -> Clique em Propriedades :

Nas Propriedades do banco de dados janela, clique em Arquivos . Ele apresentará a lista do banco de dados MDF e LDF arquivos:

Anexar e desanexar os arquivos MDF do banco de dados do usuário


Existem duas maneiras de desanexar e anexar arquivos MDF do banco de dados do usuário:
  1. Usando o SQL Server Management Studio.
  2. Usando script T-SQL.

Anexar e desanexar banco de dados usando SSMS

Anexar o banco de dados


Inicie o SSMS -> Conecte-se à instância do SQL Server -> Clique com o botão direito do mouse em Banco de dados -> Clique em Anexar .

Ele abrirá o Anexar Bancos de Dados janela. Clique em Adicionar nessa janela:

No novo Localizar arquivos de banco de dados janela, navegue no sistema de arquivos para localizar o MDF Arquivo. Clique duas vezes nele.

Os arquivos de dados e logs associados são preenchidos nos arquivos associados visualização em grade em Anexar bancos de dados janela. Clique em OK para anexar o banco de dados.

Depois que o banco de dados estiver anexado, você poderá vê-lo no SQL Server Management Studio:

Desanexar o banco de dados


Inicie o SQL Server Management Studio e conecte-se à instância do SQL Server . Expanda a lista Bancos de dados.

Clique com o botão direito do mouse no banco de dados necessário -> Tarefas -> Clique em Desanexar .

Se você deseja desconectar à força todos os usuários e processos conectados ao banco de dados, faça isso no Desanexar banco de dados janela.

Marque as Soltar conexões opção em Bancos de dados para desanexar seção e clique em OK .

Anexar e desanexar o banco de dados usando T-SQL


Podemos usar CREATE DATABASE WITH ATTACH query com a seguinte sintaxe:
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

Para anexar o banco de dados, execute a seguinte consulta 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

Além disso, podemos executar o sp_detach_db procedimento armazenado para desanexar o banco de dados.

Se você deseja desconectar os usuários com força, pode usar o ALTER DATABASE SET SINGLE_USER comando no script a seguir:
Use [master]
GO
ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
EXEC sp_detach_db [WideWorldImporters]
GO

Gerenciar os arquivos MDF do banco de dados do sistema


Suponha que queremos mover os arquivos MDF dos bancos de dados do sistema (master, model, msdb e Tempdb) para outro local. Vamos examinar o processo.

Mover o banco de dados mestre


Para mover o mestre banco de dados, abra o gerenciador de configuração do SQL Server -> Clique em SQL Server Services -> Clique com o botão direito do mouse no serviço SQL Server da instância SQL Server desejada (MSSQLSERVER ) -> Clique em Propriedades :

Para alterar o master.mdf local do arquivo, clique no caminho do arquivo de dados do arquivo mestre.

O master.mdf o valor do caminho é seguido por -d , e mastlog.ldf o valor do caminho é seguido por -l

Substitua esses valores pelo seguinte:

Arquivo de dados:-dD:\MS_SQL\Data\master.mdf

Arquivo de log:-lD:\MS_SQL\Log\mastlog.ldf

Depois que os valores forem alterados, clique em Atualizar como mostra a ilustração abaixo:

Clique em OK para salvar os valores.

Em seguida, pare os serviços do SQL Server e copie os arquivos de banco de dados para um novo local. Após a conclusão, inicie o serviço SQL novamente.

Execute a consulta abaixo para verificar o local do arquivo.
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='master'

Mover o banco de dados do modelo


Para mover o banco de dados Modelo para outra unidade, devemos primeiro executar um comando ALTER DATABASE MODIFY FILE. Serve para alterar a localização no catálogo do sistema SQL Server.

Execute o comando abaixo:
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

Em seguida, interrompa os serviços do SQL Server executando o comando abaixo no PowerShell:
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER 

Copie o model.mdf e modellog.ldf arquivos para um novo local e inicie os serviços.

Execute a consulta abaixo para verificar o local do arquivo:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='model'

Mover o banco de dados MSDB


Para mover o MSDB banco de dados para outra unidade, execute um comando ALTER DATABASE MODIFY FILE primeiro para alterar o local no catálogo do sistema 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

Pare os serviços do SQL Server executando o seguinte comando no PowerShell:
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER 

Copie o MSDBData.mdf e MSDBLog.ldf arquivos para o novo local e inicie os serviços.

Execute a consulta abaixo para verificar o local do arquivo:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='msdb'

Mover o banco de dados TempDB


Para mover o TempDB banco de dados para outra unidade, execute um comando ALTER DATABASE MODIFY FILE primeiro para alterar o local do arquivo no catálogo do sistema 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

Reinicie os serviços do SQL Server executando o seguinte comando no PowerShell:
/*Restart SQL Services*/
PS C:\> Restart-Service MSSQLSERVER -Force

Execute a consulta abaixo para verificar o local do arquivo:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='tempdb'

Você também pode usar a ferramenta Transaction Log da empresa Devart – ela também inclui a opção de visualizar os dados dos arquivos MDF e LDF.

Resumo


Este artigo explicou os arquivos de banco de dados do banco de dados SQL Server e as formas de exibir os locais dos arquivos MDF. Descreveu também os processos de anexação e desconexão dos bancos de dados e ilustrou o processo passo a passo de movimentação dos arquivos de dados dos bancos de dados do sistema.