CREATE DATABASE (Transact-SQL)

Cria um novo banco de dados e os arquivos usados para armazená-lo, um instantâneo de banco de dados ou anexa um banco de dados dos arquivos desanexados de um banco de dados criado anteriormente.

Ícone de vínculo de tópico Convenções de sintaxe Transact-SQL

Sintaxe

CREATE DATABASE database_name 
[ CONTAINMENT = { NONE | PARTIAL } ]
[ ON 
      [ PRIMARY ] <filespec> [ ,...n ] 
      [ , <filegroup> [ ,...n ] ] 
      [ LOG ON <filespec> [ ,...n ] ] 
] 
[ COLLATE collation_name ]
[ WITH  <option> [,...n ] ]
[;]

<option> ::=
{
      FILESTREAM ( <filestream_option> [,...n ] )
    | DEFAULT_FULLTEXT_LANGUAGE = { lcid | language_name | language_alias }
    | DEFAULT_LANGUAGE = { lcid | language_name | language_alias }
    | NESTED_TRIGGERS = { OFF | ON }
    | TRANSFORM_NOISE_WORDS = { OFF | ON}
    | TWO_DIGIT_YEAR_CUTOFF = <two_digit_year_cutoff> 
    | DB_CHAINING { OFF | ON }
    | TRUSTWORTHY { OFF | ON }
}

<filestream_option> ::=
{
      NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL }
    | DIRECTORY_NAME = 'directory_name' 
}

To attach a database
CREATE DATABASE database_name 
    ON <filespec> [ ,...n ] 
    FOR { { ATTACH [ WITH <attach_database_option> [ , ...n ] ] }
        | 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 | % ] ]
)
}

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

<attach_database_option> ::=
{
      <service_broker_option>
    | RESTRICTED_USER
    | FILESTREAM ( DIRECTORY_NAME = { 'directory_name' | NULL } )
}

