Arquitetura de arquivos e grupos de arquivos

O SQL Server mapeia um banco de dados de um conjunto de arquivos do sistema operacional. As informações de log e dados nunca ficam misturadas no mesmo arquivo, e os arquivos individuais são usados apenas por um banco de dados. Os grupos de arquivos são conhecidos como coleções de arquivos e são usados para ajudar no posicionamento de dados e em tarefas administrativas, como operações de backup e restauração.

Arquivos do banco de dados

Os bancos de dados do SQL Server têm três tipos de arquivos:

  • Arquivos de dados primários

    O arquivo de dados primário é o ponto de partida do banco de dados e aponta para os outros arquivos no banco de dados. Todo banco de dados tem um arquivo de dados primário. A extensão de nome de arquivo indicada para arquivos de dados primários é .mdf.

  • Arquivos de dados secundários

    Arquivos de dados secundários compõem todos os arquivos de dados, menos o arquivo de dados primário. Alguns bancos de dados podem não ter nenhum arquivo de dados secundário, enquanto outros têm vários arquivos de dados secundários. A extensão de nome de arquivo indicada para arquivos de dados secundários é .ndf.

  • Arquivos de log

    Os arquivos de log mantêm todas as informações de log usadas para recuperar o banco de dados. Deve haver pelo menos um arquivo de log para cada banco de dados, embora possa haver mais de um. A extensão de nome de arquivo indicada para arquivos de log é .ldf.

O SQL Server não impõe as extensões de nome .mdf, .ndf e .ldf, mas essas extensões ajudam a identificar os tipos diferentes de arquivos e seus usos.

No SQL Server, os locais de todos os arquivos de um banco de dados são registrados no arquivo primário do banco de dados e no banco de dados mestre. O Mecanismo de banco de dados do SQL Server usa as informações de local de arquivo do banco de dados mestre a maior parte do tempo. No entanto, o Mecanismo de Banco de Dados usa as informações de local de arquivo do arquivo primário para inicializar as entradas de local de arquivo no banco de dados mestre nas seguintes situações:

  • Ao anexar um banco de dados usando a instrução CREATE DATABASE com as opções FOR ATTACH ou FOR ATTACH_REBUILD_LOG.

  • Ao fazer a atualização do SQL Server versão 2000 ou versão 7.0.

  • Ao restaurar o banco de dados mestre.

Nomes de arquivo lógico e físico

Os arquivos do SQL Server têm dois nomes:

logical_file_name

O nome logical_file_name é usado para se referir ao arquivo físico em todas as instruções Transact-SQL. O nome de arquivo lógico deve estar de acordo com as regras de identificadores SQL Server e deve ser exclusivo entre os nomes de arquivos lógicos no banco de dados.

os_file_name

O nome os_file_name denomina o arquivo físico que inclui o caminho de diretório. Ele deve seguir as regras dos nomes de arquivo de sistema operacional.

Os arquivos de log e os dados SQL Server podem ser colocados em sistemas de arquivos FAT ou NTFS. Recomendamos o uso do sistema de arquivos NTFS devido aos aspectos de segurança do NTFS. Os grupos de arquivos de dados de leitura/gravação e os arquivos de log não podem ser colocados em um sistema de arquivos compactados NTFS. Só podem ser colocados bancos de dados somente leitura e grupos de arquivos secundários somente leitura em um sistema de arquivos compactados NTFS. Para obter mais informações, consulte Grupos de arquivos somente leitura e compactação.

Quando são executadas várias instâncias do SQL Server em um único computador, cada instância recebe um diretório padrão diferente para manter os arquivos dos bancos de dados criados na instância. Para obter mais informações, consulte Locais de arquivos para instâncias padrão e nomeadas do SQL Server.

Páginas de arquivo de dados

As páginas de um arquivo de dados do SQL Server são numeradas em sequência, iniciando com zero (0) para a primeira página do arquivo. Cada arquivo em um banco de dados tem um número de ID de arquivo exclusivo. Para identificar de forma exclusiva uma página em um banco de dados, são necessários ID do arquivo e número de página. O exemplo a seguir mostra os números de página em um banco de dados que tem um arquivo de dados primário de 4 MB e um arquivo de dados secundário de 1 MB.

Números de página sequenciais em dois arquivos de dados

A primeira página de cada arquivo é uma página de cabeçalho de arquivo que contém informações sobre os atributos do arquivo. Várias outras páginas do início do arquivo também têm informações de sistema, como mapas de alocação. Uma das páginas de sistema armazenada no arquivo de dados primário e no primeiro arquivo de log é uma página de inicialização de banco de dados que contém informações sobre os atributos do banco de dados. Para obter mais informações sobre essas páginas e os tipos de páginas, consulte Compreendendo páginas e extensões.

Tamanho do arquivo

Os arquivos do SQL Server podem aumentar automaticamente a partir do tamanho original especificado. Ao definir um arquivo, você poderá definir um incremento de crescimento específico. Sempre que o arquivo estiver cheio, seu tamanho aumentará com base no incremento de crescimento. Se houver vários arquivos em um grupo de arquivos, eles não crescerão automaticamente até que todos os arquivos estejam cheios. O crescimento acontece na forma de rodízio.

