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

S’applique à :SQL Server

La seule façon de créer une base de données SQL Server instantané consiste à utiliser Transact-SQL. SQL Server Management Studio ne prend pas en charge la création de instantané 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 les instantané de base de données. Pour plus d’informations sur la prise en charge des instantané de base 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 n’a pas pu contenir de MEMORY_OPTIMIZED_DATA groupe de fichiers. La prise en charge des instantané 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 Captures instantanées de base de données (SQL Server).

Recommandations

Cette section présente les recommandations suivantes :

Bonne pratique : nommer des instantané de base de données

Avant de créer des instantané, il est important de déterminer comment les nommer. 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é quotidiennes sont créées à intervalles de 6 heures entre 6 H et 18 h, selon 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 nom instantané indique l’heure, mais pas 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

Bonne pratique : limiter le nombre de instantané 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é persiste jusqu’à ce qu’elle soit explicitement supprimée. 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.

Bonne pratique : connexions clientes à une base de données instantané

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 base de données instantané 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 .

Créer une base de données instantané à l’aide de 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 CREATE DATABASE instruction sur les fichiers à l’aide de la AS SNAPSHOT OF clause. 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 arguments sont les suivants :

    Argument Description
    database_snapshot_name Nom du instantané auquel vous souhaitez rétablir la base de données.
    logical_file_name Nom logique de la base de données source utilisée dans SQL Server lors du référencement du fichier.
    os_file_name Chemin d’accès et nom de fichier utilisé 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 une base de données instantané, les fichiers journaux, les fichiers hors connexion, la restauration des fichiers et les fichiers obsolètes ne sont pas autorisés dans l’instructionCREATE DATABASE.

Exemples

L’extension .ss utilisée dans ces exemples est pratique et n’est pas nécessaire. 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éer 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 instantané nom, AdventureWorks_dbss_1800et le nom de fichier de son fichier partiellement alloué, AdventureWorks_data_1800.ssindiquent l’heure de création de 6 heures (1800 heures).

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éer un instantané sur la base de données Sales

Cet exemple crée une base de données instantané, sales_snapshot1200sur la Sales base de données, qui est le même exemple de base de données à partir de Créer une base de données contenant 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