Gestire SQL Server Desktop Engine (MSDE 2000) mediante l'utilità osql

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

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.

Nessun commento: