CREATE DATABASE (Transact-SQL)

Crée une nouvelle base de données ainsi que les fichiers utilisés pour stocker la base de données, crée une capture instantanée de base de données ou attache une base de données à partir des fichiers détachés d'une base de données créée antérieurement.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

CREATE DATABASE database_name 
    [ ON 
        [ PRIMARY ] [ <filespec> [ ,...n ] 
        [ , <filegroup> [ ,...n ] ] 
    [ LOG ON { <filespec> [ ,...n ] } ] 
    ] 
    [ COLLATE collation_name ]
    [ WITH <external_access_option> ]
]
[;]

To attach a database
CREATE DATABASE database_name 
    ON <filespec> [ ,...n ] 
    FOR { ATTACH [ WITH <service_broker_option> ]
        | ATTACH_REBUILD_LOG }
[;]

<filespec>::= 
{
(
    NAME =logical_file_name,
    FILENAME = { 'os_file_name' | 'filestream_path' } 
        [ , SIZE =size [ KB | MB | GB | TB ] ] 
        [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
        [ , FILEGROWTH =growth_increment [ KB | MB | GB | TB | % ] ]
) [ ,...n ]
}

<filegroup> ::= 
{
FILEGROUP filegroup_name [ CONTAINS FILESTREAM ] [ DEFAULT ]
    <filespec> [ ,...n ]
}

<external_access_option> ::=
{
  [ DB_CHAINING { ON | OFF } ]
  [ , TRUSTWORTHY { ON | OFF } ]
}
<service_broker_option> ::=
{
    ENABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
}

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

Arguments

  • database_name
    Nom de la nouvelle base de données. Les noms de base de données doivent être uniques au sein d'une instance de SQL Server et respecter les règles applicables aux identificateurs.

    database_name peut comporter 128 caractères maximum, à moins qu'aucun nom logique ne soit spécifié pour le fichier journal. Si aucun nom logique de fichier journal n'est spécifié, SQL Server génère logical_file_name et os_file_name pour le journal en ajoutant un suffixe à database_name. Cela limite la taille de database_name à 123 caractères de sorte que le nom logique du fichier généré ne comporte pas plus de 128 caractères.

    Si aucun nom de fichier de données n'est spécifié, SQL Server utilise database_name à la fois en tant que logical_file_name et en tant que os_file_name. Le chemin d'accès par défaut est obtenu à partir du Registre. Le chemin d'accès par défaut peut être modifié à l'aide de Propriétés du serveur (page Paramètres de base de données) dans Management Studio. La modification du chemin d'accès par défaut requiert le redémarrage de SQL Server.

  • ON
    Spécifie que les fichiers disque servant à stocker les parties données de la base de données (fichiers des données) sont définis de manière explicite. ON est nécessaire s'il est suivi d'une liste d'éléments <filespec> séparés par des virgules, définissant les fichiers de données du groupe de fichiers primaire. La liste des fichiers du groupe de fichiers primaire peut être suivie d'une liste facultative d'éléments <filegroup> séparés par des virgules, définissant les groupes de fichiers utilisateur et leurs fichiers.

  • PRIMARY
    Spécifie que la liste <filespec> associée définit le fichier primaire. Le premier fichier spécifié dans l'entrée <filespec> du groupe de fichiers primaire devient le fichier primaire. Une base de données ne peut posséder qu'un seul fichier primaire. Pour plus d'informations, consultez Architecture des fichiers et des groupes de fichiers.

    Si vous ne précisez pas PRIMARY, le premier fichier spécifié dans l'instruction CREATE DATABASE devient le fichier primaire.

  • LOG ON
    Spécifie que les fichiers disque servant à stocker le journal de la base de données (fichiers journaux) sont définis de manière explicite. LOG ON est suivi d'une liste d'éléments <filespec> séparés par des virgules, définissant les fichiers journaux. Si vous ne spécifiez pas LOG ON, un fichier journal est automatiquement créé, dont la taille correspond à 512 Ko, ou, si ce volume est plus élevé, à 25 pour cent de la somme des tailles de tous les fichiers de données de la base de données. LOG ON ne peut pas être spécifié sur une capture instantanée de base de données.

  • COLLATE collation_name
    Indique le classement par défaut de la base de données. Le nom du classement peut être un nom de classement Windows ou SQL. S'il n'est pas spécifié, la base de données est affectée au classement par défaut de l'instance SQL Server. Un nom de classement ne peut pas être spécifié sur une capture instantanée de base de données.

    Un nom de classement ne peut pas être spécifié pour les clauses FOR ATTACH ou FOR ATTACH_REBUILD_LOG. Pour plus d'informations sur la modification du classement d'une base de données attachée, visitez ce site Web de Microsoft.

    Pour plus d'informations sur les noms de classements Windows et SQL, consultez COLLATE (Transact-SQL).

  • FOR ATTACH
    Spécifie qu'une base de données est créée en joignant un ensemble existant de fichiers du système d'exploitation. Il doit exister une entrée <filespec> spécifiant le premier fichier primaire. Les seules autres entrées <filespec> nécessaires sont celles relatives aux fichiers dont le chemin d'accès est différent de celui existant lors de la première création de la base de données ou de son dernier attachement. Il faut spécifier une entrée <filespec> pour ces fichiers.

    FOR ATTACH exige les conditions suivantes :

    • Tous les fichiers de données (MDF et NDF) doivent être disponibles.

    • Si plusieurs fichiers journaux existent, tous doivent être disponibles.

    Si une base de données en lecture-écriture possède un seul fichier journal qui n'est pas disponible actuellement, et si la base de données a été fermée sans aucun utilisateur ou aucune transaction ouverte avant l'opération d'attachement, FOR ATTACH reconstruit automatiquement le fichier journal et met à jour le fichier primaire. Par contre, pour une base de données en lecture seule, le fichier journal ne peut pas être reconstruit car le fichier primaire ne peut pas être mis à jour. Par conséquent, lorsque vous attachez une base de données en lecture seule dont le fichier journal n'est pas disponible, vous devez fournir les fichiers journaux ou fichiers pour la cause FOR ATTACH.

    [!REMARQUE]

    Une base de données créée dans une version plus récente de SQL Server ne peut pas être attachée à des versions antérieures. La version de la base de données source doit être au moins la version 80 (SQL Server 2000) pour être attachée sur SQL Server 2008. Les bases de données SQL Server 2000 ou SQL Server 2005 dont le niveau de compatibilité est inférieur à 80 seront définies avec la compatibilité 80 lorsqu'elles seront attachées.

    Dans SQL Server, tous les fichiers de texte intégral appartenant à la base de données qui est attachée seront attachés avec la base de données. Pour spécifier un nouveau chemin d'accès pour le catalogue de texte intégral, spécifiez le nouvel emplacement sans le nom de fichier du système d'exploitation en texte intégral. Pour plus d'informations, consultez la section Exemples.

    FOR ATTACH ne peut pas être spécifié sur une capture instantanée de base de données.

    Remarque relative à la sécuritéRemarque relative à la sécurité

    Nous vous recommandons de ne pas attacher des bases de données issues de sources inconnues ou non approuvées. Ces bases de données peuvent contenir du code malveillant susceptible d'exécuter du code Transact-SQL indésirable ou de provoquer des erreurs en modifiant le schéma ou la structure physique des bases de données. Avant d'utiliser une base de données provenant d'une source inconnue ou non approuvée, exécutez DBCC CHECKDB sur la base de données sur un serveur qui n'est pas un serveur de production et examinez le code (par exemple les procédures stockées ou le code défini par l'utilisateur) dans la base de données.

    Pour plus d'informations sur l'attachement et le détachement de base de données, consultez Attachement et détachement des bases de données.

    [!REMARQUE]

    Si la base de données utilise Service Broker, consultez également <service_broker_option>.

    Pour plus d'informations sur les autorisations de fichier définies lors du détachement et de l'attachement d'une base de données, consultez Sécurisation des fichiers de données et des fichiers journaux.

    Lorsque vous attachez une base de données répliquée qui a été copiée plutôt que détachée, prenez en compte les éléments suivants :

    • Si vous attachez la base de données à la même version et à la même instance de serveur que celles de la base de données d'origine, aucune opération supplémentaire n'est nécessaire.

    • Si vous attachez la base de données à la même instance de serveur alors que sa version a été mise à niveau, vous devez exécuter sp_vupgrade_replication pour mettre à jour la réplication à la fin de l'opération de rattachement.

    • Si vous l'attachez à une autre instance de serveur, quelle que soit la version, vous devez exécuter sp_removedbreplication pour supprimer la réplication, une fois l'opération d'attachement terminée.

    [!REMARQUE]

    L'attachement fonctionne avec le format de stockage vardecimal, mais le Moteur de base de données SQL Server doit être mis à niveau au minimum vers SQL Server 2005 Service Pack 2. Vous ne pouvez pas attacher une base de données à l'aide du format de stockage vardecimal à une version antérieure de SQL Server. Pour plus d'informations sur le format de stockage vardecimal, consultez Stockage des données décimales sous forme de colonne de longueur variable.

    Pour plus d'informations sur la façon de mettre à niveau une base de données par attachement, consultez Procédure : mise à niveau d'une base de données avec Detach et Attach (Transact-SQL).

  • FOR ATTACH_REBUILD_LOG
    Spécifie qu'une base de données est créée en joignant un ensemble existant de fichiers du système d'exploitation. Cette option est limitée aux bases de données en lecture/écriture. Si un ou plusieurs fichiers du journal des transactions sont manquants, le fichier journal est reconstruit. Il doit exister une entrée <filespec> spécifiant le premier fichier primaire.

    [!REMARQUE]

    Si les fichiers journaux sont disponibles, le moteur de base de données utilisera ces fichiers au lieu de reconstruire les fichiers journaux.

    FOR ATTACH_REBUILD_LOG exige les points suivants :

    • Un arrêt propre de la base de données.

    • Tous les fichiers de données (MDF et NDF) doivent être disponibles.

    Important

    Cette opération brise la chaîne de sauvegarde du journal. Nous recommandons d'effectuer une sauvegarde complète avant de réaliser cette opération. Pour plus d'informations, consultez BACKUP (Transact-SQL).

    Généralement, FOR ATTACH_REBUILD_LOG est utilisé lorsque vous copiez une base de données en lecture/écriture avec un grand journal vers un autre serveur où la copie sera principalement, ou uniquement, utilisée pour des opérations de lecture, et nécessitera donc moins d'espace de journal que la base de données d'origine.

    FOR ATTACH_REBUILD_LOG ne peut pas être spécifié sur une capture instantanée de base de données.

    Pour plus d'informations sur l'attachement et le détachement de base de données, consultez Attachement et détachement des bases de données.

  • <filespec>
    Contrôle les propriétés des fichiers.

  • NAME logical_file_name
    Spécifie le nom logique du fichier. NAME est requis lorsque FILENAME est spécifié, sauf lors de la spécification d'une des clauses FOR ATTACH. Un groupe de fichiers FILESTREAM ne peut pas être nommé PRIMARY.

    • logical_file_name
      Nom logique utilisé dans SQL Server dans les références au fichier. Logical_file_name doit être unique dans la base de données et se conformer aux règles relatives aux identificateurs. Le nom peut être une constante de type caractère ou Unicode, un identificateur régulier ou un identificateur délimité.
  • FILENAME { 'os_file_name' | 'filestream_path' }
    Spécifie un nom de fichier du système d'exploitation (physique).

    • 'os_file_name'
      Chemin d'accès et nom de fichier utilisé par le système d'exploitation lorsque vous créez le fichier. La valeur doit résider sur l'un des périphériques suivants : le serveur local sur lequel SQL Server est installé, un SAN (Storage Area Network) ou un réseau basé sur iSCSI. Le chemin d'accès spécifié doit exister avant l'exécution de l'instruction CREATE DATABASE. Pour plus d'informations, consultez le paragraphe « Groupes de fichiers et fichiers de base de données » dans la section Remarques.

      Les paramètres SIZE, MAXSIZE et FILEGROWTH ne peuvent pas être définis lorsqu'un chemin UNC est spécifié pour le fichier.

      Si le fichier se trouve sur une partition brute, os_file_name doit spécifier uniquement la lettre de lecteur correspondant à une partition brute existante. Un seul fichier de données peut être créé sur chaque partition brute.

      Les fichiers de données ne doivent pas être placés sur des systèmes de fichiers compressés, sauf si les fichiers sont des fichiers secondaires en lecture seule ou si la base de données est en en lecture seule. Les fichiers journaux ne doivent jamais être placés sur des systèmes de fichiers compressés. Pour plus d'informations, consultez La compression et les groupes de fichiers en lecture seule.

    • 'filestream_path'
      Pour un groupe de fichiers FILESTREAM, FILENAME fait référence à un chemin d'accès où les données FILESTREAM seront stockées. Le chemin d'accès jusqu'au dernier dossier doit exister, et le dernier dossier ne doit pas exister. Par exemple, si vous spécifiez le chemin d'accès C:\MyFiles\MyFilestreamData, C:\MyFiles doit exister avant l'exécution de ALTER DATABASE, mais le dossier MyFilestreamData ne doit pas exister.

      Le groupe de fichiers et le fichier (<filespec>) doivent être créés dans la même instruction. Il ne peut exister qu'un seul fichier, <filespec>, pour un groupe de fichiers FILESTREAM.

      Les propriétés SIZE, MAXSIZE et FILEGROWTH ne s'appliquent pas à un groupe de fichiers FILESTREAM.

  • SIZE size
    Précise la taille du fichier.

    SIZE ne peut pas être spécifié lorsque os_file_name est spécifié en tant que chemin UNC. SIZE ne s'applique pas à un groupe de fichiers FILESTREAM.

    • size
      Taille initiale du fichier.

      Lorsque vous ne précisez pas le paramètre size pour le fichier primaire, le moteur de base de données utilise la taille du fichier primaire de la base de données model. Lorsqu'un fichier journal ou fichier de données secondaire est spécifié mais que size n'est pas spécifié pour ce fichier, le moteur de base de données lui donne une taille de 1 Mo. La taille spécifiée pour le fichier primaire doit être au moins égale à la taille du fichier primaire de la base de données model.

      Les suffixes kilo-octet (KB), mégaoctet (MB), gigaoctet (GB) ou téraoctet (TB) peuvent être utilisés. La valeur par défaut est Mo. Spécifiez un nombre entier sans aucune décimale. Size est une valeur entière. Pour les valeurs supérieures à 2147483647, utilisez des unités plus grandes.

  • MAXSIZE max_size
    Spécifie la taille maximale que peut atteindre le fichier. MAWSIZE ne peut pas être spécifié lorsque os_file_name est spécifié en tant que chemin UNC. MAXSIZE ne s'applique pas à un groupe de fichiers FILESTREAM.

    • max_size
      Taille maximale du fichier. Les suffixes KB, MB, GB et TB peuvent être utilisés. La valeur par défaut est Mo. Précisez un nombre entier sans aucune décimale. Si vous ne spécifiez pas max_size, le fichier peut s'accroître jusqu'à occuper tout l'espace disque disponible. Max_size est une valeur entière. Pour les valeurs supérieures à 2147483647, utilisez des unités plus grandes.
  • UNLIMITED
    Précise que la taille du fichier peut croître jusqu'à ce que le disque soit saturé. Dans SQL Server, un fichier journal spécifié avec une croissance illimitée a une taille maximale de 2 To et un fichier de données une taille maximale de 16 To.

  • FILEGROWTH growth_increment
    Spécifie l'incrément de croissance automatique du fichier. Le paramètre FILEGROWTH d'un fichier ne peut dépasser le paramètre MAXSIZE. FILEGROWTH ne peut pas être spécifié lorsque os_file_name est spécifié en tant que chemin UNC. FILEGROWTH ne s'applique pas à un groupe de fichiers FILESTREAM.

    • growth_increment
      Quantité d'espace ajoutée au fichier chaque fois qu'un espace supplémentaire s'avère nécessaire.

      La valeur peut être exprimée en Mo, Ko, Go, To ou pourcentage (%). Si un nombre est mentionné sans préciser Mo, Ko ou %, la valeur par défaut est Mo. Lorsque % est spécifié, la taille de l'incrément de croissance est le pourcentage choisi de la taille du fichier au moment où l'incrémentation a lieu. La taille spécifiée est arrondie à la valeur multiple de 64 Ko la plus proche.

      La valeur 0 indique que la croissance automatique est désactivée et qu'aucun espace supplémentaire n'est autorisé.

      Si vous ne précisez pas FILEGROWTH, la valeur par défaut est de 1 Mo pour les fichiers de données et de 10 % pour les fichiers journaux et la valeur minimale est de 64 Ko.

      [!REMARQUE]

      Dans SQL Server, l'incrément de croissance par défaut pour les fichiers de données est passé de 10 % à 1 Mo. La valeur par défaut de 10 % pour le fichier journal reste inchangée.

  • <filegroup>
    Contrôle les propriétés des groupes de fichiers. Filegroup ne peut pas être spécifié sur une capture instantanée de base de données.

  • FILEGROUP filegroup_name
    Nom logique du groupe de fichiers.

    • filegroup_name
      filegroup_name doit être unique dans la base de données et ne peut pas être les noms PRIMARY et PRIMARY_LOG fournis par le système. Le nom peut être une constante de type caractère ou Unicode, un identificateur régulier ou un identificateur délimité. Le nom doit respecter les règles applicables aux identificateurs.

    • CONTAINS FILESTREAM
      Spécifie que le groupe de fichiers stocke des objets BLOB (binary large objects) FILESTREAM dans le système de fichiers.

    • DEFAULT
      Spécifie le groupe de fichiers nommé qui est le groupe de fichiers par défaut de la base de données.

  • <external_access_option>
    Contrôler l'accès externe à partir de et vers la base de données.

    • DB_CHAINING { ON | OFF }
      Lorsque ON est spécifié, la base de données peut être la source ou la cible d'une chaîne de propriétés de bases de données croisées.

      Lorsque OFF est spécifié, la base de données ne peut pas participer à la chaîne de propriétés de bases de données croisées. La valeur par défaut est OFF.

      Important

      L'instance de SQL Server reconnaît ce paramètre lorsque l'option du serveur cross db ownership chaining est 0 (OFF). Lorsque cross db ownership chaining a la valeur 1 (ON), toutes les bases de données utilisateur peuvent participer aux chaînes de propriétés des bases de données croisées, quelle que soit la valeur de cette option. Cette option est configurée à l'aide de sp_configure.

      Pour définir cette option, l'appartenance au rôle serveur fixe sysadmin est nécessaire. L'option DB_CHAINING ne peut pas être définie sur ces bases de données système : master, model, tempdb.

      Pour plus d'informations, consultez Chaînes de propriétés.

    • TRUSTWORTHY { ON | OFF }
      Lorsque ON est spécifié, les modules de base de données (par exemples les vues, les fonctions définies par l'utilisateur ou les procédures stockées) utilisant le contexte d'emprunt d'identité peuvent accéder à des ressources en dehors de la base de données.

      Lorsque OFF est spécifié, les modules de base de données dans le contexte d'emprunt d'identité ne peuvent pas accéder à des ressources en dehors de la base de données. La valeur par défaut est OFF.

      TRUSTWORTHY prend la valeur OFF chaque fois que la base de données est attachée.

      Par défaut, pour toutes les bases de données système, sauf pour la base msdb, l'option TRUSTWORTHY est définie à OFF (désactivé). La valeur ne peut pas être modifiée pour les bases de données model et tempdb. Nous vous recommandons de ne jamais affecter la valeur ON (activé) à l'option TRUSTWORTHY pour la base de données master.

      Pour définir cette option, l'appartenance au rôle serveur fixe sysadmin est nécessaire.

  • <service_broker_option>
    Contrôle les options Service Broker de la base de données.

    Les options Service Broker ne peuvent être spécifiées que lorsque la clause FOR ATTACH est utilisée.

    • ENABLE_BROKER
      Spécifie que Service Broker est activé pour la base de données spécifiée. Autrement dit, is_broker_enabled a la valeur True dans l'affichage catalogue sys.databases et la remise des messages est démarrée.

    • NEW_BROKER
      Crée une nouvelle valeur service_broker_guid dans sys.databases et la base de données restaurée, et termine tous les points de terminaison de conversation par un nettoyage. Service Broker est activé, mais aucun message n'est envoyé aux points de terminaison de conversation distants.

    • ERROR_BROKER_CONVERSATIONS
      Termine toutes les conversations avec une erreur indiquant que la base de données est attachée ou restaurée. Service Broker est désactivé jusqu'à la fin de l'opération, puis il est activé.

  • database_snapshot_name
    Nom de la nouvelle capture instantanée de base de données. Les noms de capture instantanée de base de données doivent être uniques au sein d'une instance de SQL Server et respecter les règles applicables aux identificateurs. database_snapshot_name ne doit pas dépasser 128 caractères.

  • ON ( NAME =logical_file_name, FILENAME ='os_file_name') [ ,... n ]
    Pour créer une capture instantanée de base de données, spécifie une liste de fichiers dans la base de données source. Pour que la capture instantanée fonctionne, tous les fichiers de données doivent être spécifiés individuellement. Cependant, les fichiers journaux ne sont pas autorisés pour les captures instantanées de base de données.

    Pour des descriptions de NAME et FILENAME et leurs valeurs, consultez les descriptions des valeurs <filespec> équivalentes.

    [!REMARQUE]

    Lorsque vous créez une capture instantanée de base de données, les autres options <filespec> et le mot clé PRIMARY ne sont pas autorisés.

  • AS SNAPSHOT OF source_database_name
    Spécifie que la base de données créée est une capture instantanée de la base de données source spécifiée par source_database_name. Les bases de données de capture instantanée et source doivent se trouver sur la même instance.

    Pour plus d'informations, consultez le paragraphe « Captures instantanées de base de données » dans la section Remarques.

Notes

La base de données master doit être sauvegardée chaque fois qu'une base de données utilisateur est créée, modifiée ou supprimée.

L'instruction CREATE DATABASE doit être exécutée en mode de validation automatique (mode de gestion des transactions par défaut) et n'est pas autorisée dans une transaction explicite ou implicite. Pour plus d'informations, consultez Transactions en mode autocommit.

Vous pouvez utiliser une instruction CREATE DATABASE pour créer une base de données et les fichiers qui stockent cette base de données. SQL Server implémente l'instruction CREATE DATABASE en procédant comme suit :

  1. SQL Server utilise une copie de la base de données model pour initialiser la base de données et ses métadonnées.

  2. Un GUID Service Broker est affecté à la base de données.

  3. Le moteur de base de données complète ensuite le reste de la base de données avec des pages vides, à l'exception des pages qui contiennent des données internes enregistrant la manière dont est utilisé l'espace dans la base de données. Pour plus d'informations, consultez Initialisation des fichiers de base de données.

Vous pouvez spécifier un maximum de 32 767 bases de données sur une instance de SQL Server.

Chaque base de données appartient à un propriétaire qui peut réaliser des activités spéciales dans la base de données. Le propriétaire est l'utilisateur qui crée la base de données. Le propriétaire de base de données peut être changé à l'aide de sp_changedbowner.

Groupes de fichiers et fichiers de base de données

Chaque base de données comprend au moins deux fichiers, un fichier primaire et un fichier journal des transactions, et au moins un groupe de fichiers. Un maximum de 32 767 fichiers et 32 767 groupes de fichiers peut être spécifié pour chaque base de données. Pour plus d'informations, consultez Architecture des fichiers et des groupes de fichiers.

Lorsque vous créez une base de données, attribuez aux fichiers une taille aussi grande que possible, en tenant compte du volume maximal de données qu'est censée contenir la base de données. Pour plus d'informations, consultez Utilisation des fichiers et groupes de fichiers pour gérer la croissance de la base de données.

Nous vous recommandons d'utiliser un réseau de stockage (SAN), un réseau basé sur iSCSI ou un disque attaché localement pour le stockage de vos fichiers de base de données SQL Server, car cette configuration optimise les performances et la fiabilité de SQL Server. Par défaut, l'utilisation de fichiers de base de données (stockés sur un serveur en réseau ou un stockage attaché au réseau) n'est pas activée pour SQL Server. Cependant, vous pouvez créer une base de données possédant des fichiers de base de données basés sur le réseau en utilisant l'indicateur de trace 1807. Pour plus d'informations sur cet indicateur de trace et des considérations de performance et de maintenance importantes, consultez ce site Web de Microsoft.

Captures instantanées de base de données

Vous pouvez utiliser l'instruction CREATE DATABASE pour créer une vue statique en lecture seule, une capture instantanée de base de données d'une base de données existante, la base de données source. Chaque capture instantanée de base de données est transactionnellement cohérente avec la base de données source existante au moment de la création de la capture. Une base de données source peut posséder plusieurs captures instantanées.

[!REMARQUE]

Lorsque vous créez une capture instantanée de base de données, l'instruction CREATE DATABASE ne peut pas faire référence à des fichiers journaux, hors connexion, de restauration ou anciens.

Si la création d'une capture instantanée de base de données échoue, la capture instantanée devient suspecte et doit être supprimée. Pour plus d'informations, consultez DROP DATABASE (Transact-SQL).

Chaque capture instantanée est conservée jusqu'à ce qu'elle soit supprimée par DROP DATABASE.

Pour plus d'informations, consultez Captures instantanées de base de données.

Options de base de données

Plusieurs options de base de données sont définies automatiquement chaque fois que vous créez une base de données. Pour connaître la liste de ces options et leurs valeurs par défaut, consultez Définition des options de base de données. Ces options peuvent être modifiées à l'aide de l'instruction ALTER DATABASE.

Base de données model et création de nouvelles bases de données

Les objets définis par l'utilisateur dans la base de données model sont copiés dans toutes les nouvelles bases de données. Vous pouvez ajouter dans la base de données model tous les objets, tels que tables, vues, procédures stockées ou types de données, à inclure dans toutes les bases de données nouvellement créées.

Lorsqu'une instruction database_name de CREATE DATABASE est spécifiée sans paramètre de taille supplémentaire, le fichier de données primaire a la même taille que celui de la base de données model.

Sauf si FOR ATTACH est spécifié, chaque nouvelle base de données hérite des paramètres d'option de base de données de la base de données model. Par exemple, l'option de base de données auto shrink a la valeur true dans model et dans toutes les nouvelles bases de données que vous créez. Si vous modifiez les options de la base de données model, ces nouveaux paramètres d'options sont valables pour toutes les nouvelles bases de données que vous créez. Les opérations de modification dans la base de données model n'affectent pas les bases de données existantes. Si vous avez précisé FOR ATTACH dans l'instruction CREATE DATABASE, la nouvelle base de données hérite des paramètres d'option de la base de données d'origine.

Affichage des informations de bases de données

Vous pouvez utiliser les affichages catalogue, les fonctions système et les procédures stockées du système pour retourner des informations sur les bases de données, les fichiers et les groupes de fichiers. Pour plus d'informations, consultez Affichage des métadonnées de la base de données.

Autorisations

L'autorisation CREATE DATABASE, CREATE ANY DATABASE ou ALTER ANY DATABASE est obligatoire.

Pour garder le contrôle de l'utilisation du disque sur une instance de SQL Server, l'autorisation de création de bases de données est généralement limitée à quelques comptes de connexion.

Autorisations sur les données et les journaux

Dans SQL Server, certaines autorisations sont définies sur les données et les fichiers journaux de chaque base de données. Les autorisations suivantes sont définies chaque fois que les opérations suivantes sont appliquées à une base de données :

Créée

Modifiée pour ajouter un nouveau fichier

Attachée

Sauvegardée

Détachée

Restaurée

Les autorisations empêchent les fichiers d'être accidentellement falsifiés s'ils résident dans un répertoire doté d'autorisations d'ouverture. Pour plus d'informations, consultez Sécurisation des fichiers de données et des fichiers journaux.

[!REMARQUE]

MicrosoftSQL Server 2005 Express Edition ne définit pas d'autorisations sur les données et les fichiers journaux.

Exemples

A. Création d'une base de données sans spécifier de fichiers

Cet exemple crée une base de données appelée mytest et crée un fichier primaire et un fichier de journal des transactions correspondants. L'instruction ne disposant pas d'éléments <filespec>, le fichier de base de données primaire a la taille du fichier primaire de base de données model. Le journal des transactions a pour taille définie la plus grande de ces deux valeurs : 512 Ko ou 25 % de la taille du fichier de données primaire. Puisque MAXSIZE n'est pas spécifié, la taille des fichiers peut s'accroître jusqu'à occuper tout l'espace disque disponible. Cet exemple montre également comment supprimer la base de données nommée mytest, si elle existe, avant de créer la base de données mytest.

USE master;
GO
CREATE DATABASE mytest;
GO
-- Verify the database files and sizes
SELECT name, size, size*1.0/128 AS [Size in MBs] 
FROM sys.master_files
WHERE name = N'mytest';
GO

B. Création d'une base de données qui spécifie les fichiers de données et les fichiers journaux de transactions

L'exemple suivant crée la base de données Sales. Le mot clé PRIMARY n'étant pas utilisé, le premier fichier (Sales_dat) devient le fichier primaire. Le paramètre SIZE n'étant spécifié ni en Mo ni en Ko pour le fichier Sales_dat, la valeur par défaut est Mo et il est alloué en mégaoctets. Le fichier Sales_log est alloué en mégaoctets car le suffixe MB est défini explicitement dans le paramètre SIZE.

USE master;
GO
CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
GO

C. Création d'une base de données en spécifiant plusieurs fichiers de données et plusieurs fichiers du journal des transactions

L'exemple suivant crée une base de données appelée Archive qui comprend trois fichiers de données de 100-MB et deux fichiers journaux de transactions de 100-MB. Le fichier primaire est le premier fichier dans la liste et il est spécifié de manière explicite à l'aide du mot clé PRIMARY. Les fichiers journaux de transactions sont spécifiés à la suite des mots clés LOG ON. Notez les extensions utilisées pour les fichiers dans l'option FILENAME : .mdf pour les fichiers de données primaires, .ndf pour les fichiers de données secondaires et .ldf pour les fichiers journaux de transactions. Cet exemple place la base de données sur le lecteur D plutôt qu'avec la base de données master.

USE master;
GO
CREATE DATABASE Archive 
ON
PRIMARY  
    (NAME = Arch1,
    FILENAME = 'D:\SalesData\archdat1.mdf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch2,
    FILENAME = 'D:\SalesData\archdat2.ndf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch3,
    FILENAME = 'D:\SalesData\archdat3.ndf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)
LOG ON 
   (NAME = Archlog1,
    FILENAME = 'D:\SalesData\archlog1.ldf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
   (NAME = Archlog2,
    FILENAME = 'D:\SalesData\archlog2.ldf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20) ;
GO

D. Création d'une base de données possédant des groupes de fichiers

L'exemple suivant crée la base de données Sales qui possède les groupes de fichiers suivants :

  • Le groupe de fichiers primaire avec les fichiers Spri1_dat et Spri2_dat. Les incréments FILEGROWTH de ces fichiers sont spécifiés à 15%.

  • Un groupe de fichiers nommé SalesGroup1 avec les fichiers SGrp1Fi1 et SGrp1Fi2.

  • Un groupe de fichiers nommé SalesGroup2 avec les fichiers SGrp2Fi1 et SGrp2Fi2.

Cet exemple place les fichiers de données et les fichiers journaux sur des disques différents afin d'améliorer les performances.

USE master;
GO
CREATE DATABASE Sales
ON PRIMARY
( NAME = SPri1_dat,
    FILENAME = 'D:\SalesData\SPri1dat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
( NAME = SPri2_dat,
    FILENAME = 'D:\SalesData\SPri2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
    FILENAME = 'D:\SalesData\SG1Fi1dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
    FILENAME = 'D:\SalesData\SG1Fi2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
    FILENAME = 'D:\SalesData\SG2Fi1dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
    FILENAME = 'D:\SalesData\SG2Fi2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = 'E:\SalesLog\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
GO

E. Attachement d'une base de données

L'exemple ci-dessous détache la base de données Archive créée dans l'exemple D, puis l'attache à l'aide de la clause FOR ATTACH. Archive a été défini de manière à posséder plusieurs fichiers de données et fichiers journaux. Cependant, l'emplacement des fichiers n'ayant pas été modifié depuis leur création, seuls les fichiers primaires doivent être spécifiés dans la clause FOR ATTACH. À compter de SQL Server 2005, tout fichier de texte intégral appartenant à la base de données qui est attachée est attaché avec la base de données.

USE master;
GO
sp_detach_db Archive;
GO
CREATE DATABASE Archive
      ON (FILENAME = 'D:\SalesData\archdat1.mdf') 
      FOR ATTACH ;
GO

F. Création d'une capture instantanée de base de données

L'exemple suivant crée la capture instantanée de base de données sales_snapshot0600. Une capture instantanée de base de données étant en lecture seule, un fichier journal ne peut pas être spécifié. Conformément à la syntaxe, chaque fichier de la base de données source est spécifié et les groupes de fichiers ne sont pas spécifiés.

Dans cet exemple, la base de données source est la base de données Sales créée dans l'exemple D.

USE master;
GO
CREATE DATABASE sales_snapshot0600 ON
    ( NAME = SPri1_dat, FILENAME = 'D:\SalesData\SPri1dat_0600.ss'),
    ( NAME = SPri2_dat, FILENAME = 'D:\SalesData\SPri2dt_0600.ss'),
    ( NAME = SGrp1Fi1_dat, FILENAME = 'D:\SalesData\SG1Fi1dt_0600.ss'),
    ( NAME = SGrp1Fi2_dat, FILENAME = 'D:\SalesData\SG1Fi2dt_0600.ss'),
    ( NAME = SGrp2Fi1_dat, FILENAME = 'D:\SalesData\SG2Fi1dt_0600.ss'),
    ( NAME = SGrp2Fi2_dat, FILENAME = 'D:\SalesData\SG2Fi2dt_0600.ss')
AS SNAPSHOT OF Sales ;
GO

G. Création d'une base de données et spécification d'un nom de classement et d'options

L'exemple suivant crée la base de données MyOptionsTest. Un nom de classement est spécifié et les options TRUSTYWORTHY et DB_CHAINING ont la valeur ON.

USE master;
GO
IF DB_ID (N'MyOptionsTest') IS NOT NULL
DROP DATABASE MyOptionsTest;
GO
CREATE DATABASE MyOptionsTest
COLLATE French_CI_AI
WITH TRUSTWORTHY ON, DB_CHAINING ON;
GO
--Verifying collation and option settings.
SELECT name, collation_name, is_trustworthy_on, is_db_chaining_on
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO

H. Attachement d'un catalogue de texte intégral qui a été déplacé

L'exemple suivant attache le catalogue de texte intégral AdvWksFtCat ainsi que les fichiers de données et fichiers journaux de AdventureWorks. Dans cet exemple, le catalogue de texte intégral est déplacé de son emplacement par défaut vers un nouvel emplacement c:\myFTCatalogs. Les fichiers de données et les fichiers journaux restent dans leurs emplacements par défaut.

USE master;
GO
--Detach the AdventureWorks database
sp_detach_db AdventureWorks;
GO
-- Physically move the full text catalog to the new location.
--Attach the AdventureWorks database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks ON 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf'), 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_log.ldf'),
    (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
FOR ATTACH;
GO

I. Création d'une base de données qui spécifie un groupe de fichiers de ligne et deux groupes de fichiers FILESTREAM

L'exemple ci-dessous crée la base de données FileStreamDB. La base de données est créée avec un groupe de fichiers de ligne et deux groupes de fichiers FILESTREAM. Chaque groupe de fichiers contient un fichier :

  • FileStreamDB_data contient des données de ligne. Il contient un seul fichier, FileStreamDB_data.mdf avec le chemin d'accès par défaut.

  • FileStreamPhotos contient des données FILESTREAM. Il contient un seul conteneur de données FILESTREAM, FSPhotos, qui se trouve dans C:\MyFSfolder\Photos. Il est marqué comme groupe de fichiers FILESTREAM par défaut.

  • FileStreamResumes contient des données FILESTREAM. Il contient un seul conteneur de données FILESTREAM, FSResumes, qui se trouve dans C:\MyFSfolder\Resumes.

USE master;
GO
IF DB_ID (N'FileStreamDB') IS NOT NULL
DROP DATABASE FileStreamDB;
GO
-- Get the SQL Server data path.
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

 -- Execute the CREATE DATABASE statement. 
EXECUTE ('CREATE DATABASE FileStreamDB
ON PRIMARY 
    (
    NAME = FileStreamDB_data 
    ,FILENAME = ''' + @data_path + 'FileStreamDB_data.mdf''
    ,SIZE = 10MB
    ,MAXSIZE = 50MB
    ,FILEGROWTH = 15%
    ),
FILEGROUP FileStreamPhotos CONTAINS FILESTREAM DEFAULT
    (
    NAME = FSPhotos
    ,FILENAME = ''C:\MyFSfolder\Photos''
-- SIZE, MAXSIZE, FILEGROWTH should not be specified here.
-- If they are specified an error will be raised.
    ),
FILEGROUP FileStreamResumes CONTAINS FILESTREAM
    (
    NAME = FileStreamResumes
    ,FILENAME = ''C:\MyFSfolder\Resumes''
    ) 
LOG ON
    (
    NAME = FileStream_log
    ,FILENAME = ''' + @data_path + 'FileStreamDB_log.ldf''
    ,SIZE = 5MB
    ,MAXSIZE = 25MB
    ,FILEGROWTH = 5MB
    )'
);
GO