HOW TO: Gestire SQL Server Desktop Engine (MSDE 2000) mediante l'utilità osql
Identificativo articolo: 325003

 Sommario
  Descrizione di osql
  Utilizzo di osql
   Immissione interattiva di istruzioni Transact-SQL
   Invio di un processo di osql
  Connessione a SQL Server Desktop Engine (MSDE 2000)
  Gestione di MSDE 2000
   Creazione di un nuovo account di accesso
   Accesso a un database
   Modifica della password per un account di accesso
    Creazione di un database
   Backup e ripristino di database
   Connessione e disconnessione di un database
 Riferimenti

Sommario
SQL Server Desktop Engine, anche noto come MSDE 2000, non è dotato di un'interfaccia autonoma dal momento che è stato essenzialmente progettato per essere eseguito in background. Gli utenti interagiscono con MSDE 2000 attraverso il programma in cui è incorporato. Il solo strumento incluso in MSDE 2000 è l'utilità osql. Il file eseguibile, Sql.exe, è contenuto nella cartella MSSQL\Binn nel caso di un'istanza predefinita di MSDE 2000. Questo articolo riguarda in modo particolare la gestione di MSDE 2000 mediante l'utilità osql.

Descrizione di osql
L'utilità osql è un'utilità del prompt dei comandi di Microsoft Windows 32 utilizzabile per eseguire istruzioni e script Transact-SQL. Per le comunicazioni tra l'utilità osql e il server viene utilizzata l'API (Application Programming Interface) del database ODBC.

Utilizzo di osql
In genere, l'utilità osql viene impiegata nei modi seguenti:

Gli utenti immettono istruzioni Transact-SQL in modo interattivo, analogamente a quando utilizzano il prompt dei comandi.
Gli utenti inviano un processo di osql:
Specificando una singola istruzione Transact-SQL da eseguire. Oppure
Facendo riferimento a un file di script contenente istruzioni Transact-SQL da eseguire.

Immissione interattiva di istruzioni Transact-SQL
Per visualizzare un elenco delle opzioni (facenti distinzione tra maiuscole e minuscole) dell'utilità osql, digitare la stringa seguente al prompt dei comandi e premere INVIO:
osql -?
Per ulteriori informazioni su ciascuna opzione dell'utilità osql, vedere il relativo argomento nella documentazione in linea di SQL Server.
Per immettere istruzioni Transact-SQL in modo interattivo, attenersi alla seguente procedura:

1.Verificare che MSDE 2000 sia in esecuzione.
2.Connettersi a MSDE 2000. Per ulteriori informazioni, vedere la sezione "Connessione a SQL Server Desktop Engine (MSDE 2000)" di questo articolo.
3.Al prompt di osql digitare le istruzioni Transact-SQL, quindi premere INVIO. Quando si preme INVIO al termine di ogni riga di input, le istruzioni digitate vengono memorizzate in cache.
Per eseguire le istruzioni contenute nella cache, digitare "Go" e premere INVIO.
Per eseguire un batch di istruzioni Transact-SQL, immettere ciascun comando Transact-SQL in righe distinte. Quindi, digitare "Go" all'ultima riga per indicare la fine del batch ed eseguire le istruzioni memorizzate nella cache.

I risultati saranno visualizzati nella finestra della console.

4.Per uscire da osql, digitare QUIT o EXIT e premere INVIO.

Invio di un processo di osql
In genere, l'invio di un processo di osql viene effettuato in uno dei due modi seguenti: È possibile:

Specificare una singola istruzione Transact-SQL.
Oppure
Fare riferimento a un file di script.

Di seguito sono fornite ulteriori informazioni su ciascuno dei metodi.

Specificazione di una singola istruzione Transact-SQL.
Per eseguire un'istruzione Transact-SQL nell'istanza predefinita locale di MSDE 2000, digitare un comando analogo al seguente
osql -E -q "istruzione Transact-SQL"
dove

-E specifica l'utilizzo dell'autenticazione di Microsoft Windows NT.
e
-q esegue l'istruzione Transact-SQL, ma non esce da osql al termine della query.