<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
    É o nome do novo banco de dados. Nomes de bancos de dados devem ser exclusivos dentro de uma instância do SQL Server e estar de acordo com as regras de identificadores.

    database_name pode conter um máximo de 128 caracteres, a menos que um nome lógico não esteja especificado para o arquivo de log. Se um arquivo de log lógico não estiver especificado, o SQL Server gerará o logical_file_name e o os_file_name do log acrescentando um sufixo ao database_name. Isso limita o database_name a 123 caracteres de forma que o nome do arquivo lógico gerado não seja maior do que 128 caracteres.

    Se o nome do arquivo de dados não estiver especificado, o SQL Server usará database_name como logical_file_name e os_file_name. O caminho padrão é obtido do Registro. O caminho padrão pode ser alterado usando as Propriedades do Servidor (Página Configurações de Banco de Dados) no Management Studio. A alteração do caminho padrão exige o reinício do SQL Server.

  • CONTAINMENT
    Especifica o status de contenção do banco de dados. NONE = banco de dados dependente. PARTIAL = banco de dados parcialmente independente.

  • ON
    Especifica que os arquivos em disco usados para armazenar as seções do banco de dados, os arquivos de dados, sejam definidos explicitamente. ON é necessário quando seguido por uma lista de itens <filespec> separados por vírgulas que definem os arquivos de dados para o grupo de arquivos primário. A lista de arquivos no grupo de arquivos primário pode ser seguida por uma lista opcional de itens de <filegroup> separados por vírgulas que definem os grupos de arquivos de usuários e seus arquivos.

  • PRIMARY
    Especifica que a lista <filespec>associada define o arquivo primário. O primeiro arquivo especificado na entrada <filespec> no grupo de arquivos primário se torna o arquivo primário. Um banco de dados pode conter apenas um arquivo primário. Para obter mais informações, consulte Arquivos e grupos de arquivos do banco de dados.

    Se PRIMARY não estiver especificado, o primeiro arquivo listado na instrução CREATE DATABASE se tornará o arquivo primário.

  • LOG ON
    Especifica que os arquivos em disco usados para armazenar o log do banco de dados, os arquivos de log, são definidos explicitamente. LOG ON é seguido por uma lista de itens <filespec> separados por vírgulas que definem os arquivos de log. Se LOG ON não estiver especificado, um arquivo de log será criado automaticamente com um tamanho de 25 por cento da soma dos tamanhos de todos os arquivos de dados do banco de dados ou 512 KB, o que for maior. Este arquivo é colocado no local padrão de arquivo de log. Para obter informações sobre esse local, consulte Exibir ou alterar os locais padrão de arquivos de log e de dados (SQL Server Management Studio).

    LOG ON não pode ser especificado em um instantâneo do banco de dados.

  • COLLATE collation_name
    Especifica o agrupamento padrão do banco de dados. O nome do agrupamento pode ser um nome de agrupamento do Windows ou um nome de agrupamento SQL. Se não estiver especificado, o agrupamento padrão da instância do SQL Server será atribuído ao banco de dados. Um nome de agrupamento não pode ser especificado em um instantâneo do banco de dados.

    Um nome de agrupamento não pode ser especificado com as cláusulas FOR ATTACH ou FOR ATTACH_REBUILD_LOG. Para obter informações sobre como alterar o agrupamento de um banco de dados anexado, acesse Microsoft Web site.

    Para obter mais informações sobre nomes de agrupamentos Windows e SQL, consulte COLLATE (Transact-SQL).

    ObservaçãoObservação

    Os bancos de dados independentes são agrupados de maneira diferente dos bancos de dados dependente. Consulte Agrupamentos de banco de dados contidos para obter mais informações.

  • WITH <opção>

    • <filestream_options>

      • NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL }
        Especifica o nível de acesso não transacional de FILESTREAM ao banco de dados.

        Valor

        Descrição

        DESATIVADO

        O acesso não transacional está desabilitado.

        READONLY

        Os dados FILESTREAM deste banco de dados podem ser lidos por processos não transacionais.

        FULL

        O acesso não transacional completo a FileTables FILESTREAM está habilitado.

    As opções a seguir são permitidas apenas quando CONTAINMENT estiver definido como PARTIAL. Se CONTAINMENT estiver definido como NONE, ocorrerão erros.

    • DEFAULT_FULLTEXT_LANGUAGE = <lcid> | <nome do idioma> | <alias do idioma>

      Consulte Configurar opção de configuração de servidor default full-text language para obter uma descrição completa dessa opção.

    • DEFAULT_LANGUAGE = <lcid> | <nome do idioma> | <alias do idioma>

      Consulte Configurar opção default language de configuração de servidor para obter uma descrição completa dessa opção.

    • NESTED_TRIGGERS = { OFF | ON}

      Consulte Configurar a opção de configuração de servidor nested triggers para obter uma descrição completa dessa opção.

    • TRANSFORM_NOISE_WORDS = { OFF | ON}

      Consulte Opção de configuração de servidor para transformar palavras de ruído para obter uma descrição completa dessa opção.

    • TWO_DIGIT_YEAR_CUTOFF = { 2049 | <qualquer ano entre 1753 e 9999> }

      Quatro dígitos que representam um ano. 2049 é o valor padrão. Consulte Configurar a opção two digit year cutoff de configuração de servidor para obter uma descrição completa dessa opção.

    • DB_CHAINING { OFF | ON }

      Quando ON estiver especificado, o banco de dados poderá ser a origem ou o destino de um encadeamento de propriedades de bancos de dados.

      Quando OFF, o banco de dados não poderá participar do encadeamento de propriedades de bancos de dados. O padrão é OFF.

      Observação importanteImportante

      A instância do SQL Server reconhecerá essa configuração quando a opção do servidor cross db ownership chaining for 0 (OFF). Quando cross db ownership chaining for 1 (ON), todos os bancos de dados de usuário poderão participar de cadeias de propriedades de bancos de dados, independentemente do valor dessa opção. Essa opção é definida por meio de sp_configure.

      A definição dessa opção exige associação na função de servidor fixa sysadmin. A opção DB_CHAINING não pode ser definida nestes bancos de dados do sistema: master, model, tempdb.

    • TRUSTWORTHY { OFF | ON }

      Quando ON estiver especificado, os módulos de banco de dados (por exemplo, exibições, funções definidas pelo usuário ou procedimentos armazenados) que usam um contexto de representação poderão acessar recursos fora do banco de dados.

      Quando OFF, os módulos do banco de dados em um contexto de representação não poderão acessar recursos fora do banco de dados. O padrão é OFF.

      TRUSTWORTHY será definido como OFF sempre que o banco de dados for anexado.

      Por padrão, todos os bancos de dados do sistema, exceto o banco de dados msdb, têm TRUSTWORTHY definido como OFF. O valor não pode ser alterado para os bancos de dados model e tempdb. É recomendável nunca definir a opção TRUSTWORTHY como ON para o banco de dados master.

      A definição dessa opção exige associação na função de servidor fixa sysadmin.

  • FOR ATTACH [ WITH < attach_database_option > ]
    Especifica que o banco de dados é criado pela anexação de um conjunto existente de arquivos do sistema operacional. Deve haver uma entrada <filespec> que especifica o arquivo primário. As únicas outras entradas <filespec> necessárias são as de arquivos que tenham um caminho diferente de quando o banco de dados foi criado pela primeira vez ou anexado pela última vez. Uma entrada <filespec> deve ser especificada para estes arquivos.

    FOR ATTACH exige o seguinte:

    • Todos os arquivos de dados (MDF e NDF) devem estar disponíveis.

    • Se existirem vários arquivos de log, todos eles deverão estar disponíveis.

    Se um banco de dados de leitura/gravação tiver um único arquivo de log que não esteja disponível no momento e se o banco de dados foi encerrado sem usuários ou transações abertas antes da operação de anexação, FOR ATTACH reconstruirá automaticamente o arquivo de log e atualizará o arquivo primário. Por outro lado, para um banco de dados somente leitura, o log não pode ser reconstruído porque o arquivo primário não pode ser atualizado. Portanto, ao anexar um banco de dados somente leitura com um log que não está disponível, você deve fornecer os arquivos de log ou os arquivos na cláusula FOR ATTACH.

    ObservaçãoObservação

    Um banco de dados criado por uma versão mais recente do SQL Server não pode ser anexado em versões anteriores. O banco de dados de origem deve ser, no mínimo, da versão 90 (SQL Server 2005) para ser anexado ao SQL Server 2012. Os bancos de dados do SQL Server 2005 que tiverem nível de compatibilidade menor do que 90 serão definidos para compatibilidade 90 quando anexados.

    No SQL Server, todos os arquivos de texto completo que fazem parte do banco de dados que está sendo anexado serão anexados com o banco de dados. Para especificar um novo caminho do catálogo de texto completo, especifique o novo local sem o nome do arquivo do sistema operacional de texto completo. Para obter mais informações, consulte a seção Exemplos.

    A anexação de um banco de dados que contém uma opção de FILESTREAM de "Nome de diretório", em uma instância do SQL Server solicitará que o SQL Server verifique se o nome de Database_Directory é exclusivo. Se não for, haverá falha na operação de anexação com o erro "O nome do Database_Directory do FILESTREAM <nome> não é exclusivo nesta instância do SQL Server". Para evitar esse erro, o parâmetro opcional directory_name deve ser passado para essa operação.

    FOR ATTACH não pode ser especificado em um instantâneo do banco de dados.

    FOR ATTACH pode especificar a opção de RESTRICTED_USER. RESTRICTED_USER permite que somente os membros da função de banco de dados fixa db_owner e das funções de servidor fixas dbcreator e sysadmin conectem-se ao banco de dados, mas não limita seu número. As tentativas de usuários não qualificados são recusadas.

    Se o banco de dados usar o Service Broker, use WITH <service_broker_option> na sua cláusula FOR ATTACH:

    • <service_broker_option>
      Controla entrega de mensagem Service Broker e o identificador Service Broker para o banco de dados. As opções Service Broker podem ser especificadas somente quando a cláusula FOR ATTACH é usada.

      • ENABLE_BROKER
        Especifica que o Service Broker está habilitado para o banco de dados especificado. Ou seja, a entrega das mensagens é iniciada, e is_broker_enabled é definido como true na exibição do catálogo sys.databases. O banco de dados retém o identificador do Service Broker existente.

      • NEW_BROKER
        Cria um novo valor de service_broker_guid em sys.databases e no banco de dados restaurado e encerra todos os pontos de extremidade de conversa com limpeza. O agente está habilitado, mas nenhuma mensagem é enviada aos pontos de extremidade de conversa remotos. Qualquer rota que referencia o antigo identificador do Service Broker deve ser recriada novamente com o novo identificador.

      • ERROR_BROKER_CONVERSATIONS
        Encerra todas as conversas com um erro que declara que o banco de dados está anexado ou restaurado. O agente é desabilitado até que essa operação seja concluída e, em seguida, é habilitado. O banco de dados retém o identificador do Service Broker existente.

    Ao anexar um banco de dados replicado que tenha sido copiado, em vez de desanexado, considere o seguinte:

    • Se você anexar o banco de dados à mesma instância e versão de servidor do banco de dados original, nenhuma etapa adicional será necessária.

    • Se anexar o banco de dados à mesma instância de servidor, mas com uma versão atualizada, você deve executar sp_vupgrade_replication para atualizar a replicação depois que a operação de anexação tiver sido concluída.

    • Se você anexar o banco de dados a uma instância de servidor diferente, independentemente da versão, deverá executar sp_removedbreplication para remover a replicação depois que a operação de anexação tiver sido concluída.

    ObservaçãoObservação

    A anexação funciona com o formato de armazenamento vardecimal, mas o Mecanismo de Banco de Dados do SQL Server deve ser atualizado pelo menos para o SQL Server 2005 Service Pack 2. Não é possível anexar um banco de dados que usa formato de armazenamento vardecimal a uma versão anterior do SQL Server. Para obter mais informações sobre o formato de armazenamento vardecimal, consulte Compactação de dados.

    Quando um banco de dados é anexado ou restaurado pela primeira vez a uma nova instância do SQL Server, uma cópia da chave mestra de banco de dados (criptografada pela chave mestra de serviço) ainda não está armazenada no servidor. Você deve usar a instrução OPEN MASTER KEY para descriptografar a chave mestra do banco de dados (DMK). Uma vez que a DMK foi descriptografada, você tem a opção de permitir a descriptografia automática futuramente usando a instrução ALTER MASTER KEY REGENERATE para fornecer ao servidor uma cópia da DMK criptografada com a SMK. Quando um banco de dados for atualizado de uma versão anterior, a DMK deverá ser regenerada para usar o algoritmo AES mais recente. Para obter mais informações sobre a regeneração da DMK, consulte ALTER MASTER KEY (Transact-SQL). O tempo necessário para regenerar a chave DMK para atualizar o AES depende do número de objetos protegidos pela DMK. É necessário regenerar a chave DMK para atualizar o AES somente uma vez, isso não tem impacto sobre regenerações futuras como parte de uma estratégia de rotação de chave. Para obter informações sobre como atualizar um banco de dados por meio de anexação, consulte Atualizar um banco de dados utilizando Desanexar e Anexar (Transact-SQL).

    Observação sobre segurança   É recomendável não anexar bancos de dados de origens desconhecidas ou não confiáveis. Esses bancos de dados podem conter um código mal-intencionado que pode executar código Transact-SQL involuntário ou provocar erros modificando o esquema ou a estrutura física do banco de dados. Antes de usar um banco de dados de uma fonte desconhecida ou não confiável, execute DBCC CHECKDB no banco de dados, em um servidor que não seja de produção e, além disso, examine o código, como procedimentos armazenados ou outro código definido pelo usuário, no banco de dados.

    ObservaçãoObservação

    As opções TRUSTWORTHY e DB_CHAINING não surtem nenhum efeito quando um banco de dados é anexado.

  • FOR ATTACH_REBUILD_LOG
    Especifica que o banco de dados é criado pela anexação de um conjunto existente de arquivos do sistema operacional. Essa opção é limitada a bancos de dados de leitura/gravação. Deve haver uma entrada <filespec> que especifique o arquivo primário. Se um ou mais arquivos de log de transações estiverem ausentes, o arquivo de log será reconstruído. O ATTACH_REBUILD_LOG cria automaticamente um novo arquivo de log de 1 MB. Este arquivo é colocado no local padrão de arquivo de log. Para obter informações sobre esse local, consulte Exibir ou alterar os locais padrão de arquivos de log e de dados (SQL Server Management Studio).

    ObservaçãoObservação

    Se os arquivos de log estiverem disponíveis, o Mecanismo de Banco de Dados usará esses arquivos em vez de reconstruir os arquivos de log.

    FOR ATTACH_REBUILD_LOG exige o seguinte:

    • Um desligamento correto do banco de dados.

    • Todos os arquivos de dados (MDF e NDF) devem estar disponíveis.

    Observação importanteImportante

    Essa operação interrompe a cadeia de backup de log. É recomendável que um backup completo do banco de dados seja executado após a conclusão da operação. Para obter mais informações, consulte BACKUP (Transact-SQL).

    Normalmente, FOR ATTACH_REBUILD_LOG é usado quando você copia um banco de dados de leitura/gravação com um log grande em outro servidor onde a cópia será usada principalmente, ou apenas, para operações de leitura e, portanto, exige menos espaço de log do que o banco de dados original.

    FOR ATTACH_REBUILD_LOG não pode ser especificado em um instantâneo do banco de dados.

    Para obter mais informações sobre como anexar ou desanexar bancos de dados, consulte Anexar e desanexar bancos de dados (SQL Server).

  • <filespec>
    Controla as propriedades do arquivo.

  • NAME logical_file_name
    Especifica o nome lógico do arquivo. NAME é exigido quando FILENAME está especificado, exceto ao especificar uma das cláusulas FOR ATTACH. Um grupo de arquivos FILESTREAM não pode ser denominado PRIMARY.

    • logical_file_name
      É o nome lógico usado no SQL Server ao fazer referência ao arquivo. O Logical_file_name deve ser exclusivo no banco de dados e estar de acordo com as regras de identificadores. O nome pode ser um caractere ou constante Unicode ou um identificador normal ou delimitado.
  • FILENAME { 'os_file_name' | 'filestream_path' }
    Especifica o nome do arquivo (físico) do sistema operacional.

    • ' os_file_name '
      É o caminho e o nome do arquivo usados pelo sistema operacional quando o arquivo é criado. O arquivo deve residir em um dos seguintes dispositivos: o servidor local no qual SQL Server está instalado, uma rede de área de armazenamento [SAN] ou uma rede baseada em iSCSI. O caminho especificado deve existir antes da execução da instrução CREATE DATABASE. Para obter mais informações, consulte "Arquivos de grupos de arquivos do banco de dados" na seção Comentários.

      Os parâmetros SIZE, MAXSIZE e FILEGROWTH podem ser definidos quando um caminho UNC está especificado para o arquivo.

      Se o arquivo estiver em uma partição bruta, o os_file_name deverá especificar apenas a letra da unidade de uma partição bruta existente. Apenas um arquivo de dados pode ser criado em cada partição bruta.

      Arquivos de dados não devem ser colocados em sistemas de arquivos compactados a não ser que os arquivos sejam secundários e somente leitura ou que o banco de dados seja somente leitura. Arquivos de log nunca devem ser colocados em sistemas de arquivos compactados.

    • ' filestream_path '
      Para um grupo de arquivos FILESTREAM, FILENAME faz referência a um caminho onde dados FILESTREAM serão armazenados. O caminho até a última pasta deve existir e a última pasta não deve existir. Por exemplo, se você especificar o caminho C:\MyFiles\MyFilestreamData, C:\MyFiles deve existir antes da execução de ALTER DATABASE, mas a pasta MyFilestreamData não deve existir.

      O grupo de arquivos e o arquivo (<filespec>) devem ser criados na mesma instrução.

      As propriedades SIZE e FILEGROWTH não se aplicam a um grupo de arquivos FILESTREAM.

  • SIZE size
    Especifica o tamanho do arquivo.

    SIZE não pode ser especificado quando o os_file_name é especificado como um caminho UNC. SIZE não se aplica a um grupo de arquivos FILESTREAM.

    • size
      É o tamanho inicial do arquivo.

      Quando size não for fornecido para o arquivo primário, o Mecanismo de Banco de Dados usará o tamanho do arquivo primário no banco de dados model. Quando um arquivo de dados ou de log secundário for especificado, mas size não for, o Mecanismo de Banco de Dados o transformará em um arquivo de 1 MB. O tamanho especificado para o arquivo primário deve ser, no mínimo, tão grande quanto o arquivo primário do banco de dados model.

      Os sufixos KB (quilobyte), MB (megabyte), GB (gigabyte) ou TB (terabyte) podem ser usados. O padrão é MB. Especifique um número inteiro. Não inclua um decimal. Size é um valor inteiro. Para valores maiores que 2147483647, use unidades maiores.

  • MAXSIZE max_size
    Especifica o tamanho máximo até o qual o arquivo pode crescer. MAXSIZE não pode ser especificado quando o os_file_name é especificado como um caminho UNC.

    • max_size
      É o tamanho máximo do arquivo. Os sufixos KB, MB, GB e TB podem ser usados. O padrão é MB. Especifique um número inteiro. Não inclua um decimal. Se max_size não for especificado, o arquivo crescerá até que o disco fique cheio. Max_size é um valor inteiro. Para valores maiores que 2147483647, use unidades maiores.
  • UNLIMITED
    Especifica que o arquivo crescerá até que o disco esteja cheio. No SQL Server, um arquivo de log especificado com crescimento ilimitado tem um tamanho máximo de 2 TB, e um arquivo de dados tem um tamanho máximo de 16 TB.

    ObservaçãoObservação

    Não há nenhum tamanho máximo quando essa opção é especificada para um contêiner FILESTREAM. Ele continua crescendo até que o disco esteja cheio.

  • FILEGROWTH growth_increment
    Especifica o incremento de crescimento automático do arquivo. A configuração de FILEGROWTH de um arquivo não pode exceder a configuração de MAXSIZE. FILEGROWTH não pode ser especificado quando o os_file_name é especificado como um caminho UNC. FILEGROWTH não se aplica a um grupo de arquivos FILESTREAM.

    • growth_increment
      É a quantidade de espaço adicionada ao arquivo sempre que novo espaço é necessário.

      O valor pode ser especificado em MB, KB, GB, TB ou porcentagem (%). Se um número estiver especificado sem um sufixo MB, KB ou %, o padrão será MB. Quando % está especificada, o tamanho do incremento de crescimento é a porcentagem especificada do tamanho do arquivo no momento em que ocorre o incremento. O tamanho especificado é arredondado para os 64 KB mais próximos.

      Um valor 0 indica que o crescimento automático está desativado e nenhum espaço adicional é permitido.

      Se FILEGROWTH não estiver especificado, o valor padrão será 1 MB para arquivos de dados e 10% para arquivos de log e o valor mínimo será 64 KB.

      ObservaçãoObservação

      No SQL Server, o incremento de crescimento padrão para arquivos de dados foi alterado de 10% para 1 MB. O padrão de 10% do arquivo de log permanece inalterado.

  • <grupo de arquivos>
    Controla as propriedades do grupo de arquivos. O grupo de arquivos não pode ser especificado em um instantâneo do banco de dados.

  • FILEGROUP filegroup_name
    É o nome lógico do grupo de arquivos.

    • filegroup_name
      O filegroup_name deve ser exclusivo no banco de dados e não pode ser os nomes PRIMARY e PRIMARY_LOG fornecidos pelo sistema. O nome pode ser um caractere ou constante Unicode ou um identificador normal ou delimitado. O nome deve estar de acordo com as regras de identificadores.

    • CONTAINS FILESTREAM
      Especifica que o grupo de arquivos armazena BLOBs (objetos binários grandes) FILESTREAM no sistema de arquivos.

    • DEFAULT
      Especifica que o grupo de arquivos nomeado é o grupo de arquivos padrão no banco de dados.

  • database_snapshot_name
    É o nome do novo instantâneo do banco de dados. Nomes de instantâneos de bancos de dados devem ser exclusivos dentro de uma instância do SQL Server e estar de acordo com as regras de identificadores. database_snapshot_name pode ter um máximo 128 caracteres.

  • ON ( NAME =logical_file_name, FILENAME ='os_file_name') [ ,... n ]
    Na criação de um instantâneo do banco de dados, especifica uma lista de arquivos no banco de dados de origem. Para que o instantâneo funcione, todos os arquivos de dados devem ser especificados individualmente. No entanto, arquivos de log não são permitidos para instantâneos do banco de dados. Os grupos de arquivos FILESTREAM não são suportados pelos instantâneos do banco de dados. Se um arquivo de dados FILESTREAM for incluído em uma cláusula CREATE DATABASE ON, a instrução falhará e um erro será gerado.

    Para obter descrições de NAME e FILENAME e seus valores, consulte as descrições dos valores equivalentes de <filespec>.

    ObservaçãoObservação

    Quando você cria um instantâneo do banco de dados, as outras opções de <filespec>e a palavra-chave PRIMARY não são permitidas.

  • AS SNAPSHOT OF source_database_name
    Especifica que o banco de dados que está sendo criado é um instantâneo do banco de dados de origem especificado por source_database_name. O instantâneo e o banco de dados de origem devem estar na mesma instância.

    Para obter mais informações, consulte "Instantâneos do banco de dados" na seção Comentários.

