CREATE DATABASE (Transact-SQL)

Crea un nuovo database e i file utilizzati per archiviare il database, crea uno snapshot del database oppure collega un database dai file scollegati di un database creato in precedenza.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • database_name
    Nome del nuovo database. I nomi dei database devono essere univoci all'interno di un'istanza di SQL Server ed essere conformi alle regole per gli identificatori.

    database_name può essere composto da un massimo di 128 caratteri, eccetto i casi in cui non è stato specificato un nome logico per il file di log. Se non è stato specificato un nome logico per il file di log, SQL Server genera logical_file_name e os_file_name per il log accodando un suffisso all'argomento database_name. Questo limita il numero di caratteri dell'argomento database_name a 123 per fare in modo che il nome di file logico generato includa un massimo di 128 caratteri.

    Se non viene specificato il nome del file di dati, SQL Server utilizza database_name sia per logical_file_name che per os_file_name. Il percorso predefinito viene ottenuto dal Registro di sistema. Il percorso predefinito può essere modificato tramite Proprietà server (pagina Impostazioni database) in Management Studio. La modifica del percorso predefinito richiede il riavvio di SQL Server.

  • ON
    Specifica che i file su disco utilizzati per archiviare le sezioni di dati del database (file di dati) vengono definiti in modo esplicito. ON è necessario quando seguito da un elenco delimitato da virgole di elementi <filespec> che definiscono i file di dati per il filegroup primario. L'elenco di file del filegroup primario può essere seguito da un elenco facoltativo delimitato da virgole di elementi <filegroup> che definiscono i filegroup utente e i relativi file.

  • PRIMARY
    Specifica che l'elenco <filespec> associato definisce il file primario. Il primo file specificato nella voce <filespec> nel filegroup primario diventa il file primario. Un database può includere un solo file primario. Per ulteriori informazioni, vedere Architettura di file e filegroup.

    Se la parola chiave PRIMARY viene omessa, il primo file elencato nell'istruzione CREATE DATABASE diventa il file primario.

  • LOG ON
    Specifica che i file su disco utilizzati per archiviare il log del database (file di log) vengono definiti in modo esplicito. LOG ON è seguito da un elenco delimitato da virgole di elementi <filespec> che definiscono i file di log. Se la parola chiave LOG ON viene omessa, viene creato automaticamente un singolo file di log con dimensioni pari al 25% della somma delle dimensioni di tutti i file di dati del database o pari a 512 KB, a seconda del valore maggiore. Questo file viene posizionato nel percorso predefinito del file log. Per informazioni su questo percorso, vedere Procedura: Visualizzare o modificare i percorsi predefiniti per i file di dati e di log (SQL Server Management Studio).

    Non è possibile specificare LOG ON in uno snapshot del database.

  • COLLATE collation_name
    Specifica le regole di confronto predefinite per il database. È possibile utilizzare nomi di regole di confronto di Windows o SQL. Se collation_name viene omesso, al database vengono assegnate le regole di confronto predefinite dell'istanza di SQL Server. Non è possibile specificare un nome di regole di confronto in uno snapshot del database.

    Non è possibile specificare un nome di regole di confronto con le clausole FOR ATTACH o FOR ATTACH_REBUILD_LOG. Per informazioni sulla modifica delle regole di confronto di un database collegato, visitare il sito Web Microsoft.

    Per ulteriori informazioni sui nomi delle regole di confronto di Windows e SQL, vedere COLLATE (Transact-SQL).

  • FOR ATTACH [ WITH <service_broker_option> ]
    Specifica che il database viene creato collegando un set di file del sistema operativo già esistente. È necessario che una voce dell'elenco <filespec> specifichi il file primario. Le altre voci <filespec> necessarie sono quelle relative ai file con percorso diverso rispetto al percorso utilizzato in fase di creazione del database o quando il database è stato scollegato. Per questi file è necessario specificare una voce <filespec>.

    FOR ATTACH richiede le seguenti condizioni:

    • Tutti i file di dati (MDF e NDF) devono essere disponibili.

    • Tutti i file di log esistenti devono essere disponibili.

    Se un database in lettura/scrittura contiene un singolo file di log attualmente non disponibile, e il database è stato chiuso senza utenti o transazioni aperte prima dell'operazione di collegamento, FOR ATTACH ricompila automaticamente il file di log e aggiorna il file primario. Per un database in sola lettura, invece, non è possibile ricostruire il log perché il file primario non può essere aggiornato. Quando si collega un database in sola lettura il cui log non è disponibile, è necessario pertanto specificare i file o i file di log nella clausola FOR ATTACH.

    Nota

    Un database creato con una versione più recente di SQL Server non può essere collegato in versioni precedenti. Per collegarsi a SQL Server 2008, la versione del database di origine deve essere almeno la 80 (SQL Server 2000). Per i database di SQL Server 2000 o SQL Server 2005 con un livello di compatibilità inferiore a 80, al momento del collegamento viene impostato il livello di compatibilità 80.

    In SQL Server tutti i file full-text inclusi nel database che viene collegato verranno collegati insieme al database. Per specificare un nuovo percorso per il catalogo full-text, specificare la nuova posizione senza il nome del file del sistema operativo full-text. Per ulteriori informazioni, vedere la sezione Esempi.

    Non è possibile specificare FOR ATTACH in uno snapshot del database.

    Se il database utilizza Service Broker, utilizzare WITH <service_broker_option> nella clausola FOR ATTACH:

    • <service_broker_option>
      Controlla il recapito dei messaggi di Service Broker e l'identificatore di Service Broker per il database. Le opzioni di Service Broker possono essere specificate solo quando è utilizzata la clausola FOR ATTACH.

      • ENABLE_BROKER
        Indica che Service Broker è abilitato per il database specificato. Viene pertanto avviato il recapito dei messaggi e is_broker_enabled è impostato su True nella vista del catalogo sys.databases. Il database mantiene l'identificatore di Service Broker esistente.

      • NEW_BROKER
        Crea un nuovo valore di service_broker_guid sia in sys.databases che nel database ripristinato e termina tutti gli endpoint di conversazione con l'eliminazione. Service Broker è abilitato, ma agli endpoint di conversazione remoti non viene inviato alcun messaggio. Tutte le route che fanno riferimento all'identificatore di Service Broker precedente devono essere ricreate con il nuovo identificatore.

      • ERROR_BROKER_CONVERSATIONS
        Termina tutte le conversazioni e restituisce un errore che indica che il database è collegato o ripristinato. Service Broker viene disabilitato fino al termine dell'operazione e quindi viene riabilitato. Il database mantiene l'identificatore di Service Broker esistente.

      Per ulteriori informazioni, vedere Gestione delle identità di Service Broker.

    Per informazioni sulle autorizzazioni per i file che vengono impostate quando un database viene collegato o scollegato, vedere Protezione dei dati e dei file di log.

    Quando si collega un database replicato copiato anziché scollegato, è necessario considerare quanto segue:

    • Se si collega il database alla stessa istanza del server e alla stessa versione del database originale, non sono necessari passaggi aggiuntivi.

    • Se si collega il database alla stessa istanza del server ma si utilizza una versione aggiornata, dopo il completamento dell'operazione di collegamento è necessario eseguire sp_vupgrade_replication per aggiornare la replica.

    • Se si collega il database a un'istanza del server diversa, indipendentemente dalla versione, dopo il completamento dell'operazione di collegamento è necessario eseguire sp_removedbreplication per rimuovere la replica.

      Nota

      Il collegamento supporta il formato di archiviazione vardecimal, ma è necessario aggiornare il Motore di database di SQL Server almeno a SQL Server 2005 Service Pack 2. Non è possibile collegare un database con un formato di archiviazione vardecimal a una versione precedente di SQL Server. Per ulteriori informazioni sul formato di archiviazione vardecimal, vedere Archiviazione di dati decimal come lunghezza variabile.

    Per informazioni su come aggiornare un database tramite il collegamento, vedere Procedura: Aggiornamento di un database utilizzando le operazioni di scollegamento e collegamento (Transact-SQL).

    Nota sulla sicurezzaNota sulla sicurezza

    È consigliabile non collegare database da origini sconosciute o non attendibili. Tali database possono contenere codice dannoso che potrebbe eseguire codice Transact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica di database. Prima di utilizzare un database da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB sul database in un server non di produzione ed esaminare il codice, ad esempio le stored procedure o altro codice definito dall'utente, nel database.

  • FOR ATTACH_REBUILD_LOG
    Specifica che il database viene creato collegando un set di file del sistema operativo già esistente. Questa opzione è limitata ai database in lettura/scrittura. È necessario che una voce dell'elenco <filespec> specifichi il file primario. Se uno o più file di log delle transazioni sono mancanti, il file di log viene ricostruito. Il log ATTACH_REBUILD_LOG crea automaticamente un nuovo file log da 1 MB. Questo file viene posizionato nel percorso predefinito del file log. Per informazioni su questo percorso, vedere Procedura: Visualizzare o modificare i percorsi predefiniti per i file di dati e di log (SQL Server Management Studio).

    Nota

    Se i file di log sono disponibili, Motore di database utilizzerà questi file invece di ricompilare i file di log.

    FOR ATTACH_REBUILD_LOG richiede le seguenti condizioni:

    • Una chiusura normale del database.

    • Tutti i file di dati (MDF e NDF) devono essere disponibili.

    Nota importanteImportante

    Questa operazione interrompe la catena di backup del log. È consigliabile eseguire un backup completo del database al termine dell'operazione. Per ulteriori informazioni, vedere BACKUP (Transact-SQL).

    In genere, l'opzione FOR ATTACH_REBUILD_LOG viene utilizzata quando si copia un database in lettura/scrittura con un log di grandi dimensioni in un altro server dove la copia verrà utilizzata principalmente, o esclusivamente, per operazioni di lettura e richiederà quindi una quantità minore di spazio di log rispetto al database originale.

    Non è possibile specificare FOR ATTACH_REBUILD_LOG in uno snapshot del database.

    Per ulteriori informazioni su come collegare e scollegare i database, vedere Scollegamento e collegamento di database.

  • <filespec>
    Controlla le proprietà del file.

  • NAME logical_file_name
    Specifica il nome logico per il file. Il parametro NAME è necessario quando FILENAME è specificato, eccetto quando viene specificata una delle clausole FOR ATTACH. Non è possibile assegnare il nome PRIMARY a un filegroup FILESTREAM.

    • logical_file_name
      Nome logico utilizzato in SQL Server per fare riferimento al file. Logical_file_name deve essere univoco all'interno del database e conforme alle regole per gli identificatori. Il nome può essere un carattere o una costante Unicode oppure un identificatore normale o delimitato.
  • FILENAME { 'os_file_name' | 'filestream_path' }
    Specifica il nome del file (fisico) del sistema operativo.

    • 'os_file_name'
      Percorso e nome di file utilizzato dal sistema operativo quando si crea il file. Il file deve risiedere in uno dei dispositivi seguenti: il server locale in cui è installato SQL Server, una rete di archiviazione (SAN) o una rete basata su iSCSI. Il percorso specificato deve essere esistente prima dell'esecuzione dell'istruzione CREATE DATABASE. Per ulteriori informazioni, vedere "Filegroup e file di database" nella sezione Osservazioni.

      Non è possibile impostare i parametri SIZE, MAXSIZE e FILEGROWTH se è specificato un percorso UNC per il file.

      Se il file si trova in una partizione non formattata dal sistema operativo, nell'argomento os_file_name è necessario specificare solo la lettera dell'unità di una partizione non formattata esistente. È possibile creare soltanto un file di dati su ogni partizione non formattata dal sistema operativo.

      I file di dati non devono essere archiviati in file system compressi a meno che non si tratti di file secondari in sola lettura o il database non sia in sola lettura. I file di log non devono mai essere archiviati in file system compressi. Per ulteriori informazioni, vedere Filegroup di sola lettura e compressione.

    • 'filestream_path'
      Per un filegroup FILESTREAM, FILENAME si riferisce a un percorso in cui verrà archiviato FILESTREAM. È necessario che il percorso fino all'ultima cartella esista già, mentre l'ultima cartella non deve essere presente. Se, ad esempio, si specifica il percorso C:\MyFiles\MyFilestreamData, C:\MyFiles deve esistere già prima di eseguire ALTER DATABASE, mentre la cartella MyFilestreamData non deve essere presente.

      Il filegroup e il file (<filespec>) devono essere creati nella stessa istruzione. Può essere presente un solo file, <filespec>, per un filegroup FILESTREAM.

      Le proprietà SIZE, MAXSIZE e FILEGROWTH non si applicano a un filegroup FILESTREAM.

  • SIZE size
    Specifica le dimensioni del file.

    Non è possibile specificare SIZE quando os_file_name è specificato come percorso UNC. SIZE non si applica a un filegroup FILESTREAM.

    • size
      Dimensioni iniziali del file.

      Quando size viene omesso per il file primario, il Motore di database utilizza le dimensioni del file primario nel database model. Quando viene specificato un file di log o un file di dati secondario ma non si specifica size per il file, Motore di database crea un file di 1 MB. Le dimensioni specificate per il file di dati primario devono essere uguali almeno alle dimensioni del file primario del database model.

      È possibile utilizzare i suffissi per kilobyte (KB), megabyte (MB), gigabyte (GB) e terabyte (TB). Il valore predefinito è MB. Specificare un numero intero, senza includere decimali. Size è un valore intero. Per i valori superiori a 2.147.483.647, utilizzare le unità maggiori.

  • MAXSIZE max_size
    Valore massimo fino a cui possono aumentare le dimensioni del file. Non è possibile specificare MAXSIZE quando os_file_name è specificato come percorso UNC. MAXSIZE non si applica a un filegroup FILESTREAM.

    • max_size
      Dimensioni massime del file. È possibile utilizzare i suffissi KB, MB, GB e TB. Il valore predefinito è MB. Specificare un numero intero, ovvero non includere decimali. Se non si specifica max_size, le dimensioni del file aumentano fino a quando il disco non è pieno. Max_size è un valore intero. Per i valori superiori a 2.147.483.647, utilizzare le unità maggiori.
  • UNLIMITED
    Specifica che le dimensioni del file aumentano fino a quando il disco risulta pieno. In SQL Server un file di log specificato con aumento delle dimensioni illimitato può raggiungere una dimensione massima di 2 TB, mentre un file di dati può raggiungere una dimensione massima di 16 TB.

  • FILEGROWTH growth_increment
    Specifica l'incremento automatico per l'aumento delle dimensioni del file. Il valore impostato per il parametro FILEGROWTH di un file non può essere superiore al valore del parametro MAXSIZE. Non è possibile specificare FILEGROWTH quando os_file_name è specificato come percorso UNC. FILEGROWTH non si applica a un filegroup FILESTREAM.

    • growth_increment
      Quantità di spazio aggiunta al file ogni volta che è necessario spazio aggiuntivo.

      È possibile specificare il valore in megabyte (MB), kilobyte (KB), gigabyte (GB) o terabyte (TB) oppure in forma di percentuale (%). Se si specifica un valore senza il suffisso MB, KB o %, il suffisso predefinito è MB. Se si utilizza il suffisso %, l'incremento corrisponde alla percentuale delle dimensioni del file specificata quando si verifica l'incremento. Le dimensioni specificate vengono arrotondate al blocco di 64 KB più prossimo.

      Un valore 0 indica che l'opzione per l'aumento automatico è disattivata e non è consentito spazio aggiuntivo.

      Se FILEGROWTH viene omesso, il valore predefinito è 1 MB per i file di dati e 10% per i file di log e il valore minimo è 64 KB.

      Nota

      In SQL Server l'incremento predefinito per l'aumento delle dimensioni del file è passato dal 10% a 1 MB. Il valore predefinito per il file di log è rimasto invariato al 10%.

  • <filegroup>
    Controlla le proprietà del filegroup. Non è possibile specificare il filegroup in uno snapshot del database.

  • FILEGROUP filegroup_name
    Nome logico del filegroup.

    • filegroup_name
      filegroup_name deve essere univoco nel database e deve essere diverso dai nomi forniti dal sistema PRIMARY e PRIMARY_LOG. Il nome può essere un carattere o una costante Unicode oppure un identificatore normale o delimitato. Il nome deve essere conforme alle regole per gli identificatori.

    • CONTAINS FILESTREAM
      Specifica che tramite il filegroup vengono archiviati oggetti binari di grandi dimensioni (BLOB) nel file system.

    • DEFAULT
      Indica che il filegroup specificato è il filegroup predefinito nel database.

  • <external_access_option>
    Controlla l'accesso esterno al database e dal database.

    • DB_CHAINING { ON | OFF }
      Se l'opzione è impostata su ON, il database può essere l'origine o la destinazione di concatenazione della proprietà tra database.

      Se l'opzione è impostata su OFF, il database non può partecipare al concatenamento della proprietà tra database. Il valore predefinito è OFF.

      Nota importanteImportante

      Questa impostazione viene riconosciuta dall'istanza di SQL Server quando l'opzione del server cross db ownership chaining è impostata su 0 (OFF). Quando cross db ownership chaining è 1 (ON), tutti i database utente possono partecipare ai concatenamenti della proprietà tra database, a prescindere dal valore di questa opzione. Questa opzione viene impostata tramite sp_configure.

      Per impostare questa opzione è necessario appartenere al ruolo predefinito del server sysadmin. L'opzione DB_CHAINING non può essere impostata in questi database di sistema: master, model, tempdb.

      Per ulteriori informazioni, vedere Catene di proprietà.

    • TRUSTWORTHY { ON | OFF }
      Se l'opzione è impostata su ON, i moduli del database (ad esempio le viste, le funzioni definite dall'utente o le stored procedure) che utilizzano un contesto di rappresentazione possono accedere alle risorse esterne al database.

      Se l'opzione è impostata su OFF, i moduli del database in un conteso di rappresentazione non possono accedere alle risorse esterne al database. Il valore predefinito è OFF.

      L'opzione TRUSTWORTHY viene impostata su OFF ogni volta che il database viene collegato.

      Per impostazione predefinita, in tutti i database di sistema, a eccezione del database msdb, TRUSTWORTHY è impostato su OFF. Per i database model e tempdb, questo valore non può essere modificato. È consigliabile evitare di impostare l'opzione TRUSTWORTHY su ON nel database master.

      Per impostare questa opzione è necessario appartenere al ruolo predefinito del server sysadmin.

  • database_snapshot_name
    Nome del nuovo snapshot del database. I nomi degli snapshot del database devono essere univoci in un'istanza di SQL Server ed essere conformi alle regole per gli identificatori. database_snapshot_name può essere composto da un massimo di 128 caratteri.

  • ON ( NAME =logical_file_name, FILENAME = 'os_file_name') [ ,... n ]
    Per la creazione di uno snapshot del database, specifica un elenco di file nel database di origine. Per il funzionamento dello snapshot, è necessario specificare tutti i file di dati singolarmente. I file di log non sono tuttavia consentiti per gli snapshot del database. I filegroup FILESTREAM non sono supportati dagli snapshot del database. Se un file di dati FILESTREAM è incluso in una clausola CREATE DATABASE ON, l'istruzione non verrà eseguita e sarà generato un errore.

    Per le descrizioni di NAME e FILENAME e i rispettivi valori, vedere le descrizioni dei valori <filespec> equivalenti.

    Nota

    Quando si crea uno snapshot del database, le altre opzioni <filespec> e la parola chiave PRIMARY non sono consentite.

  • AS SNAPSHOT OF source_database_name
    Specifica che il database in fase di creazione è uno snapshot del database di origine specificato da source_database_name. Lo snapshot e il database di origine devono essere archiviati nella stessa istanza.

    Per ulteriori informazioni, vedere "Snapshot di database" nella sezione Osservazioni.