Per eseguire l'istruzione Transact-SQL e uscire da osql, utilizzare l'argomento -Q anziché -q.

Riferimento a un file di script
Per fare riferimento a un file di script, attenersi alla seguente procedura:

1.Creare un file di script contenente un batch di istruzioni Transact-SQL, ad esempio Query.sql.
2.Aprire un prompt dei comandi, digitare un comando analogo al seguente e premere INVIO
osql -E -i file_input
dove
file_input è il percorso completo del file di script. Se, ad esempio, il file di script Query.sql è contenuto nella cartella C:\Query, sostituire il parametro file_input con C:\Query\Query.sql.
I risultati del file di script saranno visualizzati nella finestra della console. Se si desidera scrivere i risultati su un file, aggiungere l'argomento -o file_output al comando precedentemente indicato. Ad esempio:
osql -E -i file_input -o file_output
dove
file_output è il percorso completo del file di output.
Per rimuovere i simboli di numerazione e di prompt dall'output, aggiungere l'opzione -n al comando precedentemente indicato. Ad esempio:
osql -E -i file_input -o file_output -n

Connessione a SQL Server Desktop Engine (MSDE 2000)
Per connettersi a MSDE 2000, attenersi alla seguente procedura:

1.Verificare che MSDE 2000 sia in esecuzione.
2.Aprire un prompt dei comandi sul computer in cui è contenuta l'istanza di MSDE 2000 cui si intende connettersi.
3.Digitare il seguente comando e premere INVIO:
osql -E
Verrà effettuata la connessione all'istanza predefinita locale di MSDE 2000 sulla base dell'autenticazione di Windows.
Per connettersi a un'istanza denominata di MSDE 2000, digitare:
osql -E -S nomeserver\nomeistanza
Se viene visualizzato un messaggio di errore analogo al seguente, è possibile che MSDE 2000 non sia in esecuzione oppure che sia stato fornito un nome non corretto per l'istanza denominata di MSDE 2000 installata nel computer:
[Shared Memory]Server SQL inesistente o accesso negato.
[Shared Memory]Connessione aperta (Connect()).

Se la connessione al server viene stabilita, al prompt dei comandi verrà visualizzato quanto segue:
   1>
Tale stringa indica che l'utilità osql è stata avviata. A questo punto è possibile immettere interattivamente le istruzioni Transact-SQL e visualizzare i relativi risultati al prompt dei comandi.

Gestione di MSDE 2000
Nelle rimanenti sezioni di questo articolo vengono brevemente introdotti i comandi Transact-SQL utilizzati più frequentemente per gestire MSDE 2000.

Creazione di un nuovo account di accesso
Un utente non può connettersi a SQL Server senza fornire un ID di accesso valido. Per consentire l'utilizzo di un account di rete (account utente o account gruppo) di Microsoft Windows come account di accesso di SQL Server per la connessione a un'istanza di SQL Server con l'autenticazione di Windows viene utilizzata la stored procedure sp_grantlogin. Nel seguente esempio di codice viene consentito a un utente di Windows NT denominato Corporate\Test di connettersi a un'istanza di SQL Server:

EXEC sp_grantlogin 'Corporate\Test'
Solo i membri dei ruoli predefiniti del server sysadmin o securityadmin possono eseguire la stored procedure sp_grantlogin. Per ulteriori informazioni sui ruoli, vedere l'argomento relativo ai ruoli nell'architettura SQL Server nella documentazione in linea di SQL Server.
Per ulteriori informazioni sulla stored procedure sp_grantlogin, vedere l'argomento "sp_grantlogin, Transact-SQL Reference" nella documentazione in linea di SQL Server.
La stored procedure sp_addlogin viene utilizzata per creare un nuovo account di accesso per le connessioni a SQL Server con l'autenticazione di SQL Server. Nel seguente esempio di codice viene creato un account di accesso di SQL Server per un utente denominato "test" con password "hello":