Cada arquivo também pode ter um tamanho máximo especificado. Se um tamanho máximo não for especificado, o arquivo continuará crescendo até usar todo o espaço disponível no disco. Esse recurso é muito útil quando o SQL Server é usado como um banco de dados incorporado em um aplicativo em que o usuário não tem acesso conveniente a um administrador de sistema. O usuário pode deixar o crescimento automático de arquivos conforme exigido para reduzir a carga administrativa de monitoramento do espaço livre do banco de dados e de alocação manual de espaço adicional.

Arquivos de instantâneo do banco de dados

O formulário do arquivo usado por um instantâneo do banco de dados para armazenar seus dados de cópia-na-gravação depende de o instantâneo ser criado por um usuário ou usado internamente:

  • Um instantâneo do banco de dados criado por um usuário armazena seus dados em um ou mais arquivos esparsos. A tecnologia de arquivo esparso é um recurso do sistema de arquivos NTFS. A princípio, um arquivo esparso não contém nenhum dado de usuário, e o espaço de disco para dados de usuário não foi alocado ao arquivo esparso. Para obter informações gerais sobre o uso de arquivos esparsos em instantâneos do banco de dados e como os instantâneos do banco de dados aumentam, consulte Como funcionam os instantâneos de banco de dados e Compreendendo tamanhos de arquivo esparso em instantâneos do banco de dados.

  • Os instantâneos de banco de dados são usados internamente por determinados comandos DBCC. Esses comandos incluem DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC e DBCC CHECKFILEGROUP. Um instantâneo do banco de dados interno usa fluxos de dados alternativos esparsos dos arquivos de banco de dados originais. Assim como os arquivos esparsos, os fluxos de dados alternativos são um recurso do sistema de arquivos NTFS. O uso de fluxos de dados alternativos esparsos permite que as alocações de dados múltiplas sejam associadas a um único arquivo ou pasta sem afetar o tamanho do arquivo ou as estatísticas de volume.

Grupos de arquivos do banco de dados

Podem ser agrupados arquivos e objetos do banco de dados em grupos de arquivos para fins de alocação e administração. Existem dois tipos de grupos de arquivos:

Primário

O grupo de arquivos primário contém o arquivo de dados primário e quaisquer outros arquivos que não sejam especificamente atribuídos a outro grupo de arquivos. Todas as páginas das tabelas do sistema são alocadas ao grupo de arquivos primário.

Definido pelo usuário

Os grupos de arquivos definidos pelo usuário são quaisquer grupos de arquivos especificados usando a palavra-chave FILEGROUP em uma instrução CREATE DATABASE ou ALTER DATABASE.

Os arquivos de log nunca fazem parte de um grupo de arquivos. O espaço de log é gerenciado separadamente do espaço de dados.

Nenhum arquivo pode ser um membro de mais de um grupo de arquivos. Os dados de tabelas, índices e objetos grandes podem ser associados a um grupo de arquivos especificado. Nesse caso, todas as páginas serão alocadas naquele grupo de arquivos, ou as tabelas e os índices poderão ser particionados. Os dados de tabelas e índices particionados são divididos em unidades que podem ser colocadas em um grupo de arquivos separado em um banco de dados. Para obter mais informações sobre tabelas e índices particionados, consulte Tabelas e índices particionados.

Um grupo de arquivos em cada banco de dados é designado ao grupo de arquivos padrão. Quando uma tabela ou índice é criado sem especificar um grupo de arquivos, presume-se que todas as páginas serão alocadas do grupo de arquivos padrão. Apenas um grupo de arquivos por vez pode ser o grupo de arquivos padrão. Os membros da função de banco de dados fixa db_owner podem alternar o grupo de arquivos padrão de um grupo de arquivos para outro. Se nenhum grupo de arquivos padrão for especificado, o grupo de arquivos primário será o grupo de arquivos padrão.

Exemplo de arquivo e grupo de arquivos

O exemplo a seguir cria um banco de dados em uma instância do SQL Server. O banco de dados tem um arquivo de dados primário, um grupo de arquivos definido pelo usuário e um arquivo de log. O arquivo de dados primário está no grupo de arquivos primário e o grupo de arquivos definido pelo usuário tem dois arquivos de dados secundários. Uma instrução ALTER DATABASE torna padrão o grupo de arquivos definido pelo usuário. Depois, é criada uma tabela que especifica o grupo de arquivos definido pelo usuário.

USE master;
GO
-- Create the database with the default data
-- filegroup and a log file. Specify the
-- growth increment and the max size for the
-- primary data file.
CREATE DATABASE MyDB
ON PRIMARY
  ( NAME='MyDB_Primary',
    FILENAME=
       'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\data\MyDB_Prm.mdf',
    SIZE=4MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB),
FILEGROUP MyDB_FG1
  ( NAME = 'MyDB_FG1_Dat1',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\data\MyDB_FG1_1.ndf',
    SIZE = 1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB),
  ( NAME = 'MyDB_FG1_Dat2',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\data\MyDB_FG1_2.ndf',
    SIZE = 1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB)
LOG ON
  ( NAME='MyDB_log',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\data\MyDB.ldf',
    SIZE=1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB);
GO
ALTER DATABASE MyDB 
  MODIFY FILEGROUP MyDB_FG1 DEFAULT;
GO

-- Create a table in the user-defined filegroup.
USE MyDB;
CREATE TABLE MyTable
  ( cola int PRIMARY KEY,
    colb char(8) )
ON MyDB_FG1;
GO

A ilustração a seguir resume os resultados do exemplo anterior.

Nomes de arquivo lógico e físico de um banco de dados

Consulte também

Conceitos