Osservazioni

Il backup del database master dovrebbe essere eseguito ogni volta che si crea, si modifica o si elimina un database utente.

L'istruzione CREATE DATABASE deve essere eseguita in modalità autocommit, la modalità predefinita per la gestione delle transazioni, e non è consentita in una transazione esplicita o implicita. Per ulteriori informazioni, vedere Transazioni con autocommit.

È possibile utilizzare un'istruzione CREATE DATABASE per creare un database e i file che archiviano il database. SQL Server implementa l'istruzione CREATE DATABASE utilizzando i passaggi seguenti:

  1. SQL Server utilizza una copia del database modello per inizializzare il database e i relativi metadati.

  2. Un GUID di Service Broker viene assegnato al database.

  3. Motore di database compila quindi la parte rimanente del database con pagine vuote, ad eccezione delle pagine con dati interni che registrano la modalità di utilizzo dello spazio nel database. Per ulteriori informazioni, vedere Inizializzazione di file di database.

In un'istanza di SQL Server è possibile specificare al massimo 32.767 database.

Ogni database ha un proprietario che può eseguire attività particolari nel database. Il proprietario è l'utente che crea il database. Il proprietario del database può essere modificato utilizzando sp_changedbowner.

Filegroup e file di database

Ogni database ha almeno 2 file, un file primario e un file del log delle transazioni e almeno un filegroup. Per ogni database è possibile specificare un massimo di 32.767 file e 32.767 filegroup. Per ulteriori informazioni, vedere Architettura di file e filegroup.

