CREATE DATABASE (Transact-SQL)

Crea una nueva base de datos y los archivos que se utilizan para almacenar la base de datos, crea una instantánea de base de datos, o adjunta una base de datos a partir de los archivos separados de una base de datos creada anteriormente.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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
[;]

Argumentos

  • database_name
    Es el nombre de la nueva base de datos. Los nombres de base de datos deben ser únicos en una instancia de SQL Server y cumplir las reglas de los identificadores.

    database_name puede tener 128 caracteres como máximo, a menos que no se especifique un nombre lógico para el archivo de registro. Si no se especifica un nombre de archivo de registro lógico, SQL Server genera logical_file_name y os_file_name para el registro, anexando un sufijo a database_name. Esto limita database_name a 123 caracteres, por lo que el nombre de archivo lógico generado tiene como máximo 128 caracteres.

    Si no se especifica un nombre de archivo de datos, SQL Server utiliza database_name como logical_file_name y os_file_name. La ruta de acceso predeterminada se obtiene del Registro. La ruta de acceso predeterminada se puede cambiar utilizando Propiedades del servidor (página Configuración de base de datos) en Management Studio. Para cambiar la ruta de acceso predeterminada es necesario reiniciar SQL Server.

  • ON
    Especifica que los archivos de disco utilizados para almacenar las secciones de datos de la base de datos (archivos de datos) se definen explícitamente. ON es obligatorio cuando va seguido de una lista de elementos <filespec> separados por comas que definen los archivos de datos del grupo de archivos principal. Detrás de la lista de archivos del grupo de archivos principal se puede colocar una lista opcional de elementos <filegroup> separados por comas que definan los grupos de archivos de usuario y sus archivos.

  • PRIMARY
    Especifica que la lista de elementos <filespec> asociada define el archivo principal. El primer archivo especificado en la entrada <filespec> del grupo de archivos principal se convierte en el archivo principal. Una base de datos sólo puede tener un archivo principal. Para obtener más información, vea Arquitectura de archivos y grupos de archivos.

    Si no se especifica PRIMARY, el primer archivo enumerado en la instrucción CREATE DATABASE se convierte en el archivo principal.

  • LOG ON
    Especifica que los archivos de disco utilizados para almacenar el registro de la base de datos (archivos de registro) se definen explícitamente. LOG ON va seguido de una lista de elementos <filespec> separados por comas que definen los archivos de registro. Si no se especifica LOG ON, se crea automáticamente un archivo de registro cuyo tamaño es el 25 por ciento de la suma de los tamaños de todos los archivos de datos de la base de datos, o 512 KB, lo que sea mayor. LOG ON no se puede especificar en una instantánea de base de datos.

  • COLLATE collation_name
    Especifica la intercalación predeterminada de la base de datos. El nombre de la intercalación puede ser un nombre de intercalación de Windows o un nombre de intercalación de SQL. Si no se especifica, se asigna a la base de datos la intercalación predeterminada de la instancia de SQL Server. No se puede especificar un nombre de intercalación en una instantánea de base de datos.

    No se puede especificar un nombre de intercalación con las cláusulas FOR ATTACH o FOR ATTACH_REBUILD_LOG. Para obtener información acerca de cómo cambiar la intercalación de una base de datos adjuntada, visite este sitio Web de Microsoft.

    Para obtener más información acerca de los nombres de intercalación de Windows y SQL, vea COLLATE (Transact-SQL).

  • FOR ATTACH
    Especifica que la base de datos se crea adjuntando un conjunto existente de archivos de sistema operativo. Debe haber una entrada <filespec> que especifique el archivo principal. Las demás entradas <filespec> que son necesarias son las correspondientes a los archivos con una ruta de acceso diferente de la que tenían cuando la base de datos se creó por primera vez o se adjuntó por última vez. Debe especificarse una entrada <filespec> para estos archivos.

    FOR ATTACH tiene los siguientes requisitos:

    • Todos los archivos de datos (MDF y NDF) deben estar disponibles.

    • Si hay varios archivos de registro, todos ellos deben estar disponibles.

    Si una base de datos de lectura/escritura tiene un único archivo de registro que no está disponible actualmente y si la base de datos se cerró sin usuarios o transacciones abiertas antes de la operación de adjuntar, FOR ATTACH regenera automáticamente el archivo de registro y actualiza el archivo principal. En cambio, en el caso de una base de datos de sólo lectura, el registro no se regenera, ya que el archivo principal no se puede actualizar. Por tanto, cuando se adjunta una base de datos de sólo lectura cuyo registro no está disponible, es necesario suministrar el archivo o los archivos de registro en la cláusula FOR ATTACH.

    [!NOTA]

    Una base de datos creada por una versión más reciente de SQL Server no puede adjuntarse en versiones anteriores. La versión de la base de datos de origen debe ser como mínimo la versión 80 (SQL Server 2000) para adjuntar a SQL Server 2008. Al adjuntar bases de datos SQL Server 2000 o SQL Server 2005 con un nivel de compatibilidad inferior a 80, se establecerán con una compatibilidad de 80.

    En SQL Server, los archivos de texto completo que formen parte de la base de datos que se va a adjuntar, se incluirán con la base de datos. Para especificar una nueva ruta de acceso al catálogo de texto, escriba la nueva ubicación sin incluir el nombre de archivo de texto del sistema operativo. Para obtener más información, vea la sección Ejemplos.

    FOR ATTACH no se puede especificar en una instantánea de base de datos.

    Nota de seguridadNota de seguridad

    Se recomienda no adjuntar bases de datos de orígenes desconocidos o que no sean de confianza. Estas bases de datos pueden contener código dañino que podría ejecutar código Transact-SQL no deseado o provocar errores debido a la modificación del esquema o de la estructura de la base de datos física. Antes de utilizar una base de datos de un origen desconocido o que no sea de confianza, ejecute DBCC CHECKDB en la base de datos en un servidor que no sea de producción y examine el código de la base de datos, como procedimientos almacenados u otro código definido por el usuario.

    Para obtener más información sobre cómo se adjuntan y separan las bases de datos, vea Separar y adjuntar bases de datos.

    [!NOTA]

    Si la base de datos utiliza Service Broker, vea también <service_broker_option>.

    Para obtener información acerca de los permisos de archivo que se establecen al separar y adjuntar una base de datos, vea Proteger archivos de datos y de registro.

    Cuando adjunte una base de datos replicada que se copió en lugar de separarse, considere los siguientes puntos:

    • Si adjunta la base de datos a la misma versión e instancia de servidor que la base de datos original, no es necesario realizar ningún paso adicional.

    • Si adjunta la base de datos a la misma instancia de servidor pero con una versión actualizada, debe ejecutar sp_vupgrade_replication para actualizar la réplica una vez que se complete la operación de adjuntar.

    • Si adjunta la base de datos a una instancia de servidor diferente, sin importar la versión, debe ejecutar sp_removedbreplication para quitar la replicación una vez completada la operación de adjuntar.

    [!NOTA]

    Adjunte los trabajos con el formato de almacenamiento vardecimal, pero el SQL Server Database Engine (Motor de base de datos de SQL Server) se debe actualizar al menos al Service Pack 2 de SQL Server 2005. No puede adjuntar ninguna base de datos que utilice el formato de almacenamiento vardecimal a una versión anterior de SQL Server. Para obtener más información acerca del formato de almacenamiento vardecimal, vea Almacenar datos decimales como longitud variable.

    Para obtener información sobre cómo actualizar una base de datos mediante el método de adjuntar, vea Cómo actualizar una base de datos mediante Separar y Adjuntar (Transact-SQL).

  • FOR ATTACH_REBUILD_LOG
    Especifica que la base de datos se crea adjuntando un conjunto existente de archivos de sistema operativo. Esta opción está limitada a las bases de datos de lectura/escritura. Si no se encuentran uno o varios archivos de registro de transacciones, se vuelve a generar el archivo de registro. Debe haber una entrada <filespec> que especifique el archivo principal.

    [!NOTA]

    Si los archivos de registro están disponibles, el Database Engine (Motor de base de datos) utilizará esos archivos en lugar de volver a generar los archivos de registro.

    FOR ATTACH_REBUILD_LOG tiene los requisitos siguientes:

    • Un cierre limpio de la base de datos.

    • Todos los archivos de datos (MDF y NDF) deben estar disponibles.

    Nota importanteImportante

    Esta operación interrumpe la cadena de copias de seguridad del registro. Se recomienda realizar una copia de seguridad completa de la base de datos después de finalizar la operación. Para obtener más información, vea BACKUP (Transact-SQL).

    Normalmente, FOR ATTACH_REBUILD_LOG se utiliza cuando se copia una base de datos de lectura/escritura con un registro grande en otro servidor donde la copia se va a utilizar en la mayoría de los casos o únicamente para operaciones de lectura y, por tanto, necesitará menos espacio de registro que la base de datos original.

    FOR ATTACH_REBUILD_LOG no se puede especificar en una instantánea de base de datos.

    Para obtener más información sobre cómo se adjuntan y separan las bases de datos, vea Separar y adjuntar bases de datos.

  • <filespec>
    Controla las propiedades de archivo.

  • NAME logical_file_name
    Especifica un nombre lógico para el archivo. NAME es obligatorio si se especifica FILENAME, excepto cuando se especifica una de las cláusulas FOR ATTACH. Un grupo de archivos FILESTREAM no se puede denominar PRIMARY.

    • logical_file_name
      Es el nombre lógico que se utiliza en SQL Server cuando se hace referencia al archivo. Logical_file_name debe ser único en la base de datos y ajustarse a las reglas de los identificadores. El nombre puede ser una constante de caracteres o Unicode, o un identificador regular o delimitado.
  • FILENAME { 'os_file_name' | 'filestream_path' }
    Especifica el nombre de archivo (físico) del sistema operativo.

    • 'os_file_name'
      Es la ruta de acceso y el nombre de archivo que el sistema operativo utiliza cuando se crea el archivo. El archivo debe residir en uno de los siguientes dispositivos: el servidor local en el que se ha instalado SQL Server, una red de área de almacenamiento (SAN) o una red basada en iSCSI. La ruta de acceso especificada debe existir antes de ejecutar la instrucción CREATE DATABASE. Para obtener más información, vea "Archivos y grupos de archivos de base de datos" en la sección Notas.

      Los parámetros SIZE, MAXSIZE y FILEGROWTH no se pueden establecer cuando se especifica una ruta UNC para el archivo.

      Si el archivo se encuentra en una partición sin procesar, os_file_name sólo debe indicar la letra de unidad de una partición sin procesar existente. Sólo se puede crear un archivo de datos en cada partición sin procesar.

      Los archivos de datos no deben guardarse en sistemas de archivo comprimidos a menos que se trate de archivos secundarios de sólo lectura o que la base de datos sea de sólo lectura. Los archivos de registro no se deben almacenar en sistemas de archivo comprimidos. Para obtener más información, vea Grupos de archivos de sólo lectura y compresión.

    • 'filestream_path'
      Para un grupo de archivos FILESTREAM, FILENAME hace referencia a la ruta de acceso donde se almacenarán los datos FILESTREAM. La ruta de acceso hasta la última carpeta debe existir y la última carpeta no debe existir. Por ejemplo, si especifica la ruta de acceso C:\MyFiles\MyFilestreamData, C:\MyFiles debe existir antes de ejecutar ALTER DATABASE, pero la carpeta MyFilestreamData no debe existir.

      El grupo de archivos y el archivo (<filespec>) se deben crear en la misma instrucción. Sólo puede haber un archivo, <filespec>, para un grupo de archivos FILESTREAM.

      Las propiedades SIZE, MAXSIZE y FILEGROWTH no se aplican a un grupo de archivos FILESTREAM.

  • SIZE size
    Especifica el tamaño del archivo.

    SIZE no se puede especificar si se especifica os_file_name como ruta UNC. SIZE no se aplica a un grupo de archivos FILESTREAM.

    • size
      Es el tamaño inicial del archivo.

      Cuando no se proporciona size para el archivo principal, el Database Engine (Motor de base de datos) utiliza el tamaño del archivo principal de la base de datos model. Cuando se especifica un archivo de datos secundario o un archivo de registro, pero no se especifica el argumento size para ese archivo, el Database Engine (Motor de base de datos) hace que el tamaño del archivo sea de 1 MB. El tamaño especificado para el archivo principal debe tener al menos el tamaño del archivo principal de la base de datos model.

      Se pueden utilizar los sufijos kilobyte (KB), megabyte (MB), gigabyte (GB) o terabyte (TB). El valor predeterminado es MB. Especifique un número entero; no incluya decimales. Size es un valor entero. Para valores mayores que 2147483647, utilice unidades más grandes.

  • MAXSIZE max_size
    Especifica el tamaño máximo que puede alcanzar el archivo. MAXSIZE no se puede especificar si se especifica os_file_name como ruta UNC. MAXSIZE no se aplica a un grupo de archivos FILESTREAM.

    • max_size
      Es el tamaño máximo del archivo. Se pueden utilizar los sufijos KB, MB, GB y TB. El valor predeterminado es MB. Especifique un número entero; no incluya decimales. Si no se especifica max_size, el archivo aumenta hasta que el disco esté lleno. Max_size es un valor entero. Para valores mayores que 2147483647, utilice unidades más grandes.
  • UNLIMITED
    Especifica que el archivo crecerá hasta que el disco esté lleno. En SQL Server, si se especifica un crecimiento ilimitado para un archivo de registro, su tamaño máximo será de 2 TB, y para un archivo de datos será de 16 TB.

  • FILEGROWTH growth_increment
    Especifica el incremento de crecimiento automático del archivo. El valor FILEGROWTH de un archivo no puede exceder del valor MAXSIZE. FILEGROWTH no se puede especificar si se especifica os_file_name como ruta UNC. FILEGROWTH no se aplica a un grupo de archivos FILESTREAM.

    • growth_increment
      Es la cantidad de espacio que se agrega al archivo siempre que se necesita más espacio.

      El valor se puede especificar en MB, KB, GB, TB o como porcentaje (%). Si se especifica un número sin los sufijos MB, KB o %, el valor predeterminado es MB. Cuando se especifica %, el incremento de crecimiento es el porcentaje especificado del tamaño del archivo en el momento en que tiene lugar el incremento. El tamaño especificado se redondea a la cifra más próxima a 64 KB.

      El valor 0 indica que el crecimiento automático está desactivado y no se permite más espacio.

      Si no se especifica FILEGROWTH, el valor predeterminado es 1 MB para los archivos de datos y el 10% para los archivos de registro, y el valor mínimo es 64 KB.

      [!NOTA]

      En SQL Server, el incremento de crecimiento predeterminado para los archivos de datos ha cambiado del 10% a 1 MB. El valor predeterminado para el archivo de registro (10%) permanece invariable.

  • <filegroup>
    Controla las propiedades del grupo de archivos. Filegroup no se puede especificar en una instantánea de base de datos.

  • FILEGROUP filegroup_name
    Es el nombre lógico del grupo de archivos.

    • filegroup_name
      filegroup_name debe ser único en la base de datos y no puede ser los nombres PRIMARY ni PRIMARY_LOG suministrados por el sistema. El nombre puede ser una constante de caracteres o Unicode, o un identificador regular o delimitado. El nombre debe cumplir las reglas de los identificadores.

    • CONTAINS FILESTREAM
      Especifica que el grupo de archivos almacena objetos binarios grandes (BLOB) de FILESTREAM en el sistema de archivos.

    • DEFAULT
      Especifica que el grupo de archivos indicado es el grupo de archivos predeterminado de la base de datos.

  • <external_access_option>
    Controla el acceso externo a la base de datos y desde ésta.

    • DB_CHAINING { ON | OFF }
      Si se especifica ON, la base de datos puede ser el origen o destino de una cadena de propiedad entre bases de datos.

      Si es OFF, la base de datos no puede participar en encadenamientos de propiedad entre bases de datos. El valor predeterminado es OFF.

      Nota importanteImportante

      La instancia de SQL Server reconocerá este valor cuando la opción de servidor cross db ownership chaining sea 0 (OFF). Si cross db ownership chaining es 1 (ON), todas las bases de datos de usuario pueden participar en las cadenas de propiedad entre bases de datos, independientemente del valor de esta opción. Esta opción se establece utilizando sp_configure.

      Para establecer esta opción, es necesario pertenecer a la función fija de servidor sysadmin. La opción DB_CHAINING no se puede establecer en estas bases de datos del sistema: master, model y tempdb.

      Para obtener más información, vea Cadenas de propiedad.

    • TRUSTWORTHY { ON | OFF }
      Cuando se especifica ON, los módulos de base de datos (por ejemplo, vistas, funciones definidas por el usuario o procedimientos almacenados) que utilicen un contexto de suplantación pueden tener acceso a recursos externos a la base de datos.

      Si es OFF, los módulos de base de datos en un contexto de suplantación no pueden tener acceso a recursos externos a la base de datos. El valor predeterminado es OFF.

      TRUSTWORTHY se establece en OFF cada vez que se adjunta la base de datos.

      De forma predeterminada, el valor TRUSTWORTHY se establece en OFF en todas las bases de datos de sistema, excepto en la base de datos msdb. El valor no se puede cambiar en las bases de datos model y tempdb. Se recomienda no establecer nunca la opción TRUSTWORTHY en ON en la base de datos master.

      Para establecer esta opción, es necesario pertenecer a la función fija de servidor sysadmin.

  • <service_broker_option>
    Controla las opciones de Service Broker en la base de datos.

    Las opciones de Service Broker solamente se pueden especificar cuando se utiliza la cláusula FOR ATTACH.

    • ENABLE_BROKER
      Indica que se habilite Service Broker para la base de datos especificada. Dicho de otro modo, se establece is_broker_enabled en True en la vista de catálogo sys.databases y se inicia la entrega de mensajes.

    • NEW_BROKER
      Crea un nuevo valor de service_broker_guid en sys.databases y en la base de datos restaurada y finaliza todos los extremos de conversación con limpieza. El agente está habilitado, pero no se envía ningún mensaje a los extremos de conversación remotos.

    • ERROR_BROKER_CONVERSATIONS
      Finaliza todas las conversaciones con un error que indica que la base de datos está adjunta o restaurada. El agente está deshabilitado hasta que se completa esta operación y, después, se habilita.

  • database_snapshot_name
    Es el nombre de la nueva instantánea de base de datos. Los nombres de instantánea de base de datos deben ser únicos en una instancia de SQL Server y deben cumplir las reglas de los identificadores. database_snapshot_name puede tener 128 caracteres como máximo.

  • ON ( NAME =logical_file_name, FILENAME ='os_file_name') [ ,... n ]
    Para la creación de una instantánea de base de datos, especifica una lista de archivos de la base de datos de origen. Para que la instantánea funcione, todos los archivos de datos deben especificarse individualmente. Sin embargo, no se permiten archivos de registro para las instantáneas de base de datos.

    Para obtener las descripciones de NAME y FILENAME y sus valores, vea las descripciones de los valores equivalentes de <filespec>.

    [!NOTA]

    Cuando se crea una instantánea de base de datos, no se admiten las demás opciones de <filespec> ni la palabra clave PRIMARY.

  • AS SNAPSHOT OF source_database_name
    Indica que la base de datos que se va a crear es una instantánea de la base de datos de origen especificada en source_database_name. La instantánea y la base de datos de origen deben estar en la misma instancia.

    Para obtener más información, vea "Instantáneas de base de datos" en la sección Notas.

Notas

Cada vez que se crea, modifica o quita una base de datos de usuario, se debe hacer una copia de seguridad de la base de datos maestra.

La instrucción CREATE DATABASE debe ejecutarse en modo de confirmación automática (el modo predeterminado de administración de transacciones) y no se permite en una transacción explícita o implícita. Para obtener más información, vea Transacciones de confirmación automática.

Se puede utilizar una instrucción CREATE DATABASE para crear una base de datos y los archivos donde se almacena. SQL Server implementa la instrucción CREATE DATABASE de la siguiente manera:

  1. SQL Server utiliza una copia de la base de datos model para inicializar la base de datos y sus metadatos.

  2. Se asigna un GUID de Service Broker a la base de datos.

  3. A continuación, el Database Engine (Motor de base de datos) rellena el resto de la base de datos con páginas vacías, excepto las páginas que tengan datos internos que registren cómo se emplea el espacio en la base de datos. Para obtener más información, vea Inicialización de archivos de base de datos.

En una instancia de SQL Server se pueden especificar 32.767 bases de datos como máximo.

Cada base de datos tiene un propietario que puede realizar actividades especiales en ella. El propietario es el usuario que crea la base de datos. El propietario de la base de datos se puede cambiar utilizando sp_changedbowner.

Archivos y grupos de archivos de base de datos

Cada base de datos tiene al menos 2 archivos (un archivo principal y un archivo de registro de transacciones) y un grupo de archivos. Para cada base de datos pueden especificarse hasta 32.767 archivos y 32.767 grupos de archivos. Para obtener más información, vea Arquitectura de archivos y grupos de archivos.

Cuando cree una base de datos, defina el mayor tamaño posible para los archivos de datos según la cantidad de datos máxima prevista para la base datos. Para obtener más información, vea Usar archivos y grupos de archivos para administrar el crecimiento de las bases de datos.

Se recomienda utilizar una red de área de almacenamiento (SAN), una red basada en iSCSI o un disco conectado localmente para almacenar los archivos de base de datos de SQL Server, porque esta configuración optimiza el rendimiento y la confiabilidad de SQL Server. De manera predeterminada, en SQL Server no se habilita el uso de archivos de base de datos en red (almacenados en un servidor de red o en un almacenamiento conectado a una red). No obstante, es posible crear una base de datos cuyos archivos estén basados en red mediante la marca de seguimiento 1807. Para obtener información acerca de esta marca de seguimiento y consideraciones importantes de rendimiento y mantenimiento, visite este sitio web de Microsoft.

Instantáneas de base de datos

La instrucción CREATE DATABASE permite crear una vista estática de sólo lectura, es decir, una instantánea de base de datos, de una base de datos existente, la base de datos de origen. Desde el punto de vista transaccional, una instantánea de base de datos es coherente con la base de datos de origen tal como se encontraba en el momento de crear la instantánea. Una base de datos de origen puede tener varias instantáneas.

[!NOTA]

Cuando se crea una instantánea de base de datos, la instrucción CREATE DATABASE no puede hacer referencia a archivos de registro, archivos sin conexión, archivos de restauración ni archivos inactivos.

Si se produce un error al crear una instantánea de base de datos, se sospecha de la instantánea y debe eliminarse. Para obtener más información, vea DROP DATABASE (Transact-SQL).

Las instantáneas se conservan hasta que se eliminan mediante DROP DATABASE.

Para obtener más información, vea Instantáneas de base de datos.

Opciones de base de datos

Cuando se crea una base de datos, se establecen automáticamente varias opciones de base de datos. Para obtener una lista de estas opciones y sus valores predeterminados, vea Configurar las opciones de la base de datos. Estas opciones se pueden modificar mediante la instrucción ALTER DATABASE.

Base de datos model y creación de nuevas bases de datos

Todos los objetos definidos por el usuario en la base de datos model se copiarán en todas las bases de datos recién creadas. Puede agregar a la base de datos model todos los objetos (tablas, vistas, procedimientos almacenados, tipos de datos, etc.) que desee incluir en todas las bases de datos creadas recientemente.

Cuando se especifica una instrucción CREATE DATABASE database_name sin parámetros de tamaño adicionales, el archivo de datos principal pasa a tener el mismo tamaño que el archivo principal de la base de datos model.

A menos que se especifique FOR ATTACH, todas las bases de datos nuevas heredan las opciones de la base de datos model. Por ejemplo, la opción de base de datos auto shrink se establece en true en model y en cualquier base de datos nueva que se cree. Si se cambian las opciones de la base de datos model, estas nuevas opciones se utilizarán en las nuevas bases de datos que se creen. Las operaciones de modificación de la base de datos model no afectan a las bases de datos existentes. Si se especifica FOR ATTACH en la instrucción CREATE DATABASE, la nueva base de datos hereda las opciones de la base de datos original.

Ver la información de la base de datos

Se pueden utilizar vistas de catálogo, funciones del sistema y procedimientos almacenados del sistema para devolver información sobre bases de datos, archivos y grupos de archivos. Para obtener más información, vea Ver los metadatos de una base de datos.

Permisos

Requiere el permiso CREATE DATABASE, CREATE ANY DATABASE o ALTER ANY DATABASE.

Para mantener el control de la utilización del disco en una instancia de SQL Server, el permiso para crear bases de datos suele limitarse a un número reducido de cuentas de inicio de sesión.

Permisos en archivos de datos y de registro

En SQL Server, algunos permisos se establecen en los archivos de datos y de registro de cada base de datos. Siempre que se realizan las operaciones siguientes en una base de datos, se establecen estos permisos:

Creada

Modificada para agregar un nuevo archivo

Adjuntada

Copia de seguridad

Separada

Restaurada

Los permisos evitan que los archivos se modifiquen por accidente si residen en un directorio sin restricción de permisos. Para obtener más información, vea Proteger archivos de datos y de registro.

[!NOTA]

MicrosoftSQL Server 2005 Express Edition no establece permisos en archivos de datos y de registro.

Ejemplos

A. Crear una base de datos sin especificar archivos

En este ejemplo se crea la base de datos mytest, y los archivos principal y de registro de transacciones correspondientes. Debido a que la instrucción no tiene elementos <filespec>, el archivo de base de datos principal tiene el tamaño del archivo principal de la base de datos model. El registro de transacciones se establece en el mayor de estos valores: 512 KB o el 25% del tamaño del archivo de datos principal. Como no se ha especificado MAXSIZE, los archivos pueden crecer hasta llenar todo el espacio disponible en el disco. En este ejemplo también se muestra la forma de quitar la base de datos denominada mytest si existe, antes de crear la base de datos 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. Crear una base de datos que especifica los archivos de datos y de registro de transacciones

En el ejemplo siguiente se crea la base de datos Sales. Debido a que no se utiliza la palabra clave PRIMARY, el primer archivo (Sales_dat) se convierte en el archivo principal. Como no se especifica MB ni KB en el parámetro SIZE del archivo Sales_dat, se utiliza MB y el tamaño se asigna en megabytes. El tamaño del archivo Sales_log se asigna en megabytes porque el sufijo MB se ha indicado explícitamente en el parámetro 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. Crear una base de datos mediante la especificación de múltiples archivos de datos y de registro de transacciones

