CREATE DATABASE (Transact-SQL)

Cria um novo banco de dados e os arquivos usados para armazená-lo, cria um instantâneo do 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ópicoConvenções de sintaxe Transact-SQL

Sintaxe

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
    É 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 nome de arquivo de log lógico não estiver especificado, o SQL Server gerará logical_file_name e os_file_name para o log acrescentando um sufixo a database_name. Isso limita database_name a 123 caracteres de forma que o nome de 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 do Banco de dados) em Management Studio. A alteração do caminho padrão requer o reinício do SQL Server.

  • ON
    Especifica que os arquivos em disco usados para armazenar as seções do banco de dados, os arquivos de dados, são 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 Arquitetura de arquivos e grupos de arquivos.

    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% da soma dos tamanhos de todos os arquivos de dados do banco de dados ou 512 KB, o que for maior. 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 o site da Microsoft.

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

  • FOR ATTACH
    Especifica que o banco de dados é criado anexando 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 esses arquivos.

    FOR ATTACH requer 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 cujo log não está disponível, você deve fornecer os arquivos de log ou 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 pelo menos versão 80 (SQL Server 2000) para que seja anexado ao SQL Server 2008. Bancos de dados do SQL Server 2000 ou SQL Server 2005 com um nível de compatibilidade inferior a 80 serão definidos como compatibilidade 80 quando forem 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.

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

    Observação sobre segurançaObservaçã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 um código Transact-SQL inesperado 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.

    Para obter mais informações sobre como anexar ou desanexar bancos de dados, consulte Desanexando e anexando bancos de dados.

    ObservaçãoObservação

    Se o banco de dados usar o Service Broker, consulte também <service_broker_option>.

    Para obter informações sobre permissões de arquivo que são definidas sempre que um banco de dados é desanexado e anexado, consulte Protegendo dados e arquivos de log.

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

    • Se você anexar o banco de dados à mesma instância e versão de servidor como 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ê deverá 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 Armazenando dados decimais como comprimento variável.

    Para obter informações sobre como atualizar um banco de dados usando anexação, consulte Como atualizar um banco de dados utilizando Desanexar e Anexar (Transact-SQL).

  • FOR ATTACH_REBUILD_LOG
    Especifica que o banco de dados é criado anexando um conjunto existente de arquivos do sistema operacional. Essa opção é limitada a bancos de dados de leitura/gravação. Se um ou mais arquivos de log de transações estiverem ausentes, o arquivo de log será reconstruído. Deve haver uma entrada <filespec> que especifique o arquivo primário.

    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 requer 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, precisará de 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 Desanexando e anexando bancos de dados.

  • <filespec>
    Controla as propriedades do arquivo.

  • NAME logical_file_name
    Especifica o nome lógico do arquivo. NAME é requerido 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 o SQL Server está instalado, uma rede de área de armazenamento [SAN] ou em 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 não 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 deve 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. Para obter mais informações, consulte Grupos de arquivos somente leitura e compactação.

    • '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. Pode haver apenas um arquivo, <filespec>, para um grupo de arquivos FILESTREAM.

      As propriedades SIZE, MAXSIZE 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 secundário ou arquivo de log estiver especificado, mas size não estiver, 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. MAXSIZE não se aplica a um grupo de arquivos FILESTREAM.

    • 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 estiver 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.

  • 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á de 1 MB para arquivos de dados e 10% para arquivos de log e o valor mínimo será de 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.

  • <filegroup>
    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.

  • <external_access_option>
    Controla o acesso externo ao banco de dados e do banco de dados.

    • DB_CHAINING { ON | OFF }
      Quando ON estiver especificado, o banco de dados poderá ser a origem ou o destino de uma cadeia 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 usando 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 nesses bancos de dados do sistema: master, model, tempdb.

      Para obter mais informações, consulte Cadeias de propriedade.

    • TRUSTWORTHY { ON | OFF }
      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 é definido como OFF sempre que o banco de dados está 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.

  • <service_broker_option>
    Controla opções do Service Broker no banco de dados.

    As opções do Service Broker podem ser especificadas apenas quando a cláusula FOR ATTACH é usada.

    • ENABLE_BROKER
      Especifica que o Service Broker está habilitado para o banco de dados especificado. Ou seja, is_broker_enabled é definido como verdadeiro na exibição do catálogo e quando a entrega de mensagens é iniciada em sys.databases.

    • 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ção com limpeza. O agente está habilitado, mas nenhuma mensagem é enviada aos pontos de extremidade de conversação remotos.

    • ERROR_BROKER_CONVERSATIONS
      Encerra todas as conversações 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.

  • database_snapshot_name
    É o nome do novo instantâneo do banco de dados. Os nomes de instantâneos do banco de dados devem ser exclusivos dentro de uma instância do SQL Server e estar de acordo com as regras de identificadores. O database_snapshot_name pode conter um máximo de 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.

    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. Para obter mais informações, consulte Transações de confirmação automática.

É possível 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. Para obter mais informações, consulte Inicialização de arquivos de bancos 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 usando sp_changedbowner.

Arquivos e grupos de arquivos do banco de dados

Cada banco de dados tem 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. Para obter mais informações, consulte Arquitetura de arquivos e grupos de arquivos.

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. Para obter mais informações, consulte Usando arquivos e grupos de arquivos para gerenciar o crescimento do banco de dados.

É recomendável usar uma rede de área de armazenamento (SAN), rede baseada em iSCSI ou disco conectado localmente para o armazenamento dos arquivos do banco de dados do SQL Server, porque essa configuração otimiza o desempenho e a confiabilidade do SQL Server. Por padrão, o uso de arquivos do banco de dados em rede (armazenados em um servidor em rede ou armazenamento conectado à rede) não é habilitado para o SQL Server. No entanto, é possível criar um banco de dados que tem arquivos do banco de dados baseados em rede usando o sinalizador de rastreamento 1807. Para obter informações sobre este sinalizador de rastreamento e considerações importantes sobre desempenho e manutenção, consulte este Microsoft Web site.

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 de um banco de dados existente, o banco de dados de origem. Um instantâneo do banco de dados é transacionalmente consistente com o banco de dados de origem como 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 do Banco de Dados.

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 e suas configurações padrão, consulte Definindo opções do banco de dados. Essas opções podem ser modificadas usando a instrução ALTER DATABASE.

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 for especificada sem parâmetros adicionais de tamanho, o arquivo de dados primário ficará 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 Exibindo metadados do banco de dados.

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 de 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

No 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. Para obter mais informações, consulte Protegendo dados e arquivos de log.

ObservaçãoObservação

O MicrosoftSQL Server 2005 Express Edition não define permissões de arquivos de dados e 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 destes valores: 512 KB 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 mostra 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) se torna 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\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. 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 na opção FILENAME: .mdf é usado para arquivos de dados primários, .ndf para arquivos de dados secundários e .ldf 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, em seguida, anexa-o usando a cláusula FOR ATTACH. Archive foi definido para ter vários arquivos de dados e 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 AdventureWorks. 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 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. 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 um contêiner de dados FILESTREAM, FSPhotos, localizado em C:\MyFSfolder\Photos. É marcado como o grupo de arquivos FILESTREAM padrão.

  • FileStreamResumes contém dados FILESTREAM. Ele tem um contêiner de dados FILESTREAM, FSResumes, localizado em 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