EXEC sp_addlogin 'test','hello'
Solo i membri dei ruoli predefiniti del server sysadmin o securityadmin possono eseguire la stored procedure sp_addlogin. Per ulteriori informazioni sulla stored procedure sp_addlogin, vedere l'argomento "sp_addlogin, Transact-SQL Reference" nella documentazione in linea di SQL Server.

Accesso a un database
Una volta connesso a un'istanza di SQL Server, un utente può eseguire attività di database finché il proprietario del database (DBO) gliene consente l'accesso. È possibile utilizzare la stored procedure sp_grantdbaccess per aggiungere al database corrente un account di protezione per il un nuovo utente. Nel seguente esempio di codice viene aggiunto un account per l'utente di Windows NT "Corporate\BobJ" e viene denominato tale account "Bob":

EXEC sp_grantdbaccess 'Corporate\BobJ', 'Bob'
La stored procedure sp_adduser svolge la stessa funzione della stored procedure sp_grantdbaccess. Poiché la stored procedure sp_adduser è stata inclusa per garantire la compatibilità con le versioni precedenti, Microsoft consiglia di utilizzare la stored procedure sp_grantdbaccess.
Solo i membri del ruolo predefinito del server sysadmin e dei ruoli predefiniti del database db_accessadmin e db_owner possono eseguire la stored procedure sp_grantdbaccess. Per ulteriori informazioni sulla stored procedure sp_grantdbaccess, vedere l'argomento "sp_grantdbaccess, Transact-SQL Reference" nella documentazione in linea di SQL Server.

Modifica della password per un account di accesso
Per modificare la password per un account di accesso, utilizzare la stored procedure sp_password. Nel seguente esempio di codice, la password "ok" per l'account di accesso "test" viene modificata in "hello":

EXEC sp_password 'ok', 'hello','test'
Per impostazione predefinita, le autorizzazioni di esecuzione per un utente che modifica la password relativa al proprio account di accesso sono assegnate al ruolo pubblico. Solo i membri del ruolo sysadmin possono modificare la password per l'account di accesso di un altro utente. Per ulteriori informazioni sulla stored procedure sp_password, vedere l'argomento "sp_password, Transact-SQL Reference" nella documentazione in linea di SQL Server.

Creazione di un database
Un database di MSDE 2000 è costituito da un insieme di tabelle contenenti dati e altri oggetti, quali viste, indici, stored procedure e trigger, definiti per supportare le attività relative ai dati. Per creare un database di MSDE 2000, utilizzare il comando Transact-SQL "CREATE DATABASE". Per ulteriori informazioni sulla creazione di un database, vedere il relativo argomento nella documentazione in linea di SQL Server.
Nell'esempio seguente viene creato un database denominato Test. Poiché al comando non vengono aggiunti ulteriori parametri, il database Test avrà la stessa dimensione del database model:

CREATE DATABASE Test

Per impostazione predefinita, l'autorizzazione per CREATE DATABASE è assegnata ai membri dei ruoli predefiniti del server sysadmin e dbcreator. Per ulteriori informazioni sul comando "CREATE DATABASE", vedere l'argomento "CREATE DATABASE, Transact-SQL Reference" nella documentazione in linea di SQL Server.
Per creare un nuovo oggetto di database, utilizzare il comando Transact-SQL CREATE. Per creare, ad esempio, una nuova tabella, utilizzare il comando Transact-SQL "CREATE TABLE". Per ulteriori informazioni, fare riferimento alla documentazione in linea di SQL Server.

Backup e ripristino di database
I componenti di SQL Server relativi al backup e al ripristino costituiscono importanti strumenti di salvaguardia dei dati critici archiviati nei database di SQL Server.
Seguendo un'appropriata pianificazione, è possibile ripristinare il database dopo vari tipi di errori, quali:

Errori dei supporti.
Errori dell'utente.
Perdita permanente di un server.

Inoltre, il backup e il ripristino dei database sono utili per altri scopi, quali la copia di un database da un server all'altro. Eseguendo il backup di un database su un server e ripristinandolo su un altro computer si otterrà rapidamente e facilmente una copia esatta del database originale.
Per ulteriori informazioni sulle operazioni relative al backup e al ripristino di database, vedere il relativo argomento nella documentazione in linea di SQL Server.
Nell'esempio di codice seguente viene eseguito un backup completo del database denominato mydb, quindi il file di backup viene denominato Mydb.bak e archiviato nella cartella C:\Msde\Backup:

