CREATE DATABASE (Transact-SQL)

Data aggiornamento: 12 dicembre 2006

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' 
        [ , 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 [ 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 il nome del file di dati viene omesso, SQL Server utilizza database_name sia per logical_file_name che per os_file_name.

  • 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 File e filegroup fisici del database.

    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. 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
    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 ricostruisce 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.

    In SQL Server 2005, i file full-text inclusi nel database in fase di collegamento verranno collegati assieme 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.

    ms176061.security(it-it,SQL.90).gifNota sulla protezione:
    È 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 inoltre il codice nel database, ad esempio stored procedure o altro codice definito dall'utente.

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

    [!NOTA] Se il database utilizza Service Broker, vedere anche <service_broker_option>.

    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 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 Motore di database di SQL Server almeno a SQL Server 2005 Service Pack 2. Non è possibile collegare un database compresso di Service Pack 2 a una versione precedente di SQL Server. Per ulteriori informazioni sul formato di archiviazione vardecimal, vedere Archiviazione di dati decimal come lunghezza variabile.

  • FOR ATTACH_REBUILD_LOG
    Specifica che un database viene creato collegando un set di file del sistema operativo già esistente. Questa opzione è limitata ai database in lettura/scrittura. Se uno o più file di log delle transazioni sono mancanti, il file di log viene ricostruito. È necessario che una voce dell'elenco <filespec> specifichi il file primario.

    [!NOTA] Se i file di log sono disponibili, Motore di database utilizzerà questi file invece di ricostruire 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.
    ms176061.note(it-it,SQL.90).gifImportante:
    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.

    • 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 essere 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'
    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.

  • SIZE size
    Specifica le dimensioni del file.

    Non è possibile specificare SIZE quando os_file_name è specificato come percorso UNC.

    • size
      Dimensioni iniziali del file.

      Quando size viene omesso per il file primario, 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, ovvero non includere decimali. size è un valore integer. 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.

    • 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 risulta pieno. max_size è un valore integer. 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 2005, 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.

    • 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 2005, l'incremento per l'aumento delle dimensioni del file predefinito è 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.
    • 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 concatenamento 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.

      ms176061.note(it-it,SQL.90).gifImportante:
      L'istanza di SQL Server riconosce questa impostazione quando l'opzione server cross db ownership chaining è 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 è richiesta l'appartenenza 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 è impostata su OFF ogni qual volta viene collegato il database.

      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 è richiesta l'appartenenza al ruolo predefinito del server sysadmin.

  • <service_broker_option>
    Controlla le opzioni relative a Service Broker nel database.

    Le opzioni relative a Service Broker possono essere specificate soltanto quando viene utilizzata la clausola FOR ATTACH.

    • ENABLE_BROKER
      Indica che Service Broker è attivato per il database specificato. ovvero is_broker_enabled è impostato su True nella vista del catalogo sys.databases e viene avviato il recapito dei messaggi.
    • 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 è attivato, ma agli endpoint di conversazione remoti non viene inviato alcun messaggio.
    • ERROR_BROKER_CONVERSATIONS
      Termina tutte le conversazioni e restituisce un errore che indica che il database è collegato o ripristinato. Service Broker viene disattivato fino al termine dell'operazione e quindi viene riattivato.
  • 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.

    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 una istruzione CEATE DATABASE per creare un database e i file che archiviano il database. SQL Server implementa l'istruzione CREATE DATABASE utilizzando i passaggi seguenti:

  1. Motore di database di SQL Server 2005 utilizza una copia del database model 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. È possibile modificare il proprietario del database tramite la procedura sp_changedbowner (Transact-SQL).

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 File e filegroup fisici del database.

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. Per impostazione predefinita, l'utilizzo di file di database in rete (archiviati in un server di rete o in un archivio collegato alla rete) non è abilitato per SQL Server. È tuttavia possibile creare un database che include file di database in rete utilizzando il flag di traccia 1807. Per informazioni su questo flag di traccia e considerazioni importanti sulle prestazioni e sulla manutenzione, vedere questo sito Web Microsoft.

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 non in linea, 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.

Opzioni di 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 2005 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] Microsoft In 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 alcuna voce <filespec>, le dimensioni del file primario del database 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.

USE master;
GO
IF DB_ID (N'mytest') IS NOT NULL
DROP DATABASE mytest;
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. 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
IF DB_ID (N'Sales') IS NOT NULL
DROP DATABASE Sales;
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 Sales
ON 
( NAME = Sales_dat,
    FILENAME = '''+ @data_path + 'saledat.mdf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = '''+ @data_path + 'salelog.ldf'',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )'
);
GO

C. 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.

USE master;
GO
IF DB_ID (N'Archive') IS NOT NULL
DROP DATABASE Archive;
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 Archive 
ON
PRIMARY  
    (NAME = Arch1,
    FILENAME = '''+ @data_path + 'archdat1.mdf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch2,
    FILENAME = '''+ @data_path + 'archdat2.ndf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch3,
    FILENAME = '''+ @data_path + 'archdat3.ndf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)
LOG ON 
   (NAME = Archlog1,
    FILENAME = '''+ @data_path + 'archlog1.ldf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
   (NAME = Archlog2,
    FILENAME = '''+ @data_path + '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. L'incremento specificato nel parametro FILEGROWTH per tali file è uguale al 15%.
  • Un filegroup SalesGroup1 con i file SGrp1Fi1 e SGrp1Fi2.
  • Un filegroup SalesGroup2 con i file SGrp2Fi1 e SGrp2Fi2.
USE master;
GO
IF DB_ID (N'Sales') IS NOT NULL
DROP DATABASE Sales;
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  Sales
ON PRIMARY
( NAME = SPri1_dat,
    FILENAME = '''+ @data_path + 'SPri1dat.mdf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
( NAME = SPri2_dat,
    FILENAME = '''+ @data_path + 'SPri2dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
    FILENAME = '''+ @data_path + 'SG1Fi1dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
    FILENAME = '''+ @data_path + 'SG1Fi2dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
    FILENAME = '''+ @data_path + 'SG2Fi1dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
    FILENAME = '''+ @data_path + 'SG2Fi2dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = '''+ @data_path + 'salelog.ldf'',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )'
);
GO

E. Collegamento di un database

Nell'esempio seguente il database Archive creato nell'esempio C 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. In 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
-- 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 CREATE DATABASE FOR ATTACH statement
EXEC ('CREATE DATABASE Archive
      ON (FILENAME = '''+ @data_path + '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
-- 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 sales_snapshot0600 ON
    ( NAME = SPri1_dat, FILENAME = '''+ @data_path + 'SPri1dat_0600.ss''),
    ( NAME = SPri2_dat, FILENAME = '''+ @data_path + 'SPri2dt_0600.ss''),
    ( NAME = SGrp1Fi1_dat, FILENAME = '''+ @data_path + 'SG1Fi1dt_0600.ss''),
    ( NAME = SGrp1Fi2_dat, FILENAME = '''+ @data_path + 'SG1Fi2dt_0600.ss''),
    ( NAME = SGrp2Fi1_dat, FILENAME = '''+ @data_path + 'SG2Fi1dt_0600.ss''),
    ( NAME = SGrp2Fi2_dat, FILENAME = '''+ @data_path + '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 AdventureWorks. 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 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

Vedere anche

Riferimento

ALTER DATABASE (Transact-SQL)
DROP DATABASE (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_changedbowner (Transact-SQL)
sp_detach_db (Transact-SQL)
sp_removedbreplication (Transact-SQL)

Altre risorse

Scollegamento e collegamento di database
Informazioni sui database
Snapshot del database
Spostamento dei file del database

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Nuovo contenuto:
  • Aggiunta di una nota nella descrizione di FOR ATTACH in merito al collegamento di una database di SQL Server 2005 Service Pack 2 per il quale è attivato il formato di archiviazione vardecimal.
  • Aggiunta di una nota alla descrizione di FOR ATTACH che specifica che un database creato con una versione più recente di SQL Server non può essere collegato in versioni precedenti.

5 dicembre 2005

Nuovo contenuto:
  • Aggiunta della nota sulla protezione nella definizione di FOR ATTACH.
Contenuto modificato
  • Correzione delle informazioni sull'opzione TRUSTWORTHY nei database di sistema.