De acordo com meu entendimento (até agora), qualquer banco de dados de usuário contém três tipos de arquivos - mdf, ndf e ldf.
MDF significa arquivo de metadados e armazena definição de dados, bem como dados (no caso de banco de dados pequeno e nenhum outro arquivo existe para dados).
NDF é basicamente para dados de tabelas e armazena dados, podemos ditar qual tabela pode ser alocada aqui com base em grupos de arquivos.
LDF significa arquivo de dados de log. Isso armazena VLFs (arquivos de log virtuais)
Fiquei com a impressão de que pode haver apenas um arquivo .mdf pertencente ao grupo de arquivos primário e n número de arquivos .ndf pertencentes ao grupo de arquivos primário ou definido pelo usuário.
Eu estava criando um banco de dados e criei vários grupos de arquivos e extensão esquerda .mdf (por engano) para todos eles e para minha surpresa, agora meu banco de dados possui três arquivos .mdf pertencentes a diferentes grupos de arquivos, conforme mostrado abaixo:
CREATE DATABASE [TEST_DBASE]
ON PRIMARY
( NAME = N'TEST_DBASE', FILENAME = N'E:\DB\TEST_DBASE.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB ),
FILEGROUP [ACCNTS_FILEGROUP]
( NAME = N'ACCNTS_FILE', FILENAME = N'E:\DB\ACCNTS_FILE.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB ),
FILEGROUP [LOAN_FILEGROUP]
( NAME = N'LOAN_FILE', FILENAME = N'E:\DB\LOAN_FILE.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
Nesse caso, como faremos a restauração gradual se precisarmos colocar apenas a tabela Contas online?
Anteriormente estávamos seguindo os passos abaixo:
RESTORE DATABASE [TEST_DBASE]
FILEGROUP = 'PRIMARY' FROM DISK = 'E:\BACKUPS\FullBackup.BAK' with NORECOVERY, PARTIAL
RESTORE DATABASE [TEST_DBASE]
FILEGROUP = 'ACCNTS_FILEGROUP' FROM DISK = 'E:\BACKUPS\FullBackup.BAK' with NORECOVERY
RESTORE LOG [TEST_DBASE] FROM DISK = 'E:\BACKUPS\LogBackup.trn' with RECOVERY
As etapas acima foram tornar a tabela Contas online e acessível.
Para colocar as tabelas de Empréstimos online posteriormente (tabela não crítica), costumávamos realizar as etapas abaixo:
BACKUP LOG [BANK_DATABASE] TO DISK = 'E:\BACKUPS\Backup_tail.trn' with FORMAT, NORECOVERY
RESTORE DATABASE [TEST_DBASE]
FILEGROUP = 'LOAN_FILEGROUP' FROM DISK = 'E:\BACKUPS\FullBackup.BAK' with NORECOVERY
RESTORE LOG [TEST_DBASE] FROM DISK = 'E:\BACKUPS\LogBackup.trn' with NORECOVERY
RESTORE LOG [TEST_DBASE] FROM DISK = 'E:\BACKUPS\Backup_tail.trn' with RECOVERY
Minha preocupação no cenário acima é - haverá alguma alteração para a restauração gradual, considerando o fato de que o arquivo de metadados agora está espalhado em todos os grupos de arquivos e não pertence apenas ao grupo de arquivos primário.
Para qualquer restauração parcial, a restauração do grupo de arquivos primário era obrigatória, pois contém todos os metadados, mas se todos os arquivos agora forem .mdf, como isso funcionará?
As extensões de arquivo não fazem sentido para o aplicativo. Por exemplo, crie um arquivo de texto e nomeie-o
textfile.foo
e abra-o no Bloco de Notas. O bloco de notas não se importa com o nome do arquivo - ele apenas o abre porque você disse para abri-lo.O SQL Server funciona da mesma maneira. Você pode nomear os arquivos com qualquer extensão que desejar e isso não altera a forma como o SQL Server os utiliza. O primeiro arquivo de dados, que normalmente é aquele com o arquivo .mdf, sempre conterá os metadados e nunca poderá ser removido. Os metadados não serão distribuídos para outros arquivos apenas porque você deu a eles uma extensão de arquivo .mdf.
Extensões de arquivo são quase sempre para humanos - para que possamos acompanhar mais facilmente as coisas. Assim, usamos a extensão .mdf no primeiro arquivo de dados e .ndf em arquivos de dados adicionais para que os humanos possam dizer facilmente qual arquivo contém os metadados e nunca poderá ser removido do banco de dados.
Tenho certeza de que existem alguns aplicativos por aí que exigem extensões de arquivo para atender a determinados requisitos, mas o SQL Server não é um deles, pelo menos não em relação à extensão de arquivo em arquivos de banco de dados.