Comentários

O backup do banco de dados mestre deve ser feito sempre que um banco de dados de usuário for criado, modificado ou descartado.

A instrução CREATE DATABASE deve ser executada em modo de confirmação automática (o modo padrão de gerenciamento de transações) e não é permitida em uma transação explícita ou implícita.

Você pode usar uma instrução CREATE DATABASE para criar um banco de dados e os arquivos que armazenam o banco de dados. O SQL Server implementa a instrução CREATE DATABASE usando as seguintes etapas:

  1. O SQL Server usa uma cópia do banco de dados modelo para iniciar o banco de dados e seu metadados.

  2. Um GUID do agente de serviço é atribuído ao banco de dados.

  3. Em seguida, o Mecanismo de Banco de Dados preenche o restante do banco de dados com páginas vazias, exceto as páginas que têm dados internos que registram como o espaço é usado no banco de dados.

No máximo 32.767 bancos de dados podem ser especificados em uma instância do SQL Server.

Cada banco de dados tem um proprietário que pode executar atividades especiais no banco de dados. O proprietário é o usuário que cria o banco de dados. O proprietário do banco de dados pode ser alterado por meio de sp_changedbowner.

Arquivos e grupos de arquivos do banco de dados

Cada banco de dados possui no mínimo dois arquivos, um arquivo primário e um arquivo de log de transações e pelo menos um grupo de arquivos. Um máximo de 32.767 arquivos e 32.767 grupos de arquivos pode ser especificado para cada banco de dados.