Durante la creazione di un database, creare file di dati di dimensioni corrispondenti alla quantità massima di dati che si prevede di includere nel database. Per ulteriori informazioni, vedere Utilizzo di file e filegroup per la gestione dell'aumento delle dimensioni del database.

Per l'archiviazione dei file di database di SQL Server è consigliabile utilizzare una rete di archiviazione (SAN), una rete basata su iSCSI o un disco collegato localmente, poiché questa configurazione ottimizza le prestazioni e l'affidabilità di SQL Server.

Snapshot di database

È possibile utilizzare l'istruzione CREATE DATABASE per creare una vista statica in sola lettura, uno snapshot del database di un database esistente, il database di origine. Uno snapshot del database è consistente dal punto di vista transazionale con il database di origine al momento della creazione dello snapshot. Un database di origine può avere più snapshot.

Nota

Quando si crea uno snapshot di database, l'istruzione CREATE DATABASE non può far riferimento a file di log, file offline, file di ripristino e file inattivi.

Se la creazione di uno snapshot di database ha esito negativo, lo snapshot diventa sospetto e deve essere eliminato. Per ulteriori informazioni, vedere DROP DATABASE (Transact-SQL).

Ogni snapshot viene mantenuto fino a quando non viene eliminato tramite DROP DATABASE.

Per ulteriori informazioni, vedere Snapshot del database e Limitazioni e requisiti degli snapshot del database.

Opzioni del database

Quando si crea un database, vengono impostate automaticamente diverse opzioni. Per un elenco di queste opzioni e delle relative impostazioni, vedere Impostazione delle opzioni di database. È possibile modificare queste opzioni tramite l'istruzione ALTER DATABASE.

Database model e creazione di nuovi database

Gli oggetti definiti dall'utente inclusi nel database model vengono copiati in tutti i nuovi database. È possibile aggiungere al database model qualsiasi oggetto che si desidera includere in tutti i database appena creati, ad esempio tabelle, viste, stored procedure, tipi di dati e così via.

Quando si specifica un'istruzione CREATE DATABASE database_name senza parametri delle dimensioni aggiuntivi, per il file di dati primario vengono utilizzate le dimensioni del file primario nel database model.

A meno che non si specifichi FOR ATTACH, ogni nuovo database eredita le impostazioni delle opzioni di database dal database model. Ad esempio, l'opzione di database auto shrink viene impostata su true nel database model e in tutti i nuovi database creati. Se si modificano le opzioni nel database model, queste nuove impostazioni vengono utilizzate in tutti i nuovi database creati. La modifica delle operazioni nel database model non ha effetto sui database esistenti. Se viene specificata l'opzione FOR ATTACH nell'istruzione CREATE DATABASE, i nuovi database ereditano le impostazioni delle opzioni di database dal database originale.

