Créer un instantané de base de données (Transact-SQL)

S'applique à : SQL Server

Pour créer un instantané de base de données SQL Server, vous devez impérativement utiliser Transact-SQL. SQL Server Management Studio ne prend pas en charge la création d’instantanés de base de données.

Prérequis

La base de données source, qui peut utiliser n'importe quel mode de récupération, doit respecter les conditions préalables suivantes :

  • L’instance de serveur doit exécuter une édition de SQL Server qui prend en charge l’instantané de base de données. Pour plus d’informations sur la prise en charge des captures instantanées de bases de données dans SQL Server, consultez Éditions et fonctionnalités prises en charge de SQL Server 2022.

  • La base de données source doit être en ligne, à moins que la base de données soit une base de données miroir au sein d'une session de mise en miroir de bases de données.

  • Pour créer une capture instantanée de base de données dans une base de données miroir, la base de données doit être à l’ état de mise en miroirsynchronisée.

  • La base de données source ne peut pas être configurée en tant que base de données partagée évolutive.

  • Avant SQL Server 2019 (15.x), la base de données source ne pouvait pas contenir de groupe de fichiers MEMORY_OPTIMIZED_DATA. La prise en charge des instantanés de base de données en mémoire a été ajoutée dans SQL Server 2019 (15.x).

Important

Pour plus d’informations sur d’autres considérations importantes, consultez Instantanés de base de données (SQL Server).

Recommandations

Cette section présente les recommandations suivantes :

Recommandation : Dénomination des instantanés de base de données

Avant de créer des instantanés, il est important de déterminer comment ils seront nommés. Chaque instantané de base de données nécessite un nom de base de données unique. Pour faciliter l'administration, le nom de l'instantané peut intégrer des informations identifiant la base de données, telles que :

  • Nom de la base de données source.

  • Une indication que le nouveau nom désigne un instantané.

  • La date et l'heure de création de l'instantané, un numéro de séquence ou d'autres informations pour distinguer les instantanés consécutifs sur une base de données spécifique.

Par exemple, envisageons une série d'instantanés de la base de données AdventureWorks2022 . Trois instantanés quotidiens sont créés à des intervalles de 6 heures, entre 6h00 et 18h00, sur la base d'une horloge de 24 heures. Chaque instantané quotidien est conservé pendant 24 heures avant d'être supprimé et remplacé par un nouvel instantané du même nom. Chaque instantané indique l'heure, mais non le jour :

AdventureWorks_snapshot_0600
AdventureWorks_snapshot_1200
AdventureWorks_snapshot_1800

Si l'heure de création de ces instantanés quotidiens varie selon les jours, une convention de dénomination moins précise peut être préférable, par exemple :

AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening

Recommandation : Limitation du nombre d'instantanés de base de données

La création d'une série d'instantanés dans le temps fournit des instantanés consécutifs de la base de données source. Chaque instantané est conservé jusqu'à ce qu'il soit explicitement supprimé. Chaque instantané continuant à grandir au fur et à mesure que les pages d'origine sont mises à jour, vous voudrez peut-être conserver de l'espace disque en supprimant un instantané plus ancien après en avoir créé un nouveau.

Remarque

Pour revenir à une capture instantanée de base de données, vous devez supprimer toutes les autres captures instantanées de cette base de données.

Recommandation : Connexions clientes à un instantané de base de données

Pour utiliser un instantané de base de données, les clients ont besoin de savoir où il se trouve. Les utilisateurs peuvent lire un instantané de base de données pendant qu'un autre instantané est créé ou supprimé. Cependant, lorsque vous substituez un nouvel instantané de base de données à un instantané existant, vous devez rediriger les clients vers le nouvel instantané. Les utilisateurs peuvent se connecter manuellement à une capture instantanée de base de données avec SQL Server Management Studio ou Azure Data Studio. Cependant, pour prendre en charge un environnement de production, vous devez créer une solution de programmation qui dirige de façon transparente les clients écrivant des rapports vers le dernier instantané de la base de données.

autorisations

Tout utilisateur ayant la possibilité de créer une base de données peut également créer un instantané de base de données. Toutefois, pour créer un instantané d’une base de données miroir, vous devez être membre du rôle serveur fixe sysadmin .

Pour créer une capture instantanée de base de données, avec :Transact-SQL

  1. En vous basant sur la taille actuelle de la base de données source, vérifiez que votre disque dispose de suffisamment d'espace pour en accueillir un instantané. La taille maximale d'un instantané est la taille de la base de données source au moment où l'instantané est créé. Pour plus d’informations, consultez Afficher la taille du fichier partiellement alloué d’un instantané de base de données (Transact-SQL).

  2. Émettez une instruction CREATE DATABASE sur les fichiers à l’aide de la clause AS SNAPSHOT OF. Pour créer un instantané, vous devez spécifier le nom logique de chaque fichier de la base de données source. La syntaxe est la suivante :

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

    Les définitions d’argument sont les suivantes :

    Argument Description
    database_snapshot_name Nom de l'instantané auquel vous souhaitez restaurer la base de données.
    logical_file_name Nom logique que la base de données source utilise pour référencer le fichier dans SQL Server.
    os_file_name Chemin d'accès et nom de fichier utilisés par le système d'exploitation lorsque vous créez le fichier.
    source_database_name Base de données source.

    Pour obtenir une description complète de cette syntaxe, consultez CREATE DATABASE (SQL Server Transact-SQL).

    Remarque

    Lorsque vous créez un instantané de base de données, les fichiers journaux, les fichiers hors connexion, les fichiers de restauration et les anciens fichiers ne sont pas autorisés dans l'instruction CREATE DATABASE.

Exemples

L’extension .ss utilisée dans ces exemples est destinée à des fins pratiques et n’est pas obligatoire. Dans les bases de données contenant plusieurs fichiers, tous les fichiers doivent être spécifiés, conformément à la syntaxe. Les groupes de fichiers ne sont pas spécifiés.

A. Création d'un instantané sur la base de données AdventureWorks

Cet exemple montre comment créer un instantané de base de données sur la base de données AdventureWorks . Le nom de l'instantané, AdventureWorks_dbss_1800, et le nom de son fichier partiellement alloué, AdventureWorks_data_1800.ss, précisent l'heure de création, 18h00.

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. Création d'un instantané sur la base de données Sales

Cet exemple crée un instantané de base de données, sales_snapshot1200, sur la base de données Sales, qui est le même exemple de base de données à partir de Créer une base de données qui contient des groupes de fichiers dans 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