Ao criar um banco de dados, torne os arquivos de dados tão grandes quanto possível, com base na quantidade máxima de dados que você espera ter no banco de dados

É recomendável usar uma rede SAN, uma rede baseada em iSCSI ou um disco conectado localmente para o armazenamento dos arquivos de banco de dados do SQL Server, pois essa configuração otimiza o desempenho e a confiabilidade do SQL Server.

Instantâneos do banco de dados

É possível usar a instrução CREATE DATABASE para criar uma exibição estática somente leitura, um instantâneo do banco de dados do banco de dados de origem. Um instantâneo do banco de dados é transacionalmente consistente com o banco de dados de origem pois existia no momento da criação do banco de dados. Um banco de dados de origem pode ter vários instantâneos.

ObservaçãoObservação

Quando você cria um instantâneo do banco de dados, a instrução CREATE DATABASE não pode fazer referência a arquivos de log, arquivos offline, arquivos de restauração e arquivos extintos.

Se a criação de um instantâneo do banco de dados falhar, o instantâneo se tornará suspeito e deverá ser excluído. Para obter mais informações, consulte DROP DATABASE (Transact-SQL).

Cada instantâneo persiste até que seja excluído usando DROP DATABASE.

Para obter mais informações, consulte Instantâneos de banco de dados (SQL Server).