En el ejemplo siguiente se crea la base de datos Archive, que tiene tres archivos de datos de 100-MB y dos archivos de registro de transacciones de 100-MB. El archivo principal es el primer archivo de la lista y se especifica explícitamente con la palabra clave PRIMARY. Los archivos de registro de transacciones se especifican a continuación de las palabras clave LOG ON. Tenga en cuenta las extensiones usadas para los archivos en la opción FILENAME: .mdf se usa para archivos de datos principales, .ndf para archivos de datos secundarios y .ldf para archivos de registro de transacciones. En este ejemplo se coloca la base de datos en la unidad D, en lugar de con la base de datos 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. Crear una base de datos con grupos de archivos

En el ejemplo siguiente se crea la base de datos Sales, que tiene los siguientes grupos de archivos:

  • El grupo de archivos principal, con los archivos Spri1_dat y Spri2_dat. El incremento de FILEGROWTH de estos archivos se especifica como 15%.

  • Un grupo de archivos denominado SalesGroup1, con los archivos SGrp1Fi1 y SGrp1Fi2.

  • Un grupo de archivos denominado SalesGroup2, con los archivos SGrp2Fi1 y SGrp2Fi2.

En este ejemplo se colocan los archivos de datos y de registro en discos diferentes para mejorar el rendimiento.

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. Adjuntar una base de datos