Visualizzazione delle informazioni sui database

Per restituire informazioni su database, file e filegroup, è possibile utilizzare viste del catalogo, funzioni di sistema e stored procedure di sistema. Per ulteriori informazioni, vedere Visualizzazione dei metadati dei database.

Autorizzazioni

È necessario disporre dell'autorizzazione CREATE DATABASE, CREATE ANY DATABASE o ALTER ANY DATABASE.

Per mantenere il controllo sull'utilizzo del disco per un'istanza di SQL Server, l'autorizzazione per la creazione dei database è in genere limitata a pochi account di accesso.

Autorizzazioni per i file di dati e di log

In SQL Server vengono impostate autorizzazioni specifiche per i file di dati e di log in ogni database. Le autorizzazioni seguenti vengono impostate quando le operazioni elencate di seguito vengono eseguite in un database.

Creazione

Modifica per l'aggiunta di un nuovo file

Collegamento

Esecuzione del backup

Scollegamento

Ripristino

Le autorizzazioni consentono di evitare che vengano accidentalmente alterati i file che si trovano in una directory con autorizzazioni aperte. Per ulteriori informazioni, vedere Protezione dei dati e dei file di log.

Nota

In Microsoft SQL Server 2005 Express Edition non vengono impostate autorizzazioni per i file di dati e di log.