Opções de banco de dados

Várias opções de banco de dados são automaticamente definidas sempre que você cria um banco de dados. Para obter uma lista dessas opções, consulte Opções ALTER DATABASE SET (Transact-SQL).

Banco de dados modelo e criação de novos bancos de dados

Todos os objetos definidos pelo usuário no banco de dados modelo são copiados para todos os bancos de dados recém-criados. É possível adicionar quaisquer objetos, como tabelas, exibições, procedimentos armazenados, tipos de dados, etc. ao banco de dados model para que sejam incluídos em todos os bancos de dados recém-criados.

Quando uma instrução CREATE DATABASE database_name é especificada sem parâmetros adicionais de tamanho, o arquivo de dados primário se torna do mesmo tamanho que o arquivo primário no banco de dados model.

A não ser que FOR ATTACH seja especificado, cada novo banco de dados herda as configurações de opções do banco de dados model. Por exemplo, a opção auto shrink é definida como true no banco de dados model e em todos os novos bancos de dados criados. Se você alterar as opções no banco de dados model, essas novas configurações de opções serão usadas em todos os novos bancos de dados criados. A alteração das operações no banco de dados model não afeta bancos de dados existentes. Se FOR ATTACH estiver especificado na instrução CREATE DATABASE, o novo banco de dados herdará as configurações de opções do banco de dados original.