BACKUP DATABASE mydb TO DISK = 'C:\MSDE\Backup\mydb.bak'
Nell'esempio di codice seguente viene eseguito un backup di log per il database denominato mydb, quindi il file di backup viene denominato Mydb_log.bak e archiviato nella cartella C:\Msde\Backup:

BACKUP LOG mydb TO DISK = 'C:\MSDE\Backup\mydb_log.bak'
Per impostazione predefinita, le autorizzazioni per BACKUP DATABASE e BACKUP LOG sono assegnate ai membri del ruolo predefinito del server sysadmin e dei ruoli predefiniti del database db_owner e db_backupoperator. Per ulteriori informazioni sull'istruzione BACKUP, vedere l'argomento "BACKUP, Transact-SQL Reference" nella documentazione in linea di SQL Server.
In MSDE è incluso il servizio Agente SQL Server per la gestione dei processi pianificati. È ad esempio possibile creare e pianificare un processo di backup Transact-SQL. Il servizio Agente SQL Server consente la gestione della pianificazione dei processi. Per un esempio di codice relativo all'utilizzo delle varie stored procedure con MSDE 2000 per l'esecuzione e la pianificazione di backup, vedere il seguente articolo della Microsoft Knowledge Base (il contenuto potrebbe essere in inglese):

