SQL Server 2005 Express: panoramica
di Rajesh George
traduzione a cura di Simone Falchetti (requisiti: nessuno)

Novembre 2005 - (fonte)

Si applica a:
Microsoft SQL Server 2005 Express Edition
Microsoft Visual Studio 2005

Sommario:
SQL Server Express Edition, prodotto gratuito basato sulla tecnologia di SQL Server 2005, differisce dalle altre edizioni di SQL Server 2005 per delle caratteristiche proprie che riguardano l'applicazione XCopy, il funzionamento in rete e la sicurezza. Questo articolo parlerà di questi argomenti e dell'integrazione di SQL Server Express con Visual Studio 2005. Mostreremo, infine, una tabella comparativa in cui saranno messe a confronto le differenze tra questo prodotto e gli altri database gratutiti forniti da Microsoft, come MSDE e Jet.

Contenuto
    Introduzione
    Scenari d'uso
    Caratteristiche chiave di SQL Server 2005 Express edition
    Specifiche del motore di database
    Strumenti di supporto
    Supporto di rete
    Supporto per l'Accesso ai Dati
    Sicurezza
    Supporto alla replicazione
    SQL Service Broker
    User Instance
    Setup e Deployment
    Supporto delle Lingue
    Supporto offerto
    Requisiti Hardware/Software
    Supporto delle architetture a 64-bit
    Caratteristiche non presenti in SQL Server Express 2005
    Integrazione con Visual Studio
    Prove comparative con gli altri database gratuiti di Microsoft
       Confronto con MSDE
       Confronto con JET
    Conclusioni

Introduzione
SQL Server Express è un sistema di database, basato sulla stessa tecnologia di SQL Server 2005, gratuito e semplice da utilizzare. È stato progettato con l'idea di fornire una piattaforma di database capace di offrire una maggior semplicità di utilizzo e consentire un più rapido sviluppo delle applicazioni. La semplicità di utilizzo si nota fin dal modulo di Setup. Semplice, robusto e dotato di un'ottima Interfaccia Utente di tipo Grafico (GUI), il programma di Setup guida l'utilizzatore attraverso la procedura di installazione. Tra gli strumenti della GUI forniti gratuitamente con SQL Server Express troveremo: SQL Server Management Studio Express Edition, Surface Area Configuration Tool ed SQL Server Configuration Manager. Questi strumenti semplificano le operazioni basilari sui database. Il progetto e lo sviluppo di una completa applicazione database risulta molto semplificato anche grazie alla forte integrazione con i progetti di Visual Studio. Oltre a ciò, SQL Server 2005 rende finalmente possibile spostare un'intera applicazione database come se fosse un normale file di Windows (un po' come accade per i file mdb di Access [n.d.t.]). Anche la manutenzione di servizio e l'aggiornamento di sistema (applicazione di patch) sono semplificate ed automatizzate.

SQL Server Express utilizza lo stesso affidabile e performante motore di database delle altre versioni di SQL Server 2005. Anche le API di accesso ai dati sono le stesse di ADO.NET del SQL Native Client e di T-SQL. Le uniche differenze tra il SQL Server 2005 Express e le altre versioni dello stesso prodotto sono le seguenti:

Caratteristiche quali l'Auto-Close e la possibilità di copiare/spostare database come fossero semplici file sono disponibili di default in SQL Server Express, mentre sono assenti le caratteristiche di alta disponibilità e di business intelligence. Tuttavia, qualora si rendesse necessario farlo, risulterà molto semplice eseguire lo scale up (cioè il passaggio da una edizione di SQL Server più limitata verso un'altra più potente) di un'applicazione. Questo perché un database creato con (e su) SQL Server Express lavorerà nello stesso identico modo sulle edizioni Workgroup, Standard o Enterprise di SQL Server 2005. La possibilità di scaricare il prodotto dal Web rende agevole, gratuito e conveniente la messa in opera del prodotto.

Nei prossimi paragrafi verranno illustrate le componenti e le caratteristiche peculiari di SQL Server Express, come l'Applicazione XCopy (User Instance), la gestione della rete e della sicurezza. Verranno anche fornite le linee guida per uno scenario comune di utilizzo delle diverse applicazioni. In aggiunta illustrerò la semplicità di sviluppo di applicazioni orientate ai dati con Visual Studio 2005. I destinatari di questa trattazione sono:

Scenari d'uso
SQL Server Express è stato sviluppato tenendo a mente due distinti tipi di utilizzo. Il primo è come prodotto Server, specialmente come Web Server o come database server. Il secondo è come client data store cioè come deposito di dati a cui un'applicazione database accede non attraverso la rete. Facilità d'uso e semplicità sono gli obiettivi chiave del progetto.

I tre principali scenari di utilizzo per SQL Server Express sono:

SQL Server Express fornisce un ambiente di database sicuro, facile da utilizzare e ricco di funzionalità in grado di soddisfare tutte le esigenze riguardanti gli scenari descritti. Particolare attenzione è stata dedicata alla semplicità ed all'affidabilità dell'installazione e dell'approntamento in modo tale da rendere semplice, per gli ISV, l'utilizzo e la redistribuzione del prodotto.

Caratteristiche chiave di SQL Server 2005 Express Edition
SQL Server Express utilizza lo stesso motore di database delle altre versioni di SQL Server 2005, e tutte le caratteristiche di programmazione sono le stesse. Per maggiori informazioni riguardanti queste funzionalità, tuttavia, si rimanda alla documentazione di SQL Server 2005 (BOL). Le caratteristiche salienti di SQL Server 2005 che possono maggiormente interessare l'utente sono invece descritte di seguito.

Specifiche del Motore di database
Il motore di SQL supporta 1 CPU, 1 GB RAM, e database di dimensioni massime pari a 4 GB. Queste precise limitazioni, contrariamente a quanto accadeva in passato dove non erano nette le diversità tra i motori delle diverse versioni di database, individuano una precisa differenziazione tra questa e le altre edizioni di SQL Server 2005. Non ci sono limiti imposti al numero di utenti che possono contemporaneamente accedere a SQL Server Express, ma i limiti imposti alla CPU ed alla memoria comporteranno, in pratica, un limite al numero di utenti contemporanei che possono essere gestiti da un database SQL Server Express con tempi di risposta accettabili.