Exibindo informações do banco de dados

É possível usar exibições do catálogo, funções do sistema e procedimentos armazenados do sistema para retornar informações sobre bancos de dados, arquivos e grupos de arquivos. Para obter mais informações, consulte exibições do sistema (Transact-SQL).

Permissões

Requer a permissão CREATE DATABASE, CREATE ANY DATABASE ou ALTER ANY DATABASE.

Para manter controle sobre o uso do disco em uma instância do SQL Server, a permissão para criar bancos de dados geralmente é limitada a algumas contas de logon.

Permissões em arquivos de dados e de log

Em SQL Server, determinadas permissões são definidas nos arquivos de dados e de log de cada banco de dados. As permissões a seguir são definidas sempre que as seguintes operações são aplicadas a um banco de dados:

Criado

Modificado para adicionar um novo arquivo

Anexado

Backup

Desanexado

Restaurado

As permissões evitam que os arquivos sejam violados acidentalmente caso residam em um diretório com permissões abertas.

ObservaçãoObservação

Microsoft O SQL Server 2005 Express Edition não define dados e permissões de arquivos de log.

Exemplos

A.Criando um banco de dados sem especificar arquivos

O exemplo a seguir cria o banco de dados mytest e os arquivos primário e de log de transações correspondentes. Como a instrução não tem nenhum item <filespec>, o arquivo de banco de dados primário é do tamanho do arquivo primário do banco de dados model. O log de transações é definido como o maior desses valores: 512KB ou 25% do tamanho do arquivo de dados primário. Como MAXSIZE não é especificado, os arquivos podem crescer até encher todo o espaço em disco disponível. Este exemplo de também demonstra como descartar um banco de dados denominado mytest, se ele existir, antes da criação do banco de dados 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.Criando um banco de dados que especifica os arquivos de dados e de log de transações