Esempi

A. Creazione di un database senza specificare i file

Nell'esempio seguente viene creato il database mytest insieme al file di log delle transazioni e al file primario corrispondenti. Poiché nell'istruzione non è specificata alcun elemento <filespec>, le dimensioni del file di database primario corrispondono a quelle del file primario del database model. Il file di log delle transazioni viene impostato sul valore più grande tra 512 KB o il 25% delle dimensioni del file di dati primario. Poiché MAXSIZE non è specificato, le dimensioni dei file possono aumentare fino a riempire lo spazio disponibile su disco. In questo esempio viene inoltre illustrato come eliminare l'eventuale database denominato mytest prima di creare il database 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

A. Creazione di un database che specifica i file di dati e i file di log delle transazioni

Nell'esempio seguente viene creato il database Sales. Dato che la parola chiave PRIMARY non è specificata, il primo file, ovvero Sales_dat, corrisponde al file primario. Poiché nel parametro SIZE non viene specificato il suffisso MB o KB per le dimensioni del file Sales_dat, viene utilizzato MB e le dimensioni del file vengono allocate in megabyte. Le dimensioni del file Sales_log vengono allocate in megabyte perché nel parametro SIZE è stato specificato in modo esplicito il suffisso MB.

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

B. Creazione di un database specificando più file di dati e più file di log delle transazioni

