Создание моментального снимка базы данных (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
    [;]
    

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

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