O exemplo a seguir cria o banco de dados Sales. Como a palavra-chave PRIMARY não é usada, o primeiro arquivo (Sales_dat) torna-se o arquivo primário. Como nem MB nem KB é especificado no parâmetro SIZE do arquivo Sales_dat, ele usa MB e é alocado em megabytes. O arquivo Sales_log é alocado em megabytes porque o sufixo MB é explicitamente declarado no parâmetro SIZE.

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

C.Criando um banco de dados especificando vários arquivos de dados e de log de transações

O exemplo a seguir cria o banco de dados Archive que tem três arquivos de dados de 100-MB e dois arquivos de log de transações de 100-MB. O arquivo primário é o primeiro arquivo da lista e é especificado explicitamente com a palavra-chave PRIMARY. Os arquivos de log de transações são especificados em seguida às palavras-chave LOG ON. Observe as extensões usadas para os arquivos da opção FILENAME: .mdf é usado para arquivos de dados primários, .ndf é usado para os arquivos de dados secundários, e .ldf é usado para arquivos de log de transações. Este exemplo coloca o banco de dados na unidade D: e não com o banco de dados 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.Criando um banco de dados que tem grupos de arquivos

O exemplo a seguir cria o banco de dados Sales que tem os seguintes grupos de arquivos:

  • O grupo de arquivos primário com os arquivos Spri1_dat e Spri2_dat. Os incrementos de FILEGROWTH desses arquivos são especificados como 15%.

  • Um grupo de arquivos denominado SalesGroup1 com os arquivos SGrp1Fi1 e SGrp1Fi2.

  • Um grupo de arquivos denominado SalesGroup2 com os arquivos SGrp2Fi1 e SGrp2Fi2.

Este exemplo coloca os dados e os arquivos de log em discos diferentes para melhorar o desempenho.

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.Anexando um banco de dados