SQL Server Express può essere installato su macchine multiprocessore, ma utilizzerà sempre e soltanto una sola CPU alla volta. Internamente, il motore di SQL Server (d'ora in poi semplicemente il motore) limita il numero dei threads per utente gestiti ad 1 cosicché 1 sola CPU alla volta viene utilizzata. Caratteristiche quali l'esecuzione parallela delle richieste (query) non sono supportate proprio a causa del limite di utilizzo di una singola CPU alla volta.

Il limite di 1 GB di RAM è il limite imposto al buffer pool. Il buffer pool è una tecnica utilizzata per memorizzare pagine di dati ed altre informazioni. Tuttavia la memoria richiesta per tenere traccia di connessioni, bloccaggi (di dati) e cose similari è molto minore di quella prevista dal limite del buffer pool. In via teorica è possibile che un server possa arrivare a richiedere, complessivamente, più di 1 GB di RAM. Tuttavia, anche in questi casi, il server non ne utilizzerà mai più di 1 GB per operazioni di buffer pool. Non sono supportate le AWE (Address Windowing Extensions - API per supportare una memoria fisica di dimensioni molto estese, evitando lo scambio tra RAM e disco rigido, [n.d.t.]) e neppure l'accesso dati a 3 GB.

Il limite a 4 GB si applica solo ai file di dati e non anche ai file di log. Non esiste comunque un limite al numero di database che possono essere attaccati ad un server. Alcuni piccoli cambiamenti sono stati apportati alla procedura di avvio di SQL Server Express. I database dell'utente non si avviano automaticamente e il Gestore delle Transazioni (Transaction Coordinator) non viene più inizializzato automaticamente. Per quanto concerne gli utenti normali questo comporta solo un avvio più veloce. Ai programmatori che intendano utilizzare SQL Server Express, invece, si raccomanda di tenere queste modifiche in mente in fase di progetto delle proprie applicazioni.

E' possibile far coesistere sulla stessa macchina installazioni multiple di SQL Server 2005 anche in presenza di altre installazioni di SQL Server 2000, SQL Server 2005, o Microsoft Desktop Engine (MSDE). In generale sarebbe bene che le istanze di SQL Server 2000 fossero aggiornate al SP4. Il limite massimo di istanze di SQL Server Express sulla stessa macchina è 16. Queste istanze debbono necessariamente avere ciascuna un nome diverso per renderle identificabili univocamente.

L'istanza di SQL Server Express installata per default viene denominata SQLEXPRESS. Questa particolare istanza può essere condivisa attraverso molteplici applicazioni e venditori di applicazioni. Si raccomanda di utilizzare l'istanza di default a meno che la vostra applicazione non abbia bisogno di una configurazione speciale.

Le API utilizzabili per la programmazione su SQL Server Express sono le stesse disponibili per SQL Server 2005, in tal modo nessuna ulteriore conoscenza specifica sarà necessaria per passare ad una edizione diversa di SQL Server 2005. Sono supportate da SQL Server Express anche tutte le novità introdotte in SQL Server 2005, come l'integrazione con il Common Language Runtime (CLR), i nuovi tipi di dato come VARCHAR(MAX) e XML, i tipi e le aggregazioni definibili dall'utente. Oltre a ciò, i database di SQL Server Express potranno essere attaccati a SQL Server 2005 e le applicazioni programmate su un'istanza di SQL Server Express lavoreranno egualmente bene su un'istanza di SQL Server 2005. Altre funzionalità presenti su SQL Server Express e di cui discuteremo in seguito, sono la possibilità di creare repliche del database ed il servizio SQL Service Broker.

Strumenti di supporto
SQL Server Express (SQL-SEE) è stato disegnato per essere di semplice utilizzo e l'interfaccia grafica rende facile anche per gli utenti meno esperti l'uso delle più elementari funzionalità di database in SQL Server Express. Un nuovo strumento grafico, chiamato SQL Server Management Studio Express Edition (SSMS-EE) distribuito separatamente da SQL-SEE e liberamente scaricabile dal Web, permette una senplice gestione dei database e delle query. SSMS-EE è liberamente distribuibile.

SSMS-EE permette di connettersi a SQL Server Express e alle altre edizioni di SQL Server 2005, a SQL Server 2000 ed a MSDE 2000. Utilizzando una semplice procedura di connessione guidata, l'utente è condotto attraverso la selezione delle istanze e dei metodi di autenticazione da utilizzare, verso la realizzazione di connessioni sia remote che locali. L'Object Explorer enumera e mostra l'elenco degli oggetti comuni utilizzati, come l'istanza, le tabelle, stored procedure e così via, in una disposizione gerarchica che aiuta l'utente nell'accesso visuale al database.

Tutte le funzionalità di gestione di database sono disponibili nel menu contestuale che appare facendo click col tasto destro del mouse su un oggetto esposto nell'Object Explorer. Le funzionalità di SSMS-EE, come creazione e modifica di database, tabelle, viste, criteri di accesso ed utenti, sono identiche a quelle presenti nel SQL Server Management Studio distribuito con le altre edizioni di SQL Server. Questo permette di mettere a frutto l'esperienza acquisita nell'eventualità di un passaggio alla versione completa di SSMS.

Molti utilizzatori di database preferiscono gestire i propri server con T-SQL per poter disporre di un controllo più fine di quanto consentito dall'interfaccia grafica. Il Query Editor implementato in SSMS-EE permette a questi utenti di sviluppare ed eseguire costrutti T-SQL e script. Il Query Editor possiede una ricca dotazione di strumenti come l'editor di codice con colorazione automatica della sintassi (syntax highlighting o color coding) ed il pannello risultati con una griglia nella quale vengono restituiti i risultati oppure i messaggi relativi agli eventuali errori verificatisi. SSMS-EE possiede tutte le caratteristiche presenti nell'editor di query presente su SSMS, incluso il costruttore grafico di query.

Click to enlarge
Query Editor (clicca l'immagine per ingrandirla)

SSMS-EE è scaricabile dalla rete come file separato. Glil utenti devono semplicemente cliccare sull'eseguibile per lanciare l'installazione. Se SSMS è già presente, il processo di installazione si interrompe automaticamente (perché non necessario). Analogamente, per disinstallare dal sistema SMSS-EE, potrà essere utilizzato lo stesso eseguibile oppure lo strumento Aggiungi o Rimuovi programmi dal Pannello di Controllo di Windows.

Tra gli strumenti distribuiti con SQL Server Express troviamo SQL Computer Manager, SQL Command e BCP. SQL Computer Manager serve ad avviare o fermare il Servizio di SQL Server ed anche per abilitare o disabilitare i protocolli di rete. SQL Command permette di eseguire delle query o stabilire delle connessioni a un database via riga di comando. BCP è da utilizzarsi, invece, per la copia di grossi volumi di dati.

Con SQL Computer Manager gli amministratori potranno configurare servizi di base e protocolli di rete. Esso è l'equivalente, per SQL Express, dei vecchi moduli Server Network Utility, Client Network Utility e Service Manager; questo modulo non è stato pensato per regolare caratteristiche di prestazione e di operazioni di SQL Server.

In Computer Manager c'è un nodo, "Microsoft SQL Servers", che comprende tutti i servizi, i protocolli di rete dei server e dei client. Il nodo dei servizi elenca tutti i servizi di Express disponibili e fornisce dettagli come il nome dell'istanza , lo stato del servizio, ed il tipo di avvio. E' possibile selezionare un particolare servizio e compiere su di esso delle operazioni quali l'avvio, l'arresto, la sospensione o il riavvio. Nel nodo Server Network Protocols è enumerata la lista dei protocolli di ogni istanza di database sistente su quella macchina. Cliccando il nome di un protocollo nella lista col tasto destro del mouse, provocheremo l'apertura di un menu contestuale da cui potremo scegliere di abilitare o disabilitare quel protocollo oppure cambiare i suoi settaggi su quell'istanza di SQL Server. Lo stesso vale per il nodo Client Network Protocols. Si noti che il nodo Server Network Protocols agisce direttamente sulle impostazioni di protocollo dell'istanza di SQL Server, mentre il nodo Client Network Protocol è deputato alla gestione dei protocolli sul Client come, ad esempio, MDAC o il provider SQL Native Client. Il Client Network Protocol ci consente anche la creazione di un alias (cioè di un nome alternativo per un'istanza) di SQL Server, può inoltre contenere informazioni quali il nome del server, il protocollo utilizzato, la stringa di connessione ed informazioni sulla criptazione dei dati.

SQL Command è una versione OLEDB dello strumento osql. Questo è più di un semplice tentativo di mantenere intatta la compatibilità funzionale col vecchio osql. Esso infatti offre il pieno supporto ai nuovi tipi di dato presenti in SQL Server 2005. Tutte le opzioni dei comandi in linea producono un flusso di informazioni sulla periferica di output standard. A ciò fa eccezione l'output dei messaggi d'errore qualora una qualche operazione dovesse fallire. Il comando SqlCmd -? mostrerà a video un riepilogo della sintassi degli switch utilizzabili con sqlcmd.

Le versioni di SQL Computer Manager e SQL Command sono le stesse sia per SQL Server Express che per le altre edizioni di SQL Server 2005.

Supporto di rete
Per default, solo i tipi di connessione con memoria condivisa sono accessibili da SQL Server Express. L'utente può tuttavia trasformarle in connessioni di altro tipo come TCP/IP o Named Pipes. I protocolli VIA ed HTTP non sono supportati da SQL Server Express.

Con le sole connessioni (a memoria condivisa) disponibili di default, risulta impossibile connettersi a SQL Server Express da una macchina remota fintanto che non viene abilitato il (servizio di) Networking.
L'abilitazione di questo servizio può essere compiuta in differenti modi:

  • Utilizzando lo strumento Surface Area Configuration per abilitare il networking, e facendo partire il servizio SQL BROWSER.
  • Utilizzando il SQL Server Configuration Manager per abilitare i relativi protocolli e lanciando il SQL BROWSER . Accanto è mostrato come utilizzare questo strumento per abilitare i protocolli di rete.
  • Scrivendo DISABLENETWORKPROTOCOLS=0 nella linea di comando del Setup, se conosciamo in anticipo il tipo di supporto di rete necessario.
  • Utilizzando degli script basati su SMO per abilitare i protocolli.
Click to enlarge
Utilizzo di SQL Server Configuration Manager per abilitare i protocolli di rete
(clicca l'immagine per ingrandirla)

SQL Browser è un nuovo servizio distribuito con SQL Server 2005, utilizzabile per identificare su quali porte le istanze denominate (di SQL Server) stanno in ascolto. Non interessando l'uso della memoria condivisa, questo servizio viene disabilitato di default da SQL Server Express. Questo significa che l'utente deve avviare questo servizio se vuole avvalersene.

Nota    È interessante notare che il SQL Browser resta in ascolto con UDP sulla porta 1434. Le versioni di SQL Server 2000 precedenti alla SP3, che usano la stessa porta UDP 1434, potrebbero generare un errore di risoluzione dei nomi da parte di SQL Browser. Per evitare questo errore sarà necessario aggiornare tutte le istanze di SQL Server 2000 al SP3 o successivi.

Supporto per l'Accesso ai Dati
SQL Server 2005 Express supporta gli stessi provider nativi gestiti da SQL Server 2005. Ciò comporta l'enorme vantaggio di veder funzionare allo stesso modo sulle diverse edizioni di SQL Server 2005 un'applicazione scritta per SQL Server Express.

SQL Server 2005 Express supporta ADO.NET per l'accesso gestito. Si raccomanda di utilizzare il data provider di SQL Client per lo sviluppo di nuove applicazioni, dato che molte delle caratteristiche di XCopy sono disponibili solo utilizzando SQL Client. I data provider ADONET2.0 (presenti in VS2005) supportano i nuovi tipi di dato di SQL Server varchar(MAX) ed XML ed i tipi definiti dall'utente.

Partendo con SQL Server 2005, le sessioni logiche nel server sono distinte da quelle fisiche. Gli strati di trasporto (dati), sia sul client che sul server, vengono continuamente aggiornati al fine di far coesistere molteplici connessioni logiche su una singola connessione fisica. Questo permette all'utente di avere piu result-set attivi (MARS) sulla stessa connessione Si noti che MARS, in generale, non ha lo scopo di rimuovere il bisogno di connessioni multiple. MARS, che è disattivo di default in SQL Server 2005, permette di interfogliare (atttivare nello stesso tempo) diverse operazioni di SQL Server. Per esempio, con MARS, si potrebbe lavorare su di un result-set ed eseguire comandi sul database senza aprire delle nuove connessioni. In molte situazioni del genere, MARS potrebbe effettivamente sostituire l'utilizzo dei cursori lato server e si rivela particolarmente utile quando c'è la necessità di eseguire operazioni di recupero ed aggiornamento dei dati utilizzando la stessa transazione.

I client di SQL Server 2005 supportano anche l'Input/Output (I/O) Asincrono che evita il 'congelamento' dei thread delle diverse applicazioni durante le operazioni di trasferimento dati; ciò contribuisce ad aumentare la reattività delle applicazioni client. In questo (nuovo) modello di funzionamento, le risposte alle chiamate di I/O vengono restituite immediatamente mentre il compimento effettivo delle operazioni verrà notificato all'applicazione successivamente, in maniera asincrona. In tal modo l'applicazione potrà proseguire con le altre elaborazioni e gestire l'avvenuta conclusione di un evento in un secondo momento.

In SQL Server 2005 l'intervallo di tempo (di esecuzione) dedicato ai componenti di accesso ai dati è suddiviso in due parti: una per lo stack MDAC che è parte del sistema operativo, l’altro per il provider del Client Nativo di SQL Server che fornisce a SQL Server le specifiche librerie per l’accesso ai dati nativo (verso varie fonti di dati [n.d.t.]). Il SQL Native Client è mirato verso SQL OLEDB, SQL ODBC e verso gli utilizzatori di ADO che stanno scrivendo nuove applicazioni o potenziando quelle esistenti per trarre vantaggio dalle nuove funzionalità di SQL Server 2005.

SQL Native Client possiede tutte le aggiunte effettuate su SQL Server 2005 per quanto concerne SQL OLE DB, SQL ODBC, SQL BCP e l’interfaccia di rete SQL Networking Interface. Particolarità di SQL Server 2005 quali MARS, tipi definiti dall’utente, XML data type, ecc., sono fruibili per i programmatori C e C++ solo via SQL Native Client. SQL Native Client è costituito da nuove componenti (nuovi IDentificatori di classe) che sono separati e distinti dai componenti MDAC esistenti. Ad esempio, per l’OLEDB_ProgId utilizzato in SQLNCLI, il nome del driver ODBC è SQL Native Client; il file di header utilizzato è SQLNCLI.h.

SQL Native Client risiede in una singola dll (SQLNCLI.dll). Non facendo parte del sistema operativo, questa risulterà essere più semplicemente manutenibile facilitando le operazioni di sviluppo e distribuzione delle applicazioni. In futuro, contemporaneamente ad ogni rilascio di SQL Server verrà distribuita una versione aggiornata di SQL Native Client; le diverse applicazioni potranno esplicitamente cambiare il proprio manifesto di configurazione al fine di utilizzare una versione più recente di questo provider.

Ci sono alcune interessanti dinamiche basate sull'interazione tra i provider MDAC e SQL Native Client. Ad esempio, con MDAC 2.5, 2.7 o 2.8 è impossibile connettersi a SQL Server in modalità 'Memoria Condivisa'. Ciò influenza ogni applicazione che faccia uso di SQL OLE DB o SQL ODBC includendo tra queste non solo le applicazioni native esistenti, ma anche quelle gestite con OLE DB o ODBC che utilizzino internamente MDAC. Tipicamente, in ambiente SQL Server, quando la connessione in memoria fallisce vengono utilizzati protocolli di rete quali TCP/IP. Tuttavia, per SQL Server Express, siccome la gestione della rete è disabilitata per default, questo tipo di connessione fallirà sistematicamente. A ciò si rimedia facendo usare all'applicazione il SQL Native Client, oppure abilitando il protocollo Trasmission Control Protocol (TCP) ed avviando il (servizio) SQL Browser.

Sicurezza
Uno degli obiettivi di SQL Server Express è quello di fornire dei livelli di sicurezza di default per tutte le sue diverse componenti. Ad esempio, i protocolli di rete come il TCP/IP o le Named Pipes sono disabilitati per default; il servizio SQL Browser non viene avviato a meno che l'utente non lo chieda esplicitamente nella linea di comando del setup; quando viene utilizzata l'Autenticazione di Windows (Windows Authentication) gli account SA o System Admin sono disabilitati; gli utenti normali sulla macchina non possiedo quasi nessun privilegio sull'istanza di SQL Server Express. Affinché un utente normale possa utilizzare tutte le funzionalità di SQL, è necessario che un amministratore locale del server gli fornisca esplicitamente i relativi permessi.

L'utente SA è uno speciale utente di SQL Server che appartiene al ruolo degli Amministratori di Sistema (SysAdmin). È prevalentemente utilizzato in configurazioni che utilizzano la modalità di autenticazione basata su SQL Server (SQL Authentication) ed è da non utilizzare assieme all'autenticazione di Windows. Per ovvii motivi di sicurezza, durante l'installazione via interfaccia grafica o durante quella silente in modalità di autenticazione di SQL Server, viene richiesta una password 'solida' (cioè robusta, ben definita, difficile da ricostruire) da assegnare all'utente SA. Tale password non verrà invece richiesta durante l'installazione silente in modalità di autenticazione Windows. Ciò che accade in questo caso, infatti, è che sarà il Setup di SQL Server Express stesso a preoccuparsi di generare in maniera casuale una password 'solida' per il profilo SA. Oltre a ciò, in questa situazione, il Setup disabiliterà l'account SA, che dovrà dunque essere riabilitato a mano, utilizzando T-SQL, nel caso in cui fossimo nel bisogno di doverlo utilizzare. Tutto questo meccanismo è stato messo in piedi per non costringere gli ISV a dover inserire una password anche quando utilizzino la Windows Authentication, così da allargare lo scenario di 'mass deployment' (cioè installazioni contemporanee ed automatizzate di istanze SQL Server su più macchine client). Nelle distribuzioni future (di SQL Server) questa funzionalità potrebbe essere estesa anche all'installazione basata su interfaccia grafica.

Supporto alla replicazione
Le Repliche consentono di mantenere copie dei dati in differenti locazioni utilizzando un modello publisher-subscriber (editore-sottoscrittore) con sincronizzazione delle repliche ad intervalli definiti dall'utente. SQL Server Express supporta la sottoscrizione a servizi di unione, copia e pubblicazione transazionale, ma non consente le pubblicazioni stesse. Le sottoscrizioni ad un servizio di pubblicazione sono completamente funzionanti in SQL Server Express anche se, non possedendo esso il SQL Agent, la programmazione delle sottoscrizioni risulta problematica. Per sincronizzare le diverse sottoscrizioni con SQL Server Express, si dovranno seguire queste due strade:

SQL Service Broker
SQL Service Broker (SSB, Servizio di Intermediazione di SQL Server) è la nuova affidabile infrastruttura di gestione dei messaggi di SQL Server 2005. I programmi di servizio (a SQL Server) possono scegliere di comunicare (tra loro o con SQL Server) attraverso un contratto di scambio di messaggi di tipo peer-to-peer chiamato dialogo. Questa caratteristica è accessibile attraverso estensioni al linguaggio T-SQL.

SQL Server Express può utilizzare il Service Broker solamente in associazione con le altre edizioni di SQL Server 2005. Se SQL Server Express ricevesse un messaggio dal Broker di un'altra istanza Express senza che nessun altro SQL Server 2005 lo abbia già processato, allora quel messaggio sarebbe perduto. Dunque un messaggio può essere originato da un'istanza Express e ricevuto da un'altra istanza Express, ma (nel caso si volesse/dovesse conservare) dovrà essere inoltrato anche verso un'istanza non Express di SQL Server. È possibile verificare un evento di Message Drop (di caduta, perdita del messaggio) esaminando il tracciato degli eventi accessibile dal Profiler o utilizzando le stored procedure di tracciamento. Il messaggio di errore relativo al messaggio perduto è del tipo: "This message has been dropped due to licensing restrictions".

Prendiamo ad esempio uno scenario su grande scala e consideriamo un'applicazione che comprende 100 istanze di SQL Server Express distribuite su registratori di cassa, e dove ognuna di esse è connessa ad un unico terminale SQL Server non Express di back-end. In uno scenario siffatto tutto procede correttamente finché il server di back-end è coinvolto in tutti i dialoghi tra le istanze. Le istanze di SQL Server Express non possono innestare alcun dialogo di successo con un'altra istanza senza transitare attraverso il server di back-end.

User Instance
Le User Instance (Istanze Utente) sono una nuova caratteristica di SQL Server Express che implementa la possibilità di trattare i database come normali file. Grazie a ciò, un database locale potrà essere spostato, copiato o inviato per posta elettronica assieme all'applicazione. Nessuna ulteriore configurazione dovrà essere operata per renderlo di nuovo funzionante nella sua nuova posizione. Ci sono tre caratteristiche principali che abilitano il supporto dell'Application User Instance in SQL Server Express: l'opzione AttachDBFilename nella stringa di connessione, la mancanza del requisito del del nome logico del database e l'opzione User Instance.

Ci sono dei presupposti impliciti per il supporto delle User Instance. Si assume che un'istanza di SQL Server Express di nome SQLEXPRESS sia già presente sulla macchina, che sia una soluzione di tipo managed-stack-only e che si debba necessariamente utilizzare il .NET SQL Server Data Provider per sviluppare applicazioni distribuibili con il metodo 'XCopy'. In altri termini, non è possibile utilizzare SQL Native Client o MDAC per sviluppare applicazioni utilizzabili con le User Instance.

Tipicamente, lo sviluppatore dovrebbe solo copiare il database ed il file di log assieme all'applicazione. In SQL Server sono tuttavia presenti, all'interno di uno speciale database di sistema denominato Master, alcuni parametri di configurazione che possono influenzare il comportamenteo di un'applicazione. Le caratteristiche di un'applicazione che si basano sui parametri del database Master includono l'autenticazione SQL (la forma di autenticazione consigliata, quando possibile, è la Windows authentication). Se una nostra applicazione fa riferimento anche alle chiavi del database Master, allora dovrà essere lo sviluppatore ad assicurarsi che queste vengano replicate nel sistema di destinazione. Un modo perché ciò sia assicurato è includere uno script di configurazione (SMO, DMO o T-SQL) assieme all'applicazione da eseguirsi all'atto dell'installazione sulla macchina di destinazione. Per la maggior parte delle applicazioni funzionanti con la Windows Authentication, la replica delle informazioni dal database Master non dovrebbe essere necessaria.

AttachDBFileName
Nella stringa di connessione per il parametro AttachDBFileName è possibile specificare sia un percorso assoluto che relativo. Quando la connessione viene aperta, il file di database specificato viene 'allacciato' e diviene il database di default per tale connessione. Se tuttavia il database fosse già connesso, l'invocazione di AttachDBFileName non produrrebbe risultato alcuno. La parola chiave AttachDBFileName supporta una specifica stringa chiamata |DataDirectory| che a runtime punta alla cartella dei dati dell'applicazione, dove i file del database sono memorizzati. Questa speciale stringa, che dovrebbe comparire all'inizio del percorso del file, lavora solo sul file system locale e, per evitare che il percorso del file indicato appartenga ad una directory di livello superiore a quello indicato, viene effettuato un controllo sull'eventuale presenza di sequenze \..\ nel path.

Quando si utilizza la chiave AttachDBFilename ci sono alcune variazioni nell'uso dei file di log di cui si deve tener conto. Il nome del file di log dev'essere espresso nel formato <database-File-Name>_log.ldf, e non esiste nessuna opzione utilizzabile con AttachDBFilename in grado di modificarlo. Ad esempio, se il nome del database myDb.mdf si trovasse in c:\myApp, allora il suo file di log dovrebbe chiamarsi myDb_log.ldf. Se SQL non riuscisse a trovare questo file nella stessa cartella del file del database, allora ne creerebbe uno nuovo durante la fase di connessione. Tutto ciò sta a significare che l'utilizzo di AttachDBFilename esclude la possibilità di file di log definiti dall'utente.

SQL Server supporta molteplici file di log e di dati per uno stesso database e questi file possono anche venire suddivisi in molteplici gruppi di file. Questa caratteristica non è però disponibile utilizzando la sintassi di AttachDBFileName. Non sono supportate (da SQL Server Express) neppure la condivisione sulla rete, i percorsi HTTP o la Universal Naming Convention (UNC) per i DB remoti.

Logical database name (Nome logico del database)
Quando il Nome logico del database non viene specificato nella stringa di connessione, viene generato automaticamente. La costruzione del nome avviene in base al percorso relativo in cui si trova il file .mdf. Ad esempio, se il file è posizionato in c:\myDocuments\Myapp\myDB.mdf, il nome logico del database sarà basato sull'intero percorso. Quando invece il path del file è più lungo di 128 caratteri, allora per la generazione del nome logico si utilizza il percorso esistente ed un codice di hash generato automaticamente. Questa è una novità introdotta in SQL Server Express visto che, in SQL Server 2000, l'assenza del nome del database produceva un errore. La sintassi supportata include database=; o initial catalog=; oppure l'utente può omettere del tutto il nome del database dalla stringa di connessione.

Questa caratteristica è utile quando si ha l'esigenza di spostare o copiare database sulla stessa macchina, dato che il nome logico basato sul percorso del file è univoco. L'assenza di questa caratteristica avrebbe comportato la segnalazione di conflitti di nomi all'interno di SQL Server, qualora lo stesso nome logico fosse stato utilizzato per aprire database in due cartelle differenti. XCopy di applicazioni è in grado di lavorare anche su più macchine.

Si noti che è sempre possibile indicare esplicitamente il nome logico del database utilizzando la chiave database o Initial Catalog. L'indicazione esplicita del nome logico potrebbe essere voluta per l'utilizzo di repliche, di condivisione di servizi SQL (SQL Server Broker), nomi pluricomposti in query T-SQL, o in scenari di dati distribuiti su più database.

Auto-Close
L'Auto-Chiusura esisteva già in SQL Server 2000 ed è abilitata di default in SQL Server Express. Questa funzionalità fa sì che il blocco sul file di database venga rilasciato quando non esistono più connessioni attive su di esso. In tal maniera il database è pronto per essere spostato o copiato non appena l'applicazione che lo utilizza viene chiusa.

Tuttavia, dal punto di vista dell'utente, l'auto-chiusura non sempre funziona, specialmente durante una chiusura inaspettata di un client, o mentre si usa un pool di connessioni. Per chiusure inaspettate di client, le connessioni vengono 'pulite' eventualmente dal meccanismo di time-out. Quando è abilitato il pool di connessioni, le connessioni non vengono effettivamente chiuse quando l'utente richiede la chiusura della connessione, ma restituite al pool. Per chiudere tutte le connessioni, si deve solitamente chiudere il dominio dell'applicazione oppure devono essere chiuse tutte le connessioni aperte. ADO.NET contiene anche funzioni come ClearPool per i reset manuali.

User Instance
Le User Instance consentono ad un utente non amministratore di agganciare ed amministrare un database SQL Server Express. Per far questo esse creano una copia privata di SQL Server che gira nel contesto di sicurezza dell'utente che apre la connessione al database. L'account dell'utente che apre la connessione diventa l'account del servizio della User Instance, e ad esso vengono assegnati tutti i permessi del Database System Administrator. Questi permessi consentono ad un utente non-amministratore di Windows di avere i diritti di amministratore sul database. Grazie a ciò essi potranno agganciare altri database servendosi di AttachDBFilename, oppure creare un qualunque altro oggetto di database; questo modo di operare è ideale per gli sviluppatori di applicazioni di database.

Setup e Deployment
Il procedimento di setup di SQL Server Express è una versione semplificata di quello di SQL Server 2005. È robusto, affidabile e supporta sia la modalità ad interfaccia grafica che quella 'silente' (a riga di comando senza interazione con l'utente [n.d.t.]). L'unica tecnologia supportata (dal Setup) è quella basata sul Windows-Installer (.msi).

La versione di SQL Server Express scaricabile dal Web è composta da un singolo file eseguibile compilato utilizzando una tecnologia di installazione Microsoft chiamata SFXCab. Puoi scaricare SQL Server Express dal Microsoft Download Center. Un doppio click sul file .exe causerà l'avvio automatico del processo di installazione.

La versione del Framework .NET di Visual Studio 2005 è un prerequisito per l'installazione di SQL Server Express, ed il setup segnalerà un errore qualora non dovesse riscontrare la versione corretta sulla macchina. Il setup possiede un componente chiamato System Configuration Check (SCC) che viene avviato prima che inizi l'effettiva procedura di setup. Questo strumento verifica che il sistema possegga i requisiti minimi per l'installazione; questi concernono hardware, Sistema Operativo installato, richieste di riavvio pendenti, ecc.. Molti utenti potrebbero incorrere nell'errore causato da una richiesta di reboot inevasa (generata da un altro precedente processo di installazione, magari automatico, tutt'altro che infrequente su macchine Windows Server [n.d.t]) e, per evitarlo, farebbero bene a riavviare la macchina prima di cominciare l'installazione di SQL Server. Il vantaggio principale del SCC è che gli errori di installazione più comuni dovuti ad una cattiva configurazione della macchina vengono individuati in anticipo e comunicati con appropriati messaggi di avvertimento all'utente. Ad esempio, il SCC genererà un messaggio di avvertimento - ma procederà ugualmente con l'istallazione - se sulla macchina sono presenti solamente 256MB di RAM. In figura 3 è mostrata una schermata di esempio di SCC.


System Configuration Check

Una volta avviato il setup, noterete che le schermate sono semplificate per essere accessibili a sviluppatori di tutti i livelli di esperienza. Ad esempio, alcune complesse finestre di dialogo quali quelle che trattano dei confronti e degli account dei servizi sono nascoste per default, per mezzo della casella di controllo Nascondi Configurazioni Avanzate. Se l'utente toglie la spunta a questa opzione, verrà mostrata la finestra di dialogo per le configurazioni avanzate. Il log del Setup è attivo per default cosicché l'utente possa facilmente scovare ogni mancato funzionamento del processo esaminando il file di log creato nella cartella \ProgramFiles\Microsoft SQL Server\90\Setup Bootstrap\LOG.

SQL Server Express si installa di default come Named Instance di nome SQLEXPRESS e si raccomanda che le varie applicazioni utilizzino l'istanza condivisa SQLEXPRESS. Sempre per default, molte caratteristiche di SQL sono disattivate, sarà dunque necessario indicare esplicitamente quali siano le componenti che si vogliono installare. L'elenco delle caratteristiche che è possibile selezionare per l'installazione è mostrato sotto. Il comando in linea di setup ADDLOCAL=ALL provoca la selezione di tutte le componenti disponibili per l'installazione. Nella Tabella 1 è mostrato l'albero delle voci selezionabili dall'interfaccia grafica con le corrispondenti opzioni dei comandi in linea.

Tabella 1. Albero delle componenti caratteristiche di SQL Server Express
GUI (Graphical User Interface) Parametri da Linea di Comando:
una lista di elementi separati da virgola e non contenenti spazi, delle caratteristiche da installare dopo ADDLOCAL.
SQL Server Database Services SQL_Engine
Data Files SQLEngine_Data_Files
Replication SQL_Replication
Componenti Client Client_Components
Strumenti SQL Command Line Server_tools
Componenti per la Connettività Connectivity
Strumenti di Sviluppo Software (Software Development Kit) SDK

Il setup via interfaccia grafica è raccomandato quando si esegue da soli l'installazione del prodotto (una copia di SQL Server Express è di solito scaricata da un sito Microsoft oppure presa da un CD).

L'uso della modalità 'silente' di setup è raccomandato quando sia necessario installare SQL Server Express come parte dell'installazione di un'altra applicazione. In questo modo si può verificare se un'istanza di nome SQLEXPRESS sia già presente sulla macchina e, in caso non lo fosse, installarla in maniera silente. Esistono altri due semplici modi per identificare la presenza di un'istanza di SQL Server Express su una macchina:

E' possibile utilizzare la parte iniziale del Setup oppure la tecnologia "Click Once" di Visual Studio per includere il Microsoft Windows Installer (MSI) di SQL Server Express oppure il download dell'eseguibile dal Web (che è particolarmente utile per gli ISV). Sarebbe bene non effettuare l'installazione di SQL Server Express quando è già presente un'istanza di SQLEXPRESS. Un'altra cosa importante da tenere a mente è che il .msi chaining (l'unione di più file di installazione .msi all'interno di un unico file .msi [n.d.t.]) è una pratica non supportata da Microsoft, e non dovrebbe essere seguita. SQL Server Express non supporta neanche l'unione di più moduli. Nel caso in cui fossimo in presenza di un'intallazione di MSDE non rilevabile nella scheda Aggiungi o Rimuovi Programmi del Pannello di Controllo, dovremo eseguire l'installazione pulita (clean installation) di SQL Server Express.

Di seguito sono riportati alcuni dei comandi in linea più comuni:

Supporto delle lingue
Le lingue supportate dal motore del database di SQL Server Express sono tutte e 12 le lingue già supportate da MSDE. Le lingue prese in considerazione sono: Inglese, Brasiliano Portoghese, Belga, Svedese, Cinese semplificato, Cinese tradizionale, Francese, Tedesco, Italiano, Giapponese, Coreano e Spagnolo.

Supporto offerto
Informazioni di supporto per SQL Server Express sono ottenibili sia dai diversi newsgroups che dalla documentazione disponibile sul Web tipo i white papers ed i SQL Books Online.

Requisiti Hardware/Software
Per maggiori informazioni relative ai fabbisogni hardware e software di SQL Server Express, fate riferimento ai SQL Server BooksOnline.

Supporto delle architetture a 64-bit
SQL Server Express non è installabile su macchine con architettura IA64, ma potrà girare su macchine a 64bit sfruttando la tecnologia Windows on Windows (WOW). WOW, in pratica, consentirà alla versione a 32 bit dell'Express di girare su una macchina a 64bit.

Caratteristiche Non Presenti in SQL Server Express
Alcune delle caratteristiche disponibili nelle altre edizioni di SQL Server sono assenti in SQL Server Express, vediamone alcune:

NB: la ricerca Full Text ed il Reporting Services verranno inseriti in SQL Server Express Edition, al più tardi, nel 2006

Integrazione con Visual Studio
SQL Server Express viene installato con tutte le edizioni di Visual Studio. Durante l'installazione di Visual Studio, il setup installa il SQL Server Express ed assegnerà il nome SQLEXPRESS alla sua istanza. In SQL Server Express tutte le applicazioni fanno riferimento all'istanza di nome SQLEXPRESS. L'obiettivo dell'integrazione tra Visual Studio e SQL Server Express è quello di rendere l'accesso ad un database con SQL Server Express semplice e facile come quello con Jet, e questo non solo per applicazioni client ma anche per scenari Web Server di ASP.NET.

Per esempio, un oggetto database, che è un modello di database SQL Server, è compreso tra i progetti di Visual Studio. Questo oggetto viene mostrato quando l'utente sceglie l'opzione Aggiungi nuovo Oggetto in un progetto di Visual Studio. Una volta che il database è stato aggiunto al progetto, la connessione al database (e la sua gestione) avviene in maniera automatica così che l'utente può cliccare l'oggetto database per vedere tutti gli oggetti in esso contenuti come tabelle, stored procedure, ecc.. Potremo addirittura servirci del drag and drop per trascinare una tabella del database direttamente sopra una form. Nel caso di sviluppo di un'applicazione Web con Visual Web Developer, gli oggetti GridView e relativa SqlDataSource verrebbero creati automaticamente senza che noi si debba scrivere una sola riga di codice. E' anche possibile realizzare il binding di un controllo - textbox, ad esempio - ad un campo del database con una semplice operazione di drag and drop. Tutte le impostazioni delle stringhe di connessione vengono memorizzate in maniera centralizzata in un unico file Web.config in modo che il programmatore possa apportare eventuali modifiche in una singola locazione.

Visual Studio utilizza la User Instance di SQL Server Express in modo da consentire, all'interno di un progetto di Visual Studio, il trattamento dei file di database di SQL Server come semplici file di Windows. Dunque è possibile, ad esempio, rinominare, cancellare, copiare o spostare un file di database (.mdf) nella Data Directory proprio come fosse un file di Jet. Durante le copie o gli spostamenti, Visual Studio si preoccupa di mantenere l'associazione tra il database ed il file di log associato. La gestione di tutte queste operazioni è svolta con successo anche mentre un processo o una pagina ASP.NET operano sul database. Tutto ciò evita allo sviluppatore di un'applicazione standard in ambiente Visual Studio di doversi preoccupare dei file di login durante le fasi di disegno e sviluppo. I file di log, durante la fase di sviluppo debbono comunque essere spostati assieme ai file di database.

Confronto con gli altri database gratuiti di Microsoft
Confronto con MSDE

SQL Server Express sostituisce, in SQL Server 2005, il Microsoft SQL Server Desktop Engine (MSDE). SQL Server Express mette a disposizione numerose funzionalità semplici da usare che fanno sì che possano utilizzarlo sia lo sviluppatore non professionista che il programmatore per hobby. MSDE è costruito utilizzando la tecnologia di SQL 2000 ed il suo utilizzo è raccomandato per piattaforme Windows98. SQL Server Express è invece basato sulla tecnologia di SQL Server 2005. SQL Server Express possiede caratteristiche come l'Application XCopy, il Robust Setup UI, il supporto del CLR, strumenti ad interfaccia grafica, e l'integrazione con Visual Studio che sono assenti in MSDE. Alcune caratteristiche presenti in MSDE, sono invece state rimosse da SQL Server Express. Tra queste ricordiamo il DTS, il pubblicatore di repliche e l'Agente SQL.

L'utilizzo di moduli di fusione per la distribuzione di dati, che aveva comportato difficoltà di manutenzione per MSDE, non è più presente in SQL Server Express. La strozzatura del carico di lavoro di MSDE è stata talvolta difficile da capire ed usare. In SQL Server Express è stata rimossa e il motore usa CPU, RAM, ed le limitazioni alla dimensione del database per differenziare la versione Express dalla altre versioni. La tabella che segue mostra il confronto tra questi prodotti.

Tabella 2. Confronto di MSDE con SQL Server Express
SQL Server Express 2005 MSDE 2000
Supporto della User Instance Caratteristica non presente
DTS disponibile come download separato DTS runtime presente
Easy deployment because of no MDAC MDAC è incluso nel programma di installazione
MSI only, good servicing story MSI and MSM, servicing of MSM hard
Subscriber Replication for Transactional, Merge, and snapshot Merge/snapshot publication supported in addition to replication subscription
Robusta Interfaccia Utente (UI) di Setup Basic setup UI
No agente Agente presente
Supporta Windows 2000 SP4, Windows XP SP1, and Windows 2003 Supporta Windows 98, Windows Me, Windows 2000, Windows XP, Windows NT4, e Windows 2003
Supporto del CLR CLR non supportato
Presenza di strumenti GUI Nessuno strumento GUI
Dimensione massima del database: 4 GB Dimensione massima del database: 2 GB
1 CPU, 1 GB RAM 2 CPU, 2 GB RAM
Nessun limite al numero di operazioni concorrenti Non più di 5 processi concorrenti
Profonda integrazione con Visual Studio Scarsa integrazione con Visual Studio

Confronto con Jet
SQL Server Express è basato sulla più recente tecnologia SQL Server 2005 , mentre Jet è già da molto nello stadio di service pack e di manutenzione. Tutte le più recenti e grandi novità, come l'integrazione con il CLR ed il supporto all'XML, sono presenti solo in SQL Server Express. Anche l'affidabilità e la scalabilità di SQL Server sono significativamente maggiori di quelle offerte da Jet. Le applicazioni scritte utilizzando SQL Server Express possono essere facilmente trasportate sulle edizioni SQL Server Workgroup, Standard o Enterprise, mentre Jet è più difficilmente scalabile.

Dal punto di vista della sicurezza sui propri database, SQL Server Express permette un controllo molto più fine di quello consentito da Jet. Grazie a caratteristiche quali la User Instance e la stretta integrazione con Visual Studio 2005, si sta portando su SQL Server Express la semplicità d'utilizzo di Jet.

Conclusioni
SQL Server Express è un prodotto significativo per Microsoft, poiché è progettato specificatamente per programmatori non professionisti, ISV (Indipendent Software Vendor), ed hobbisti. E' gratuito, semplice da utilizzare, distribuito con potenti funzionalità e fornisce un passaggio indolore alle altre edizioni di SQL Server. Ci sono caratteristiche come le User Instance che sono peculiari di SQL Server Express, e l'installazione e la distribuzione sono sicure per default. Ha grandi vataggi sugli esistenti database gratutiti di Microsoft, Jet e MSDE. L'integrazione di SQL Server Express con Visual Studio 2005 semplifica la progettazione di database ed l'esperienza di sviluppo.