Поделиться через


Создание моментального снимка базы данных (Transact-SQL)

Область применения:SQL Server

Единственным способом создания моментального снимка базы данных SQL Server является использование Transact-SQL. В SQL Server Management Studio не поддерживается создание моментальных снимков базы данных.

Предварительные требования

База данных-источник, в которой может применяться любая модель восстановления, должна соответствовать следующим предварительным требованиям.

  • Экземпляр сервера должен использовать версию SQL Server, поддерживающую моментальный снимок базы данных. Сведения о поддержке моментальных снимков базы данных в SQL Server смотрите в разделе Выпуски и поддерживаемые функции SQL Server 2022.

  • База данных-источник должна быть в сети, если база данных не является зеркалом в сеансе зеркалирования.

  • Для создания снимка базы данных в зеркальной базе данных необходимо привести эту базу данных в синхронизированное состояние зеркального отображения.

  • Исходная база данных не может быть настроена как масштабируемая общая база данных.

  • До SQL Server 2019 (15.x) исходная база данных не могла содержать файловую группу MEMORY_OPTIMIZED_DATA . Добавлена поддержка моментальных снимков базы данных в памяти в SQL Server 2019 (15.x).

Внимание

Дополнительные сведения о других важных соображениях см. в статье "Моментальные снимки базы данных" (SQL Server).

Рекомендации

В этом разделе обсуждаются следующие рекомендации:

Практическое руководство: именование моментальных снимков базы данных

Прежде чем создавать моментальные снимки, важно подумать о том, как их назвать. Каждому моментальному снимку базы данных требуется уникальное имя. Чтобы упростить управление, моментальному снимку следует присвоить имя, которое позволяет определить базу данных, например:

  • Имя исходной базы данных.

  • Признак того, что новое имя предназначено для моментального снимка.

  • Дата и время создания моментального снимка, порядковый номер или другие сведения, такие как время в течение дня, которые позволяют отличить последовательные моментальные снимки конкретной базы данных.

Например, рассмотрим серию моментальных снимков базы данных AdventureWorks2022. Три ежедневных моментальных снимка создаются с интервалом в 6 часов между 6 утра и 6 вечера по 24-часовому формату. Каждый моментальный снимок хранится 24 часа, после этого он удаляется и заменяется одноименным снимком. Каждое имя моментального снимка указывает час, но не день:

AdventureWorks_snapshot_0600
AdventureWorks_snapshot_1200
AdventureWorks_snapshot_1800

Если время создания этих ежедневных моментальных снимков варьируется изо дня в день, можно использовать менее точные обозначения, например:

AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening

Лучшая практика: ограничение количества моментальных снимков базы данных

Благодаря созданию моментальных снимков через определенные промежутки времени формируется последовательность снимков базы данных-источника. Каждый моментальный снимок сохраняется до явного удаления. Поскольку каждый моментальный снимок будет продолжать расти по мере обновления первоначальных страниц, возможно, потребуется освободить место на диске для новых снимков за счет удаления старых.

Примечание.

Чтобы восстановить моментальный снимок базы данных, необходимо удалить все другие снимки из базы данных.

Лучшая практика: клиентские подключения к моментальному снимку базы данных

Чтобы воспользоваться моментальным снимком базы данных, клиенты должны знать, где его найти. Пользователи могут читать из одного моментального снимка базы данных, пока создается или удаляется другой. Тем не менее при замене существующего снимка новым необходимо перенаправить клиентов на новый снимок. Пользователи могут вручную подключаться к моментальному снимку базы данных с помощью SQL Server Management Studio или Azure Data Studio. Тем не менее, для поддержки рабочей среды следует создать программное решение, которое прозрачно направляет клиентов, формирующих отчёты, к последнему моментальному снимку базы данных.

Разрешения

Любой пользователь, который может создать базу данных, может создать и моментальный снимок базы данных. Однако для создания моментального снимка зеркальной базы данных необходимо быть членом предопределенной роли сервера sysadmin .

Создание моментального снимка базы данных с помощью Transact-SQL

  1. На основании текущего размера базы данных-источника убедитесь, что на диске достаточно места для хранения снимка базы данных. При создании моментального снимка максимальный размер моментального снимка базы данных равен размеру базы данных-источника. Для получения дополнительной информации см. в разделе «Размер разреженного файла моментального снимка базы данных» (Transact-SQL).

  2. Выполните оператор CREATE DATABASE на файлах, используя AS SNAPSHOT OF выражение. Создание моментального снимка требует указания логического имени каждого файла базы данных-источника. Синтаксис выглядит следующим образом:

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

    Аргументы приведены следующим образом:

    Аргумент Описание
    database_snapshot_name Имя моментального снимка, на который требуется вернуть базу данных.
    logical_file_name Логическое имя, которое используется исходной базой данных в SQL Server при обращении к файлу.
    os_file_name Путь и имя файла, используемые операционной системой при создании файла.
    source_database_name Исходная база данных.

    Полное описание этого синтаксиса см. в статье CREATE DATABASE (SQL Server Transact-SQL).

    Примечание.

    При создании моментального снимка базы данных запрещено использование файлов журналов, автономных файлов, восстанавливаемых файлов и устаревших файлов в инструкции CREATE DATABASE.

Примеры

Расширение, используемое .ss в этих примерах, предназначено для удобства и не требуется. В базах данных, содержащих несколько файлов, все файлы должны быть указаны в соответствии с синтаксисом. Файловые группы не указаны.

А. Создайте моментальный снимок в базе данных AdventureWorks

В этом примере создается моментальный снимок базы данных на базе данных AdventureWorks. Имя моментального снимка AdventureWorks_dbss_1800, и имя его разряженного файла AdventureWorks_data_1800.ss, указывают время создания 6 вечера (1800 часов).

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. Сделайте моментальный снимок базы данных Sales

В этом примере создается снимок состояния базы данных sales_snapshot1200, на базе данных Sales, та же примерная база данных из примера Создание базы данных с файловыми группами в 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