En el ejemplo siguiente se separa la base de datos Archive creada en el ejemplo D y, a continuación, se adjunta mediante la cláusula FOR ATTACH. La base de datos Archive se ha definido para contener varios archivos de datos y de registro. Sin embargo, dado que la ubicación de los archivos no ha cambiado desde que se crearon, solo es necesario especificar el archivo principal en la cláusula FOR ATTACH. A partir de SQL Server 2005, los archivos de texto completo que formen parte de la base de datos que se va a adjuntar se adjuntarán con la base de datos.

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

F. Crear una instantánea de base de datos

En el ejemplo siguiente se crea la instantánea de base de datos sales_snapshot0600. Debido a que la instantánea de base de datos es de sólo lectura, no se puede especificar un archivo de registro. De acuerdo con la sintaxis, se especifican todos los archivos de la base de datos de origen, pero los grupos de archivos no se especifican.

La base de datos de origen en este ejemplo es la base de datos Sales creada en el ejemplo 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. Crear una base de datos y especificar un nombre de intercalación y sus opciones

En el ejemplo siguiente se crea la base de datos MyOptionsTest. Se especifica un nombre de intercalación y las opciones TRUSTYWORTHY y DB_CHAINING se establecen en 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. Adjuntar un catálogo de texto que se ha movido

En el ejemplo siguiente se adjunta el catálogo de texto AdvWksFtCat junto con los archivos de datos y de registro de AdventureWorks. En el ejemplo, el catálogo de texto se mueve desde su ubicación predeterminada hasta c:\myFTCatalogs. Los archivos de datos y de registro permanecen en sus ubicaciones predeterminadas.

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. Crear una base de datos que especifique un grupo de archivos de filas y dos grupos de archivos FILESTREAM

En el ejemplo siguiente se crea la base de datos FileStreamDB. La base de datos se crea con un grupo de archivos de filas y dos grupos de archivos FILESTREAM. Cada grupo de archivos contiene un archivo:

  • FileStreamDB_data contiene los datos de fila. Contiene un archivo, FileStreamDB_data.mdf con la ruta de acceso predeterminada.

  • FileStreamPhotos contiene los datos FILESTREAM. Contiene un contenedor de datos FILESTREAM, FSPhotos, que se encuentra en C:\MyFSfolder\Photos. Se marca como el grupo de archivos FILESTREAM predeterminado.

  • FileStreamResumes contiene los datos FILESTREAM. Contiene un contenedor de datos FILESTREAM, FSResumes, que se encuentra en 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