Criar um instantâneo de banco de dados (Transact-SQL)

Aplica-se a: SQL Server

A única maneira de criar um instantâneo de banco de dados do SQL Server é usando o Transact-SQL. O SQL Server Management Studio não oferece suporte à criação de instantâneos de banco de dados.

Pré-requisitos

O banco de dados de origem, que pode usar qualquer modelo de recuperação, deve atender aos seguintes pré-requisitos:

  • A instância de servidor deve estar sendo executada em uma edição do SQL Server que oferece suporte a instantâneos de banco de dados. Para obter informações sobre o suporte para o espelhamento de banco de dados no SQL Server, consulte Edições e recursos com suporte do SQL Server 2022.

  • O banco de dados de origem precisa estar online, a menos que se trate de um banco de dados espelho dentro de uma sessão de espelhamento de banco de dados.

  • Para criar um instantâneo do banco de dados em um banco de dados espelho, o banco de dados precisa estar no estado de espelhamentosincronizado.

  • O banco de dados de origem não pode ser configurado como banco de dados compartilhado escalonável.

  • Antes do SQL Server 2019 (15.x), o banco de dados de origem não podia conter um grupo de arquivos MEMORY_OPTIMIZED_DATA. O suporte a instantâneos do banco de dados em memória foi adicionado no SQL Server 2019 (15.x).

Importante

Para obter informações sobre outras considerações significativas, consulte Instantâneos de banco de dados (SQL Server).

Recomendações

Esta seção aborda as seguintes práticas recomendadas:

Prática recomendada: nomear instantâneos de banco de dados

Antes de criar instantâneos, é importante considerar como nomeá-los. Cada instantâneo de banco de dados requer um nome exclusivo de banco de dados. Para facilidade administrativa, o nome de um instantâneo pode inserir informações que identifiquem o banco de dados, como:

  • O nome do banco de dados de origem.

  • Uma indicação de que o nome novo destina-se a um instantâneo.

  • A data de criação e o horário do instantâneo, um número de sequência ou alguma outra informação, como hora do dia, para distinguir instantâneos sequenciais em um determinado banco de dados.

Por exemplo, considere uma série de instantâneos para o banco de dados AdventureWorks2022 . Três instantâneos diários são criados em intervalos de 6 horas entre 6h e 18h, com base em um relógio de 24 horas. Cada instantâneo diário é mantido durante 24 horas antes de ser descartado e substituído por um instantâneo novo de mesmo nome. O nome de cada instantâneo indica a hora, mas não o dia:

AdventureWorks_snapshot_0600
AdventureWorks_snapshot_1200
AdventureWorks_snapshot_1800

Como alternativa, se a hora de criação desses instantâneos diários variar de um dia para o outro, uma convenção de nomenclatura menos precisa poderia ser preferível, como por exemplo:

AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening

Prática recomendada: limitar o número de instantâneos de banco de dados

Criar uma série de instantâneos do longo do tempo captura instantâneos sequenciais do banco de dados de origem. Cada instantâneo persiste até que seja explicitamente descartado. Como cada instantâneo continuará crescendo à medida que as páginas originais forem atualizadas, você pode preferir conservar espaço de disco excluindo um instantâneo mais antigo depois de criar um instantâneo novo.

Observação

Para reverter a um instantâneo de banco de dados, você precisa excluir qualquer outro instantâneo desse banco de dados.

Prática recomendada: conexões de clientes a um instantâneo de banco de dados

Para usar um instantâneo de banco de dados, os clientes precisam saber onde encontrá-lo. Os usuários podem ler de um instantâneo de banco de dados enquanto outro está sendo criado ou excluído. Porém, quando você substituir um instantâneo novo por um já existente, será necessário redirecionar os clientes ao novo instantâneo. Os usuários podem se conectar manualmente a um instantâneo de banco de dados com o SQL Server Management Studio ou o Azure Data Studio. No entanto, para dar suporte a um ambiente de produção, você deverá criar uma solução programática que direcione de maneira transparente os clientes de gravação de relatório ao último instantâneo de banco de dados do banco de dados.

Permissões

Qualquer usuário que possa criar um banco de dados pode criar um instantâneo de banco de dados, entretanto, para criar um instantâneo de um banco de dados espelho, você deve ser um membro da função de servidor fixa sysadmin .

Criar um instantâneo de banco de dados usando o Transact-SQL

  1. Com base no tamanho atual do banco de dados de origem, verifique se você tem espaço em disco suficiente para suportar o instantâneo do banco de dados. O tamanho máximo de um instantâneo do banco de dados é o tamanho do banco de dados de origem no momento da criação do instantâneo. Para obter mais informações, consulte Exibir o tamanho do arquivo esparso de um instantâneo de banco de dados (Transact-SQL).

  2. Emita uma instrução CREATE DATABASE nos arquivos usando a cláusula AS SNAPSHOT OF. Criar um instantâneo requer especificar o nome lógico de cada arquivo de banco de dados do banco de dados de origem. A sintaxe dela é a seguinte:

    CREATE DATABASE database_snapshot_name
    ON
    (
        NAME = logical_file_name
        , FILENAME = 'os_file_name'
    ) [ , ...n ]
    
    AS SNAPSHOT OF source_database_name
    [;]
    

    Os argumentos são os seguintes:

    Argument Descrição
    database_snapshot_name O nome do instantâneo para o qual você deseja reverter o banco de dados.
    logical_file_name O nome lógico do banco de dados de origem usado no SQL Server ao referenciar o arquivo.
    os_file_name O caminho e o nome do arquivo usados pelo sistema operacional quando você cria o arquivo.
    source_database_name O banco de dados de origem.

    Para obter uma descrição completa dessa sintaxe, consulte CREATE DATABASE (SQL Server Transact-SQL).

    Observação

    Quando você cria um instantâneo do banco de dados, arquivos de log, arquivos offline, arquivos de restauração e arquivos extintos não são permitidos na instrução CREATE DATABASE.

Exemplos

A extensão .ss é usada nesses exemplos por conveniência e não é necessária. Em bancos de dados contendo vários arquivos, todos os arquivos devem ser especificados, de acordo com a sintaxe. Grupos de arquivos não são especificados.

R. Criar um instantâneo no banco de dados AdventureWorks

Este exemplo cria um instantâneo de banco de dados no banco de dados AdventureWorks . O nome do instantâneo, AdventureWorks_dbss_1800, e o nome do arquivo esparso, AdventureWorks_data_1800.ss, indicam o horário de criação de 6 P.M. (1800 horas).

CREATE DATABASE AdventureWorks_dbss1800 ON (
    NAME = AdventureWorks,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss'
    ) AS SNAPSHOT OF AdventureWorks;
GO

B. Criar um instantâneo no banco de dados Sales

Esse exemplo cria um instantâneo de banco de dados, sales_snapshot1200, no banco de dados Sales, que é o mesmo banco de dados de exemplo de Criar um banco de dados que tenha grupos de arquivos em CREATE DATABASE.

--Create sales_snapshot1200 as snapshot of the Sales database:
CREATE DATABASE sales_snapshot1200 ON (
    NAME = SPri1_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss'
    ),
    (
    NAME = SPri2_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss'
    ),
    (
    NAME = SGrp1Fi1_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss'
    ),
    (
    NAME = SGrp1Fi2_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss'
    ),
    (
    NAME = SGrp2Fi1_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss'
    ),
    (
    NAME = SGrp2Fi2_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss'
    ) AS SNAPSHOT OF Sales;
GO