Nell'esempio seguente viene creato il database Archive che include tre file di dati da 100-MB e due file del log delle transazioni da 100-MB. Il file primario è il primo file dell'elenco e viene specificato in modo esplicito con la parola chiave PRIMARY. I file di log delle transazioni vengono specificati dopo le parole chiave LOG ON. Si notino le estensioni utilizzate per i file nell'opzione FILENAME: .mdf per i file di dati primari, .ndf per i file di dati secondari e .ldf per i file di log delle transazioni. In questo esempio il database viene collocato nell'unità D anziché con il database 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. Creazione di un database con filegroup

Nell'esempio seguente viene creato il database Sales che include i filegroup seguenti:

  • Il filegroup primario con i file Spri1_dat e Spri2_dat. Gli incrementi specificati nel parametro FILEGROWTH per tali file corrispondono al 15%.

  • Un filegroup SalesGroup1 con i file SGrp1Fi1 e SGrp1Fi2.

  • Un filegroup SalesGroup2 con i file SGrp2Fi1 e SGrp2Fi2.

In questo esempio i file di dati e di log vengono collocati in dischi diversi al fine di migliorare le prestazioni.

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. Collegamento di un database

Nell'esempio seguente il database Archive creato nell'esempio D viene scollegato e quindi collegato tramite la clausola FOR ATTACH. La definizione di Archive include più file di dati e di log. Tuttavia, poiché il percorso dei file non è stato modificato dopo la creazione, deve essere specificato solo il file primario nella clausola FOR ATTACH. A partire da SQL Server 2005, tutti i file full-text inclusi nel database in fase di collegamento verranno collegati assieme al database.

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

F. Creazione di uno snapshot del database

Nell'esempio seguente viene creato lo snapshot di database sales_snapshot0600. Poiché uno snapshot di database è in sola lettura, non è possibile specificare un file di log. In conformità con la sintassi, viene specificato ogni file nel database di origine, mentre i filegroup non vengono specificati.

Il database di origine per questo esempio è il database Sales creato nell'esempio 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. Creazione di un database e specifica di un nome delle regole di confronto e delle opzioni

Nell'esempio seguente viene creato il database MyOptionsTest. Viene specificato un nome delle regole di confronto e le opzioni TRUSTYWORTHY e DB_CHAINING vengono impostate su 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. Collegamento di un catalogo full-text che è stato spostato

Nell'esempio seguente viene collegato il catalogo full-text AdvWksFtCat insieme ai file di log e di dati AdventureWorks2008R2. In questo esempio, il catalogo full-text viene spostato dalla posizione predefinita in una nuova posizione c:\myFTCatalogs. I file di dati e di log rimangono nelle posizioni predefinite.

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

I. Creazione di un database che specifica un filegroup di righe e due filegroup FILESTREAM

Nell'esempio seguente viene creato il database FileStreamDB. Il database viene creato con un filegroup di righe e due filegroup FILESTREAM. Ogni filegroup contiene un file:

  • FileStreamDB_data contiene dati delle righe. Contiene un file, FileStreamDB_data.mdf, con il percorso predefinito.

  • FileStreamPhotos contiene dati FILESTREAM. Contiene un contenitore di dati FILESTREAM, FSPhotos, che si trova in C:\MyFSfolder\Photos. È contrassegnato come filegroup FILESTREAM predefinito.

  • FileStreamResumes contiene dati FILESTREAM. Contiene un contenitore di dati FILESTREAM, FSResumes, che si trova in 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