O exemplo a seguir desanexa o banco de dados Archive criado no exemplo D e o anexa usando a cláusula FOR ATTACH. Archive foi definido para ter vários dados e arquivos de log. No entanto, como o local dos arquivos não foi alterado desde sua criação, apenas o arquivo primário precisa ser especificado na cláusula FOR ATTACH. A partir do SQL Server 2005, todos os arquivos de texto completo que fazem parte do banco de dados que está sendo anexado serão anexados com o banco de dados.

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

F.Criando um instantâneo do banco de dados

O exemplo a seguir cria o instantâneo do banco de dados sales_snapshot0600. Como um instantâneo do banco de dados é somente leitura, um arquivo de log não pode ser especificado. Em conformidade com a sintaxe, todo arquivo do banco de dados de origem é especificado e grupos de arquivos não são especificados.

O banco de dados de origem deste exemplo é o banco de dados Sales criado no exemplo 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.Criando um banco de dados e especificando um nome e opções de agrupamento

O exemplo a seguir cria o banco de dados MyOptionsTest. Um nome de agrupamento é especificado e as opções TRUSTYWORTHY e DB_CHAINING são definidas como 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.Anexando um catálogo de texto completo que foi movido

O exemplo a seguir anexa o catálogo de texto completo AdvWksFtCat junto com os arquivos de dados e de log do AdventureWorks2012. Neste exemplo, o catálogo de texto completo é movido de seu local padrão para um novo local c:\myFTCatalogs. Os arquivos de dados e de log permanecem em seus locais padrão.

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

I.Criando um banco de dados que especifica um grupo de arquivos de linha e dois grupos de arquivos FILESTREAM

O exemplo a seguir cria o banco de dados FileStreamDB. O banco de dados é criado com um grupo de arquivos de linha e dois grupos de arquivos FILESTREAM. Cada grupo de arquivos contém um arquivo:

  • FileStreamDB_data contém dados de linha. Ele contém um arquivo, FileStreamDB_data.mdf com o caminho padrão.

  • FileStreamPhotos contém dados FILESTREAM. Ele contém dois contêineres de dados FILESTREAM, FSPhotos, localizados em C:\MyFSfolder\Photos e FSPhotos2, localizado em D:\MyFSfolder\Photos. É marcado como o grupo de arquivos FILESTREAM padrão.

  • FileStreamResumes contém dados FILESTREAM. Ele contém um contêiner de dados FILESTREAM, FSResumes, localizado em C:\MyFSfolder\Resumes.

USE master;
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 and FILEGROWTH should not be specified here.
-- If they are specified an error will be raised.
, MAXSIZE = 5000 MB
    ),
    (
      NAME = FSPhotos2
      , FILENAME = ''D:\MyFSfolder\Photos''
      , MAXSIZE = 10000 MB
     ),
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

J.Criando um banco de dados que tem um grupo de arquivos FILESTREAM com vários arquivos

O exemplo a seguir cria o banco de dados BlobStore1. O banco de dados é criado com um grupo de arquivos de linha e um grupo de arquivos FILESTREAM, FS. O grupo de arquivos FILESTREAM contêm dois arquivos, FS1 e FS2. O banco de dados é alterado adicionando-se um terceiro arquivo, FS3, ao grupo de arquivos FILESTREAM.

USE [master]
GO

CREATE DATABASE [BlobStore1]
CONTAINMENT = NONE
ON PRIMARY 
( 
    NAME = N'BlobStore1', 
    FILENAME = N'C:\BlobStore\BlobStore1.mdf',
    SIZE = 100MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1MB
), 
FILEGROUP [FS] CONTAINS FILESTREAM DEFAULT 
(
    NAME = N'FS1',
    FILENAME = N'C:\BlobStore\FS1',
    MAXSIZE = UNLIMITED
), 
(
    NAME = N'FS2',
    FILENAME = N'C:\BlobStore\FS2',
    MAXSIZE = 100MB
)
LOG ON 
(
    NAME = N'BlobStore1_log',
    FILENAME = N'C:\BlobStore\BlobStore1_log.ldf',
    SIZE = 100MB,
    MAXSIZE = 1GB,
    FILEGROWTH = 1MB
)
GO

ALTER DATABASE [BlobStore1]
ADD FILE
(
    NAME = N'FS3',
    FILENAME = N'C:\BlobStore\FS3',
    MAXSIZE = 100MB
)
TO FILEGROUP [FS]
GO

Consulte também

Referência

ALTER DATABASE (Transact-SQL)

DROP DATABASE (Transact-SQL)

EVENTDATA (Transact-SQL)

sp_changedbowner (Transact-SQL)

sp_detach_db (Transact-SQL)

sp_removedbreplication (Transact-SQL)

Conceitos

Anexar e desanexar bancos de dados (SQL Server)

Instantâneos de banco de dados (SQL Server)

Bancos de dados

Dados de objeto binário grande (Blob) (SQL Server)

Outros recursos

Mover arquivos de banco de dados