241397 (http://support.microsoft.com/kb/241397/IT/) HOWTO: Eseguire il backup di un database di Microsoft Data Engine con Transact-SQL
Per ulteriori informazioni sul servizio Agente SQL Server, vedere il relativo argomento nella documentazione in linea di SQL Server.
Per garantire la piena funzionalità di una copia di backup del database, è necessario eseguire le procedure corrette non solo in fase di backup, ma anche in fase di ripristino. Nell'esempio seguente viene ripristinato un database denominato mydb dal file di backup C:\Msde\Backup\Mydb.bak:

RESTORE DATABASE mydb FROM DISK ='C:\MSDE\Backup\mydb.bak'
Se il database da ripristinare non esiste, l'utente deve essere dotato delle autorizzazioni per CREATE DATABASE per eseguire l'istruzione RESTORE. Se il database esiste, le autorizzazioni per RESTORE sono assegnate ai membri dei ruoli predefiniti del server sysadmin e dbcreator nonché al proprietario del database (DBO). Per ulteriori informazioni sull'istruzione RESTORE, vedere l'argomento "RESTORE, Transact-SQL Reference" nella documentazione in linea di SQL Server.

Connessione e disconnessione di un database
I file di dati e di log delle transazioni di un database possono essere disconnessi e poi riconnessi a un altro server o anche al server originale. Quando viene disconnesso, il database viene rimosso da SQL Server, ma vengono mantenuti intatti i file di dati e di log delle transazioni che lo compongono. Tali file di dati e di log delle transazioni possono quindi essere utilizzati per connettere il database a una qualsiasi istanza di SQL Server, incluso il server da cui era stato originariamente disconnesso. In questo modo, il database viene reso disponibile nello stato in cui si trovava prima della disconnessione. Per ulteriori informazioni, vedere l'argomento relativo alla connessione e alla disconnessione di un database nella documentazione in linea di SQL Server.
Nell'esempio seguente viene disconnesso un database denominato mydb dall'istanza corrente di SQL Server:

EXEC sp_detach_db 'mydb'
Solo i membri del ruolo predefinito del server sysadmin possono eseguire la stored procedure sp_detach_db. Per ulteriori informazioni sulla stored procedure sp_detach_db, vedere l'argomento "sp_detach_db, Transact-SQL Reference" nella documentazione in linea di SQL Server.
Nell'esempio seguente vengono connessi due file di un database denominato mydb all'istanza corrente di SQL Server:

EXEC sp_attach_db @dbname = N'mydb',
   @filename1 = N'C:\MSDE\Backup\mydb.mdf',
   @filename2 = N'C:\MSDE\Backup\mydb.ldf'

La lettera maiuscola N è utilizzata come prefisso di una costante stringa Unicode. Il prefisso "N" sta per "National Language" nello standard SQL-92. Per ulteriori informazioni, vedere il seguente articolo della Microsoft Knowledge Base (il contenuto potrebbe essere in inglese):

239530 (http://support.microsoft.com/kb/239530/IT/) INF: Le costanti stringa Unicode in SQL Server richiedono il prefisso N
Solo i membri dei ruoli predefiniti del server sysadmin o dbcreator possono eseguire questa procedura. Per ulteriori informazioni sulla stored procedure sp_attach_db, vedere l'argomento "sp_attach_db, Transact-SQL Reference" nella documentazione in linea di SQL Server.
Le seguenti informazioni sull'impiego dell'utilità osql si applicano anche a tutte le edizioni di Microsoft SQL Server 2000.
Per ulteriori informazioni su MSDE 2000, vedere i seguenti articoli della Microsoft Knowledge Base (il contenuto potrebbe essere in inglese):

319930 (http://support.microsoft.com/kb/319930/IT/) HOW TO: Effettuare la connessione a MSDE (Microsoft Desktop Engine)
241397 (http://support.microsoft.com/kb/241397/IT/) HOWTO: Eseguire il backup di un database di Microsoft Data Engine con Transact-SQL


How To Back Up a Microsoft Data Engine Database with Transact-SQL

Articolo numero: 241397

SUMMARY

SQL Client Tools are not part of the Microsoft Data Engine (MSDE) installation. Therefore, to back up an MSDE database, you can use the Transact-SQL BACKUP DATABASE statement, which is discussed in this article.

MORE INFORMATION

If you have Microsoft Access 2000, you can use the BACKUP command in the Database Utilities menu of an Access project to back up an MSDE database. If SQL Client Tools are installed, you can use SQL Enterprise Manager to back up an MSDE database.
However, if you only have MSDE installed, you do not have these options. Therefore, to back up an MSDE database, you can use the Transact-SQL BACKUP DATABASE statement, and run Osql.exe (a command line Query tool).
For information about all of the stored procedures used in this article, see SQL Server Books Online.
NOTE: The following code is an example of how to use the various stored procedures with MSDE to perform a backup. This code does not back up your mission critical database "as is" and might require some modification to run in your environment. For example, database name, server name, and so forth.
Paste the following Transact-SQL script in Notepad, and then save it to a file named MyBackupScript.sql:

--This Transact-SQL script creates a backup job and calls sp_start_job to run the job.

-- Create job.
-- You may specify an e-mail address, commented below, and/or pager, etc.
-- For more details about this option or others, see SQL Server Books Online.
USE msdb
EXEC sp_add_job @job_name = 'myTestBackupJob',
    @enabled = 1,
    @description = 'myTestBackupJob',
    @owner_login_name = 'sa',
    @notify_level_eventlog = 2,
    @notify_level_email = 2,
    @notify_level_netsend =2,
    @notify_level_page = 2
--  @notify_email_operator_name = 'email name'
go

-- Add job step (backup data).
USE msdb
EXEC sp_add_jobstep @job_name = 'myTestBackupJob',
    @step_name = 'Backup msdb Data',
    @subsystem = 'TSQL',
    @command = 'BACKUP DATABASE msdb TO DISK = ''c:\msdb.dat_bak''',
    @on_success_action = 3,
    @retry_attempts = 5,
    @retry_interval = 5
go

-- Add job step (backup log).
USE msdb
EXEC sp_add_jobstep @job_name = 'myTestBackupJob',
    @step_name = 'Backup msdb Log',
    @subsystem = 'TSQL',
    @command = 'BACKUP LOG msdb TO DISK = ''c:\msdb.log_bak''',
    @on_success_action = 1,
    @retry_attempts = 5,
    @retry_interval = 5
go

-- Add the target servers.
USE msdb
EXEC sp_add_jobserver @job_name = 'myTestBackupJob', @server_name = N'(local)'

-- Run job. Starts the job immediately.
USE msdb
EXEC sp_start_job @job_name = 'myTestBackupJob'

From the command line, use the following osql syntax to run the Transact-SQL script:

   OSQL -Usa -PmyPasword -i myBackupScript.sql -n

You may want to schedule the job instead of running it manually. To do this, you can use the earlier code to create the job. Instead of calling the sp_start_job stored procedure to run the job manually, you can use the sp_add_jobschedule stored procedure to configure the job to run at a specified date and time. The SQL Agent manages the job scheduling. This code demonstrates use of the sp_add_jobschedule stored procedure:

-- Use the job creation code from the previous sample and call sp_add_jobschedule instead of sp_start_job.
-- Schedule job.
USE msdb
EXEC sp_add_jobschedule @job_name = 'myTestBackupJob',
    @name = 'ScheduledBackup_msdb',
    @freq_type = 4, --daily
    @freq_interval = 1, --once
    @active_start_time = '153000' --(3:30 pm) 24hr HHMMSS.
go

--Use the following code to remove or delete the backup job, created earlier, and then remove the job from the Scheduler.
-- Delete scheduled job.
USE msdb
EXEC sp_delete_jobschedule @job_name = N'myTestBackupJob',
@name = N'ScheduledBackup_msdb'

-- Delete job.
USE msdb
EXEC sp_delete_job @job_name = N'myTestBackupJob'

If you do not want to create a backup job or a scheduled backup, you can run the BACKUP DATABASE (or BACKUP LOG) statement with osql directly from the command line. If you use the -Q argument, osql runs the Transact-SQL statement, and then exits. For example:
OSQL -Usa -PmyPasword -n -Q "BACKUP DATABASE msdb TO DISK = 'c:\msdb.dat_bak'"
Because there are many other options you might want to specify with the BACKUP DATABASE statement, see SQL Server Books Online for more details:
http://download.microsoft.com/download/SQL70/File/2/Win98/En-US/sqlbol.exe (http://download.microsoft.com/download/sql70/file/2/win98/en-us/sqlbol.exe)

REFERENCES

To download an updated version of SQL Server 2000 Books Online, visit the following Microsoft Web site:
http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp (http://support.microsoft.com/?scid=http%3a%2f%2fwww.microsoft.com%2fsql%2ftechinfo%2fproductdoc%2f2000%2fbooks.asp)

To download the Microsoft SQL Server 7.0 Books Online version, visit the following Microsoft Web site:

http://download.microsoft.com/download/SQL70/File/2/Win98/En-US/SQLBOL.exe (http://download.microsoft.com/download/sql70/file/2/win98/en-us/sqlbol.exe)

SQL Server Books Online: topics: "Database Backups"; "sp_add_job"; "sp_add_jobstep"; "sp_add_jobserver"; "sp_start_job"; "sp_add_jobschedule"; "sp_delete_jobschedule"; "sp_delete_job"


Backup and Restore SQL Server and MSDE Databases

The backup and restore features provide an important safeguard for protecting data stored in Microsoft SQL Server databases.

Database Backup

To backup a database, select the Databases node in the Server Explorer pane then, in the Items pane, right click the database you want to backup. In the Backup File box, enter the path and file name of your backup file then click Backup to perform the backup. Note that the path and file name you enter in this box are relative to the server. If you are connecting to the local server, the backup file will be created on the computer you are working on. If you are connecting to a remote server (LAN, WAN, or Internet), the backup file will be created on the remote server (for example, C:\MyBackups\DB1.bkp would be created on the C:\ drive of the remote server). The Windows account used to start the remote server should be a non-system account with full privileges to create and modify the backup file.

If your database is hosted on the Internet, ask you database hosting provider to create a folder for your backups on the server and give you the path of that folder so you can use it in your backup. Your provider should also be able to give you FTP access to that folder so you can download your backup files to your local computer.

If you are connecting to a local server, you can click on the browse button next to the Backup File box and select a file from the Backup File dialog box. The file will be overwritten with the new backup file. The browse button is disabled if you are connecting to a server other than (local).

Database Restore

To restore a database, right click the Databases node in the Server Explorer pane and select "Restore..." to open the Restore Database dialog box. The dialog box contains the following:

Restoring a Database from a Backup File on a Remote Server to the Local Server

To restore a database from a file that is located on a different computer (for example, restoring from a mapped network drive), the Windows account used to start the SQL Server service has to be a non-system account with full control privileges to the backup file. 

Restoring a Database from a Local File to a Remote Server

If you are restoring from a local file to a remote server, use a UNC path that points to your local drive from the remote server. The Windows account used to start the remote SQL Server service has to be a non-system account with full control privileges to the backup file.


MSDE Altre istruzioni per l'uso - Salvare/Trasportare/Ripristinare un Database SQL Server
Staccare un Database da un server per trasportarlo su un nuovo server

Nel comune uso dei database, una delle necessità dello sviluppatore può essere quella di installare un database già costruito presso un cliente anziché implementare complessi programmi per la sua generazione.
E' una pratica comune, però varrebbe la pena di evitarlo e costruire un programma di utilità che sia in grado di generare il database usato dalla nostra applicazione aggiornato all'ultima versione ed inserire in questo programma tutte le modifiche al database effettuate di versione in versione, in modo che possano essere applicate in modo automatico dai clienti a cui distribuiamo gli aggiornamenti del software.
In ogni caso, questo comando è utile anche quando dobbiamo spostare un DB da un server ad un altro (ad esempio in caso di crescita del cliente e conseguente passaggio da un MSDE ad un SQL Server su una macchina adibita solo all'uso di server dati), oppure quando dobbbiamo spostare il Database da un disco ad un disco diverso.
Di seguito il codice SQL per il distacco dal server del nostro database
  sp_detach_db 'MusicBox'

Riattaccare il database una volta spostato
Una volta staccato il database, dobbiamo riattaccarlo (o meglio riconnetterlo, se preferite) sul nuovo server oppure allo stesso server da una nuova locazione fisica.
In questo caso il comando è sempre eseguito da una stored procedure di sistema sp_attach_db:
  sp_attach_db @dbname = N'MusicBox'
    , @filename1 = N'f:\sql.dir\data\MusicBoxdat.mdf'
    , @filename2 = N'f:\sql.dir\data\MusicBoxlog.ldf'

a cui passiamo i seguenti parametri:

Effettuare il Backup di un Database SQL Server
Ogni Database di produzione dovrebbe essere corredato di un piano di manutenzione che effettui regolarmente il backup del database e del log delle transazioni. I Database SQL Server hanno due modalità principali di funzionamento che vengono predisposte alla loro creazione: la modalità SIMPLE - che corrisponde a dire all'RDBMS "TRUNCATE LOG ON CHECKPOINT" ovvero tronca il log delle transazioni ad ogni Checkpoint (il checkpoint è il momento in cui l'RDBMS conferma la chiusura di ogni transazione sul database). - e la modalità FULL - che corrisponde a dire all'RDBMS "il LOG delle transazioni è mio e me lo gestisco io!". Consiglio vivamente la modalità FULL su tutti i DB di produzione installati con una qualsiasi versione di SQL server a pagamento, ove è semplice impostare un piano di manutenzione che si occupi appunto della gestione del LOG delle transazioni, mentre se utilizzate MSDE (e quindi non avete installato l'enterprise manager) utilizzate la modalità SIMPLE (che è il default) per evitare di dover generare codice T-SQL complesso a mano per fare le manutenzioni. (Per carità! Non è vietato farlo, se vi piace lavorare con SQL ).
Detto questo, anche se lavoriamo su un piccolo Database con il nostro caro MSDE, dobbiamo predisporre un utilità di Backup quotidiana per i nostri utenti, affinché si possa procedere al salvataggio dei nostri dati, anche senza dover fermare SQL Server. Per far questo possiamo scrivere uno script da chiamare da VB oppure scrivere una stored procedure contenente lo stesso script (più sicura e veloce)
Ecco qui il comando per salvare il nostro DB di prova.
     BACKUP DATABASE [MusicBox]
    TO  DISK = 'f:\sql.dir\backup\MusicBox.Bak'
    WITH  INIT , NOUNLOAD
    , name = 'MusicBox backup'
    , NOSKIP
    , STATS = 10
    , Description
    = 'Backup Full di MusicBox'
    , NOFORMAT

Vediamo il significato della sintassi:

Per chi Volesse utilizzare la modalità FULL, una volta effettuato il Backup FULL del database, è necessario fare un Backup del Transaction Log troncandolo in modo da ridimensionare la sua lunghezza.
Il comando per eseguire questo tipo di operazione è il seguente:
    BACKUP LOG [4uahr] TO
    DISK =  'f:\sql.dir\backup\MusicBox.Bak'
    WITH  NOINIT , 
    NOUNLOAD , 
    NAME = N'4uahr backup', 
    NOSKIP , 
    STATS = 10, 
    NOFORMAT

Come si può vedere, la sintassi è praticamente la stessa del Backup del database. Ricordo che se volete davvero che il Log venga ridotto, cosa che viene automaticamente effettuata dopo un BACKUP LOG dovete farlo dopo aver eseguito un BACKUP DATABASE, in quanto il server segna sul log fino a quale transazione è stato effettuato il backup del database e tronca il log all'ultima transazione salvata. Se non fate il backup FULL, il Log rimarrà uguale a prima...

Effettuare il Restore di un Database SQL Server:
Ovviamente una volta effettuato il backup di un database può essere necessario effettuarne il restore (solitamente, ad esempio, per verificare perché sui dati di un cliente il nostro programma non funziona mentre sui nostri dati di prova si).
  RESTORE DATABASE MusicBox FROM DISK = 'f:\sql.dir\backup\MusicBox.Bak'
La sintassi è semplice (per i parametri fate riferimento a quanto scritto per il backup):
  RESTORE DATABASE NomeDatabase FROM DISK = 'pathcompleto'
Ovviamente, può essere necessario che noi facciamo il Restore di un database salvato su una macchina con configurazione diversa, oppure possiamo voler duplicare il nostro database di produzione su un altro, per fare prove e test, prima di applicarli sul database di produzione. In questo caso, possiamo farlo senza problemi utilizzando qualche parametro in più:
     RESTORE DATABASE MusicBox2
    FROM DISK = 'f:\sql.dir\backup\MusicBox.Bak'
    WITH RECOVERY,
    MOVE 'MusicBoxDat'
    TO 'f:\sql.dir\data\MusicBoxdat2.mdf',
    MOVE 'MusicBoxLog'
    TO 'f:\sql.dir\data\MusicBoxlog2.ldf'
Vediamo quali sono le istruzioni diverse:

Anche per questi comandi SQL si può utilizzare OSQL.EXE.
La sintassi per chiamare un comando SQL usando OSQL è la seguente:
  osql -S Localhost -U SA -P as -i backup.sql
un possibile file di input da utilizzare per realizzare uno degli esempi backup.sql è un file di testo contenente il comando da eseguire che è leggermente diverso da quello sopra descritto, riporto la sintassi per il backup del database:
  USE MusicBox
  GO
 
  BACKUP DATABASE [MusicBox]
    TO  DISK = 'f:\sql.dir\backup\MusicBox.Bak'
    WITH  INIT , NOUNLOAD
    , name = 'MusicBox backup'
    , NOSKIP
    , STATS = 10
    , Description
    = 'Backup Full di MusicBox'
    , NOFORMAT 
  GO
  QUIT
Il comando USE MUSICBOX serve a dire al server che dobbiamo lavorare sul Database Musicbox (database di esempio creato nel precedente articolo), Il comando GO esegue i comandi richiesti, il comando QUIT esce da OSQL.EXE che altrimenti si comporta come un Interprete comandi e rimane attivo all'interno della finestra console.
La sintassi da usare con OSQL per trasportarvi tutti gli script da noi generati in questa pagina è la seguente:

  USE Musicbox
  GO
 
  script da eseguire
 
  GO
 
QUIT