E’ stata rilasciata ieri la versione RTM di SQL Server 2008 R2.

La nascita di questa versione migliorata e potenziata di SQL Server è stata in larga misura condivisa con i feedback forniti dai clienti che utilizzano SQL Server, fornendo a  Microsoft lo spunto per la creazione di quella che è stata ribattezzata la “piattaforma delle informazioni”.

Il consolidamento di SQL Server 2008 come mission critical platform, una migliore capacità di amministrazione multi-server e centralizzata, la gestione di flussi di eventi complessi in tempo reale, la business intelligence “self-service” sono tra le novità più interessanti di questa release.

Ci sono anche due nuove versioni: Datacenter e Parallel Data Warehouse, dedicate in modo particolare a grandi organizzazioni e alla gestione di data warehouse di dimensione considerevole che necessitano di elevata potenza di calcolo.

In questa pagina di MSDN trovate riepilogate le novità principali della versione R2.

La nuova versione di SQL Server sarà resa disponibile per il download ai sottoscrittori di MSDN e Technet il 3 maggio, mentre la disponibilità a livello mondiale sarà per il 13 maggio.

Per chi vuole dare un’occhiata più da vicino alle varie features di “R2” è disponibile il SQL Server 2008 R2 Digital Tour.

Enjoy SQL Server 2008 R2 !

Microsoft ha rilasciato recentemente due cumulative updates per SQL Server 2008: rispettivamente la CU #8 per la versione con SP1 e la CU #10 per la RTM.

Trovate i dettagli e le istruzioni per il download nei links sottostanti.

http://support.microsoft.com/kb/979065/en-us

http://support.microsoft.com/kb/979064/en-us

Dopo l'installazione della Cumulative Update, la versione di SQL Server 2008 sarà rispettivamente la 10.00.2766 per la CU #7 e 10.00.1835 per la CU #10.

Microsoft ha rilasciato lo scorso 2 marzo il SQL Server 2008 R2 Update for Developers Training Kit, che fornisce agli sviluppatori una notevole quantità di informazioni: presentazioni, video, demo, hands-on-labs.

Utilissimo sia a chi già sviluppa con SQL Server 2008, sia per chi si avvicina ora all’ultima versione di SQL Server e vuole conoscerne le features che può implementare nelle proprie applicazioni.

Lo trovate qui.

Lo scorso 12 Gennaio 2010 è scaduto il supporto del Service Pack 2 di SQL Server 2005, mentre il prossimo 13 Aprile 2010 scadrà quello per SQL Server 2008 RTM.

Questo comporta la necessità di aggiornare prima possibile SQL Server 2005 al Service Pack 3 e SQL Server 2008 al Service Pack 1, pena la mancanza del supporto primario.

Maggiori informazioni sul ciclo di vita del supporto tecnico ai prodotti Microsoft lo trovate in questo sito : http://support.microsoft.com/lifecycle

Paul Randal ha scritto una interessante serie di articoli sulle capacità di backup/restore/repair di SQL Server.

Nell’ultimo articolo si parla del RESTORE ed in particolare

  • Le quattro fasi dell’operazione di restore: come funzionano e come farle funzionare più velocemente

  • Cosa fare per ripristinare un database quando si verifica un disastro

  • Cosa fare quando si è in grado di ripristinare un database

  • Usare le opzioni WITH RECOVERY / NORECOVERY / STANDBY

  • Utilizzo del restore point-in-time

  • Considerazioni sul restore in posizioni differenti dalla posizione originale

Come sempre Paul è chiarissimo e vale davvero la pena leggere i suoi articoli per chiarirsi le idee sul comportamento di SQL Server.

Buona lettura!

Un paio di giorni fa Microsoft ha rilasciato un paio di Cumulative Updates per le versioni RTM e SP1 di SQL Server 2008. Per maggiori informazioni vi rimando ai links sottostanti, nei quali sono indicati tutti i problemi risolti da queste CU e le informazioni su come scaricarle ed installarle.

SQL Server 2008 Cumulative Update #8
Build: 10.00.1823
http://support.microsoft.com/kb/975976

SQL Server 2008 SP1 Cumulative Update #5
Build: 10.00.2746
http://support.microsoft.com/kb/975977

Mi è capitato di leggere su un newsgroup la richiesta “è possibile installare SQL Server Agent su un server diverso da quello dove è presente l’engine ?”.

La risposta è no. L’installazione di SQL Server non lo consente: quando seleziono dall’elenco delle feature disponibili per l’installazione il “Database Engine”, trovo installato anche SQL Server Agent.

Esiste però, per ovviare alla mancanza di questo componente nella versione Express di SQL Server, la versione beta di un prodotto disponibile su Codeplex: Standalone SQL Agent.
Il suo autore indica che nella versione attuale supporta SQL Server 2005 e 2008 ed ha soltanto alcuni tipi di job disponibili (Transact-SQL e comandi di sistema operativo), ma è già pianificata l’estensione ad altre tipologie di job e la creazione di una interfaccia utente già dalle prossime versioni.

Risposta:

select request_session_id, count(*) AS Total
from sys.dm_tran_locks
group by request_session_id

Dal BOL: “sys.dm_tran_locks returns information about currently active lock manager resources. Each row represents a currently active request to the lock manager for a lock that has been granted or is waiting to be granted”

Si preannuncia un autunno davvero caldo… Sono in arrivo una serie di conferenze, tutte dai contenuti tecnici veramente impressionanti.

Quindi… SELECT * FROM Events ORDER BY StartDate, EndDate :-)

PASS Summit Unite
Seattle, WA
2-5 novembre 2009
http://summit2009.sqlpass.org

SQL Connections
Las Vegas, Nevada
9-12 novembre 2009
http://www.devconnections.com/shows/FALL2009SQL

TechEd Europe
Berlino, Germania
9-13 novembre 2009
http://www.microsoft.com/europe/teched/

PDC 2009
Los Angeles, California
17-19 novembre 2009
http://microsoftpdc.com/

Microsoft TechDays-WPC 2009
Milano, Italia
24-26 novembre 2009
http://techdays-wpc.it/

Buon divertimento!

Summit2009_300x250Per chi non conoscesse questo acronimo, PASS sta per Professional Association for SQL Server, una comunità di professionisti IT appassionati di SQL Server che è anche l’organizzatore del più grande evento dedicato a questo prodotto: il PASS Summit Unite (noto anche come PASS Community Summit) che quest’anno si terrà dal 2 al 5 novembre a Seattle.

Ho avuto la fortuna di partecipare qualche anno fa a questo evento ed è veramente un occasione unica per incontrare i maggiori esperti di SQL Server, oltre a buona parte degli sviluppatori di Redmond che non è raro incontrare nelle varie sessioni.

Ed è con estremo piacere che posso dire che, da ieri, anche SQLServerInfo è presente nell’elenco dei bloggers di SQL Server !

Le operazioni di restore o di spostamento di un database su  un altro server modificano la data di creazione del database presente nelle tabelle di sistema (ad esempio sys.databases).

Esiste però un trucchetto per riuscire a recuperare l’effettiva data di creazione dell database originale dalla pagina di boot del database (la pagina 9). Per accedere a queste informazioni occorre sfruttare il flag 3604, che attiva l’accesso alle strutture interne a SQL Server.

DBCC TRACEON(3604)
GO
DBCC PAGE (<MyDatabaseName>, 1, 9, 3)
GO

Cercate il campo dbi_crdate: è la data di creazione originale del database!

Oltre alla data di creazione, questa pagina contiene altre informazioni utili. Ad esempio il campo dbi_dbccLastKnownGood contiene l’ultima data in cui il comando DBCC CHECKDB ha trovato degli errori di corruzione del database. Il campo dbi_maxLogSpaceUsed contiene invece la dimensione massima utilizzata del transaction log.

Purtroppo non esiste moltissima documentazione a riguardo. Direi che la fonte principale rimane ancora la serie di libri Inside SQL Server 200x di Kalen Delaney, dove vengono spiegati molto bene gli internals di SQL Server o il blog di Paul Randal

.

Su Codeplex esiste un custom report (basato sul framework introdotto con la SP2 di SQL Server 2005) che riporta le informazioni sulle partizioni presenti per il database oggetto di analisi: numero di righe per partizione, limiti di ciascuna partizione, informazioni sui filegroups utilizzati.

Ne esiste anche una versione modificata che include anche lo spazio utilizzato/riservato per ciascuna partizione che trovate qui.

Per cercare di chiarire il modello di licensing applicato a SQL Server 2008, Microsoft ha pubblicato la SQL Server 2008 Licensing Guide.

Buona lettura!

Vorrei segnalare la disponibilità delle ultime Cumulative Updates per SQL Server 2008, nelle versioni RTM (build 1812) e con SP1 (build 2723). Le potete trovare qui:

Cumulative Update 3 for SP1:
http://support.microsoft.com/kb/971491

Cumulative Update 6 for RTM:
http://support.microsoft.com/kb/971490

Una sorpresa di SQL Server 2008 Integration Services è il componente Lookup, che è stato riscritto aggiungendo vari miglioramenti, quali ad esempio l’utilizzo di una cache o la diversa gestione dell’output.

SSIS2008_Lookup

E’ infatti possibile scegliere tra:

  • Full cache, che mette l’intero dataset di riferimento in memoria prima di effettuare lookup (efficiente per piccole tabelle)
  • Partial Cache, che prevede il caricamento nella cache delle righe che matchano l’origine dei dati alla prima esecuzione e che alle seguenti richieste sfruttano le informazioni in cache (che può essere opportunamente dimensionata nella pagina delle opzioni avanzate del componente Lookup)
  • No cache.

Nella stessa pagina è possibile ora scegliere come comportarsi con le righe che non matchano con l’origine dei dati, dando così la possibilità di utilizzare tre distinti output: uno per le righe che matchano, uno per quelle che non matchano ed uno per gli eventuali errori.

Joe Chang ha pubblicato oggi un’aggiornamento al suo tool per il monitoraggio delle prestazioni.

http://www.qdpma.com/tools/ExecStats.zip

Il tool sfrutta le DMV dm_exec_query_stats e dm_db_index_usage_stats analysis per catturare le statistiche di utilizzo delle query e degli indici, visualizzandole in formato “umano” :-)

Utilissimo !

Allen White (trainer e consulente SQL Server), ha pubblicato su MSDN questo whitepaper sull’utilizzo di PowerShell in SQL Server 2008.

Da leggere!

Microsoft ha pubblicato un nuovo whitepaper sull’utilizzo del Resource Governor di SQL Server 2008, che consente di monitorare e controllare il modo in cui SQL Server usa CPU e memoria.

Nel documento, di circa 70 pagine, vengono affrontati i temi:

  • Come funziona il Resource Governor works, incluse limitazioni e best practices.
  • Metodologie per costruirsi un piano di consolidamento.
  • Tecniche per prevenire o minimizzare l’impatto di query particolarmente pesanti.
  • Tecniche per rispettare i service level agreements (SLAs), in particolare per quanto riguarda i tempi di risposta e la concorrenza di accesso.
  • Idee per implementare un sistema di addebito dei costi di mantenimento degli SLA.
  • Tecniche per il monitoraggio di SQL Server tramite le nuove funzionalità fornite dal  Resource Governor.

logo-sql08.gif

Come molti sapranno, Windows Azure è la piattaforma per il Cloud Computing che Microsoft sta implementando nei propri data centers per fornire servizi dal web.

The Cloud Computing and Services Platform Diagram

SQL Azure, la piattaforma SQL Server per l’hosting dei dati nel Cloud avrà i seguenti costi:

Web Edition – Up to 1 GB relational database = $9.99 / month

Business Edition – Up to 10 GB relational database = $99.99 / month

Bandwidth = $0.10 in / $0.15 out / GB

Le caratteristiche delle due versioni attualmente disponibili (Web e Business Edition) sono le seguenti:

Web Edition Relational Database includes:

  • Up to 1 GB of T-SQL based relational database
  • Self-managed DB, auto high availability and backup
  • Auto Scale with pay-as-you grow
  • Best suited for Web application, Departmental custom apps.

Business Edition DB includes:

  • Up to 10 GB of T-SQL based relational database
  • Self-managed DB, auto high availability and backup
  • Auto Scale, Pay-as- you grow
  • Additional features in the future like auto-partition, CLR, fanouts etc.
  • Best suited for ISVs packaged LOB apps, Department custom apps

I costi degli altri servizi e le modalità di licensing e pricing li trovate all’indirizzo http://www.microsoft.com/azure/pricing.mspx.

SQL Server ha una serie di impostazioni automatiche che lo rendono uno dei database servers più facili da mantenere. Ciò nonostante, alcune delle opzioni automatiche andrebbero lasciate disattivate, per non incorrere in problemi di performance: ad esempio l’opzione AUTO SHRINK.

Come dice il nome stesso, questa opzione consente al motore di SQL Server di compattare un database quando lo spazio disponibile supera una certa soglia. In questo modo, viene ridotta la dimensione dei files fisici e quindi l’occupazione sul disco.

Attenzione, però! La compattazione di un database può generare una frammentazione negli indici, soprattutto quando questa operazione viene svolta frequentemente. Ne parla in maniera approfondita Paul Randal in questo post. Per questo  motivo l’operazione di shrinking non dovrebbe essere fatta, salvo in scenari in cui lo spazio viene liberato in maniera definitiva (ad esempio con una TRUNCATE o DELETE massiva e senza la reintroduzione della stessa mole di dati). Essendo questa una operazione solitamente rara, è possibile disabilitare l’opzione AUTO SHRINK ed effettuare manualmente lo shrinking del database e la ricostruzione degli indici a seguire.

Lo scorso 23 giugno sono stati pubblicati alcuni aggiornamenti al Service Pack 3 di SQL Server 2005 per Windows 7, tramite Microsoft Update.

Sostanzialmente non è cambiato nulla, se non la logica del sistema di rilevamento della versione di Windows sottostante, adattata per la nuova versione del sistema operativo.

Gli aggiornamenti riguardano i seguenti prodotti:

Nome aggiornamento Windows Update

Microsoft SQL Server 2005 Service Pack 3 (KB955706)

Microsoft SQL Server 2005 Service Pack 3 Failover Clustering (KB955706)

Microsoft SQL Server 2005 Express Edition Service Pack 3 (KB955706)

Si

Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 3 (KB955706)

Si

Microsoft SQL Server 2005 Express Edition Toolkit Service Pack 3 (KB955706)

Si

E’ stato pubblicato da qualche giorno il Refresh 9 della documentazione riguardante SQL Server 2008.

La trovate qui. Per visualizzare l’elenco degli aggiornamenti alla documentazione presenti in questa versione, seguite il topic “New and Updated Topics in SQL Server 2008 Books Online (29 June 2009)".

Alzi la mano chi non ha mai avuto questo problema… Quando si ripristina un database esiste il rischio di ritrovarsi con utenti orfani: presenti cioè nel database, ma inesistenti come login nel server.

Una premessa: SQL Server mantiene le informazioni riguardo alla logins nel database master, associandovi il SID (Security Identifier) di Windows o del dominio Active Directory se parliamo utenti Windows oppure il SID creato e mantenuto da SQL Server stesso nel caso di logins SQL Server. Le informazioni relative agli utenti del database sono mantenute nel database stesso, nel quale sono associati i SID delle logins con i dati dell’utente del db.

Il problema degli utenti orfani si verifica generalmente quando si effettua il ripristino di un backup su un server diverso dall’originale. Anche se nel server di destinazione sono presenti gli stessi utenti del server di origine, cambiando i SID non è possibile a SQL Server collegare le due entità, dando origine ad utenti orfani.

Se vi state chiedendo: “esiste una procedura per fissare gli utenti orfani senza dover cancellare e ricreare gli utenti, perdendo tutte le informazioni sui permessi associati ?”, beh, la risposta è sì.

Esiste una stored procedure che si chiama sp_change_users_login che consente di effettuare un check degli utenti orfani e farsi restituire l’elenco e, con un diverso parametro, fissare il problema "riagganciando” i SID delle logins con gli utenti relativi.

La procedura è la seguente: prima eseguo la query

EXEC sp_change_users_login 'REPORT'

che restituisce l’elenco degli utenti orfani.

UserName UserSID
-------- ----------------------------------- 
Mark 0xD5B5548C6DC81D7773E769631629CE1D

Quindi eseguo la query

EXEC sp_change_users_login 'UPDATE_ONE','Mark','Mark'

per riagganciare utente e login.

Esiste anche una opzione AUTO_FIX che verifica i potenziali orfani ed eventualmente ricrea le logins mancanti, basandosi sul match tra il nome utente ed il nome della login. Personalmente non sono molto favorevole a tutto ciò che è automatico, principalmente perchè in questo caso rischiate di ritrovarvi con login indesiderate o potenzialmente dannose.

Qualche link per approfondire:

BOL SQL Server 2008
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/1554b39f-274b-4ef8-898e-9e246b474333.htm

MSDN:
http://msdn.microsoft.com/it-it/library/ms174378.aspx

E’ uno degli errori più comunemente rilevati nelle applicazioni .NET e riguarda l’esaurimento del pool di connessioni verso il database.

Di solito questo errore si verifica perchè nell’applicazione vengono chiusi gli oggetti usati per leggere o scrivere i dati (ad esempio un DataReader), ma non viene chiusa la corrispondente connessione.

In molte applicazioni mi è capitato di assistere a soluzioni empiriche come aumentare il numero di connessioni disponibili nel pool, ma come è facilmente intuibile non si tratta di una vera e propria soluzione, ma solo un rinvio del problema.

Il messaggio di errore riportato dall’applicazione è il seguente:

.NET 1.1

System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.
This may have occurred because all pooled connections were in use and max pool size was reached.
at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
at System.Data.SqlClient.SqlConnection.Open()

.NET 2.0

System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.
This may have occurred because all pooled connections were in use and max pool size was reached.
     at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()

Il codice per l’accesso ai dati dovrebbe seguire la regola “toccata e fuga”, per cui il blocco di codice apro la connessione/eseguo il comando/chiudo la connessione è il più breve possibile: acquisire una nuova connessione dal pool è un’operazione veloce e poco costosa: è quindi preferibile mantenere la connessione aperta solamente per il tempo necessario all’esecuzione del comando e chiuderla immediatamente dopo.

Un esempio per riprodurre l’errore:

static void Main(string[] args)
{
   string connectionString = @"Data Source=<your server name or address>;Initial Catalog=Northwind;Integrated Security=True; Max Pool Size=20; Connection Timeout=10";

   try
   {
      for (int i = 0; i < 50; i++)
      {
         // Crea la connessione ed il comando da eseguire
         SqlConnection conn = new SqlConnection(connectionString);
         SqlCommand cmd= new SqlCommand("SELECT * FROM Shippers", conn);

         // Apro la connessione
         conn.Open();
  
         // Debug
         Console.WriteLine("Numero di connessioni aperte: {0}", i.ToString());

         // Questa istruzione causa l’errore
         SqlDataReader dr = sCmd.ExecuteReader();

         dr.Close();

         // Soluzione 1: Chiudo la connessione subito dopo la lettura dei dati
         // utilizzando l’opzione CloseConnection del comando ExecuteReader
         //SqlDataReader dr = 
               cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
        //dr.Close();
 
        // Soluzione 2: chiudo esplicitamente la connessione
        //conn.Close();
      }

     // Soluzione 3: eseguo tutti i comandi all’interno di un blocco using
     // for (int i = 0; i < 50; i++)
     //{
     //   using (SqlConnection conn = new SqlConnection(connString))
     //   {
     //      SqlCommand cmd= new SqlCommand("SELECT * FROM Shippers", conn);
     //      conn.Open();
     //      Console.WriteLine("Numero di connessioni aperte " + i.ToString());
     //      SqlDataReader sdr = cmd.ExecuteReader();
     //      dr.Close();
     //   }
     //}
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
}

In questo scenario, la connessione viene aperta ed utilizzata per popolare il datareader, ma non viene mai chiusa.
Tra l’altro il pool viene limitato a 20 connessioni con 10 secondi di timeout, mentre il default è di 100 connessioni con 15 secondi di timeout.

Le soluzioni possibili sono tre:

  1. Uso l’opzione CommandBehavior.CloseConnection per chiudere la connessione immediatamente dopo aver letto i dati
  2. Chiudo manualmente la connessione dopo aver terminato la lettura
  3. Racchiudo il blocco di codice per la lettura dei dati all’interno di un blocco using.
    In questo modo si è sicuri che la connessione viene chiusa e distrutto l’oggetto in memoria.

La documentazione riguardo al connection pooling e ad alcuni suggerimenti di programmazione li trovate ai links seguenti:

".NET Framework Class Library - SqlConnection ConnectionString Property "
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx

".NET Framework Class Library - CommandBehavior Enumeration"
http://msdn.microsoft.com/en-us/library/system.data.commandbehavior.aspx

"C# Language Reference - using Statement (C# Reference)"
http://msdn.microsoft.com/en-us/library/yh598w02.aspx

"Connection Pooling for the .NET Framework Data Provider for SQL Server"
http://msdn2.microsoft.com/en-us/library/8xx3tyca(VS.80).aspx

"The .NET Connection Pool Lifeguard"
http://msdn2.microsoft.com/en-us/library/aa175863(SQL.80).aspx

ssms_obj-explorer_mathfn-li La ditta WestClinTech ha sviluppato XLeratorDB: una serie di librerie che includono funzioni Excel direttamente in SQL Server. Le funzioni sono raggruppate per categoria e sono acquistabili separatamente (nella foto le funzioni matematiche della libreria XLeleratorDB/Math disponibili direttamente da SSMS).

E’ possibile scaricarne una versione trial direttamente dal sito della WestClinTech.

Microsoft ha pubblicato un aggiornamento dei Books Online di SQL Server 2008.

Lo trovate qui:
http://www.microsoft.com/downloads/details.aspx?FamilyID=765433f7-0983-4d7a-b628-0a98145bcb97

 

sqlserver

Beh, non proprio... Però mi sono capitate poche occasioni finora di vedere dell'hardware dedicato a SQL Server così ben fornito.

Lo scorso 28 ottobre il SQL Server Release Services Team ha annunciato la disponibilità della CTP del Service Pack 3 di SQL Server 2005.
Lo potete scaricare qui.

Ultimamente mi sto occupando sempre più spesso di Sharepoint, sia per lavoro che per "diletto". Uno degli aspetti con cui ho frequentemente ha che fare, da buon DBA :-), è la deframmentazione dei databases di Sharepoint.

Questo articolo della KB di Microsoft riporta un utilissimo script per verificare lo stato di frammentazione degli indici e pilotare la ricostruzione degli stessi.

Spesso mi capita durante i corsi su Sql Server Integration Services di fornire links a materiale online. Dal momento che puntualmente dimentico i links più interessanti, questa volta li memorizzo in questa pagina, che di tanto in tanto aggiornerò con altri links.. Stay tuned !

Jamie Thomson ha pubblicato un modello di template per la realizzazione di nuovi packages SSIS.

L'idea di base è quella di stabilire una serie di caratteristiche comuni per lo sviluppo dei packages e le modalità di deployment, configurazione e logging.

Il template va scompattato in questa directory:

%ProgramFiles%\Microsoft Visual Studio 8\Common7 \IDE\PrivateAssemblies\ProjectItems\DataTransformationProject\DataTransformationItems

In questo modo cliccando su "Add New Item..." il nostro template sarà subito disponibile:

TemplatePkg

Una delle decisioni che gli sviluppatori di soluzioni basate su SSIS devono prendere è dove effettuare il deployment dei propri package ? Salvare i packages su file system o in SQL Server ?

In questi due articoli, due dei maggiori esperti di SSIS, Kirk Haselden e Jamie Thomson, spiegano i propri punti di vista a riguardo.

Da segnalare il post di Sam Loud sulle problematiche del deployment su file system che, in certe condizioni, richiede l'utilizzo di più connection managers.

Aaron Bertrand ha mantenuto a questo indirizzo la lista dei rilasci di SQL Server 2000, mentre a questo indirizzo trovate quella di SQL Server 2005.

Microsoft ha rilasciato una lista parziale dei rilasci a partire dal Service Pack 2. La trovate qui.

UPDATE: qui trovate la build list per SQL Server 2008. Grazie Steve.

Vorrei segnalarvi un paio di tools per SQL Server 2008:

  • QPee Tools 1.0
    Collezione di tools per loggare le informazioni sui piani di esecuzione, identificare problemi di prestazioni dovuti a plan regressions. Utilizzano le nuove funzionalità query_hash e query_plan_hash introdotte in SQL Server 2008, combinate con le dynamic management views e le funzioni di sistema.
  • Simple SQL Server Database Schema Printer (ASP.NET)
    E' una pagina ASP.NET che estrae da un database tutte le tabelle, i nomi delle colonne, i relativi tipi dati ed altre informazioni, presentandole sotto forma di pagina web.

Enjoy it !

Kimberly Tripp, una delle maggiori esperte di SQL Server, ha pubblicato la versione aggiornata e bug-fixed della stored procedure sp_helpindex2, sia per SQL Server 2005 che per il 2008.

Potete scaricare le due versioni qui (2005) e qui (2008).

Un database non correttamente disegnato o un server configurato in maniera errata risultano spesso in un decadimento delle prestazioni di SQL Server.
Mi è capitato spesso di vedere database progettati male che, sviluppati con test fatti su poche migliaia di records, vengono poi messi "in ginocchio" una volta passati in produzione, dove i records magari sono qualche milione. O ancora server con svariati gigabytes di memoria non utilizzata per una errata configurazione del server.

Questo articolo su Technet spiega come ricercare e risolvere eventuali problemi di prestazioni in un sistema basato su SQL Server 2005.

Oltre ai recenti rilasci delle versioni "core" di SQL Server 2008 Express, sono stati rilasciati ufficialmente anche SQL Server 2008 Express with Advanced Services ed il nuovo SQL Server 2008 with Tools. Una delle principali differenze è l'inclusione in entrambe le edizioni della versione Basic di SQL Server Management Studio, la versione ridotta di SSMS che consente la creazione e modifica visuale dei databases. SQL Server 2008 with Advanced Services include anche funzionalità aggiuntive per Full-Text Search e Reporting Services.

Qualche link a documentazione e tools per SQL Server 2008:

Una delle "mancanze" della versione definitiva di SQL Server 2008 è il Report Builder, arrivato alla versione 2.0 ed attualmente in versione RC1.

Può essere scaricato qui.

Come riporta il sito:

Microsoft SQL Server 2008 Reporting Services Report Builder 2.0 supports the full capabilities of SQL Server 2008 Reporting Services including flexibile report layout, data visualizations and richly formatted text. The download includes the following functionality above the RC0 release of Report Builder:

  • Easy to use wizards for creating table, matrix and chart data regions.
  • Support for directly opening and editing reports stored on the report server.
  • Support for using server resources such as shared data sources.
  • A query designer for Microsoft SQL Server data sources.
  • Enhancements to the Report Builder 2.0 ribbon.

Questa versione dovrebbe essere pienamente compatibile con la RTM di SQL Server 2008.

La scorsa settimana Microsoft ha pubblicato questo documento riguardante le modifiche alle politiche di licensing, rimuovendo in particolare il vincolo dei 90 giorni necessari per riassegnare una licenza ad un server dopo averla spostata all'interno della propria server farm. Tutte le licenze Microsoft sono assegnate ad un server fisico, pertanto se una macchina virtuale viene spostata su un server privo della licenza per il sistema operativo o l'applicazione installata, per Microsoft si tratta di un trasferimento di licenza. Con le precedenti limitazioni imposte dalle politiche di licensing introdotte nel 2005, per riassegnare tale licenza su un altro host fisico dovevano trascorrere almeno 90 giorni, con effetti evidentemente catastrofici sulla virtualizzazione e sulla migrazione a caldo.

Facciamo un esempio: se abbiamo tre macchine virtuali con SQL Server 2005 in una server farm VMWare fatta di otto server fisici, per effetto delle precedenti politiche di licenza avremmo dovuto acquistare 24 licenze di SQL Server 2005 Standard Edition (3 x 8) !!!
In alternativa avremmo potuto acquistare otto licenze SQL Server 2005 Enterprise Edition, che consentono un numero illimitato di macchine virtuali in esecuzione su uno stesso host fisico.

Con l'attuale modifica fatta al licensing acquisteremo solamente tre licenze di SQL Server, liberamente trasferibili tra i nodi del cluster VMWare senza limitazioni e con un impatto finanziario decisamente più basso.

 

Con il Service Pack 2 di SQL Server 2005 Microsoft ha introdotto la possibilità per i DBA di utilizzare reports personalizzati. Questa feature è disponibile cliccando con il tasto destro del mouse su un oggetto dell'object explorer (ad esempio il database o la singola tabella) e quindi sulla voce Reports

object_explorer  

Microsoft ha inoltre rilasciato un tool, denominato Performance Dashboard (scaricabile qui: http://www.microsoft.com/downloads/details.aspx?FamilyId=1d3a4a0d-7e0c-4730-8204-e419218c1efc&displaylang=en) che definisce una serie di reports i quali forniscono indicazioni sulle performance del vostro SQL Server utilizzando le dynamic management views (DMVs).
Attenzione: i reports funzionano solamente se è installato il Service Pack 2 di SQL Server 2005.

Attraverso i custom reports di Performance Dashboard sono disponibili, come recita il sito web sopra citato:

Common performance problems that the dashboard reports may help to resolve include:

  • CPU bottlenecks (and what queries are consuming the most CPU)
  • IO bottlenecks (and what queries are performing the most IO)
  • Index recommendations generated by the query optimizer (missing indexes)
  • Blocking
  • Latch contention

Una volta installato il package .msi scaricato dal suddetto link, occorre entrare in SQL Server Management Studio ed aprire il file C:\Program Files\Microsoft SQL Server\90\Tools\PerformanceDashboard\setup.sql. Eseguite questo script per creare nell'msdb tutte le stored procedures che servono ai reports per la visualizzazione delle informazioni di performance.

A questo punto, cliccando nuovamente con il tasto destro su Custom Reports viene aperta la seguente schermata, dalla quale potete lanciare il report principale, Performance_Dashboard_Main e dal quale poi vengono aperti tutti gli altri reports. 

open_file

Prima di eseguire il report, SSMS vi avvisa che gli script eseguiti dal custom report potrebbero essere pericolosi. Cliccate su Run per proseguire. 

run_custom_report

Ecco quello che si presenta all'esecuzione del report: 

performance_dashboard_main  

Cliccando poi sui vari links presenti vengono di volta in volta richiamati i reports di dettaglio sulle statistiche di IO, sui waits, sulle performance per CPU, Letture e scritture, etc.

N.B. Il Performance Dashboard viene sostituito in SQL Server 2008 dalle funzionalità del Performance Studio e pertanto non verrà più mantenuto da Microsoft.

Recentemente mi è capitato di dover eliminare tutti i caratteri non numerici da una colonna all'interno di un data flow SSIS. Ovviamente ci sono molti modi possibili per farlo, ma l'utilizzo delle regular expression è risultato essere il modo più veloce...

Per utilizzare le RegEx all'interno di un data flow occorre scaricare il componente per la trasformazione dall'indirizzo http://www.microsoft.com/downloads/details.aspx?FamilyID=c16f11ad-150a-4091-b3a2-83d21d3e0973&displaylang=en
oppure utilizzare lo Script Component di SSIS. Vediamo un esempio di come usare quest'ultimo.

Per prima cosa trascinare lo Script Component all'interno del data flow e scegliere Transform per determinarne il comportamento, scegliere le colonne da passare allo script in ReadWrite.
Cliccare su Design Script ed aggiungere il codice seguente nell'area Imports:

Imports System.Text.RegularExpressions

quindi il codice seguente al posto della subroutine Input0_ProcessInputRow:

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

    If Row.CodiceProdotto_IsNull = False Or Row.CodiceProdotto = "" Then

        Dim pattern As String = String.Empty

        Dim r As Regex = Nothing

        pattern = "[^0-9]"

        r = New Regex(pattern, RegexOptions.Compiled)

        Row.CodiceProdotto = Regex.Replace(Row. CodiceProdotto , pattern, "")
    End If

End Sub

In questo modo, utilizzando poche righe di codice, si riesce a risolvere un problema abbastanza comune in maniera davvero semplice.

Alla prossima !


Il 6 Agosto scorso Microsoft ha ufficializzato, durante la keynote al Teched Sudafrica, la disponibilità di SQL Server 2008 in versione definitiva.

E' già possibile scaricarlo, per gli abbonati, dai siti MSDN e licensing.

Il Flat File Connection Manager tratta ogni nuova colonna per default come stringa di 50 caratteri. Questo può comportare dei problemi quando la colonna della tabella SQL Server ha un tipo dati intero o di lunghezza superiore a 50 caratteri, ad esempio.
La pagina Advanced della configurazione del connection manager consente di modificare il tipo dati della colonna, trasformandola nel tipo dati corretto.
Fate in modo di definire il tipo dati di una colonna come il più piccolo possibile per le informazioni che state trattando. Ad esempio, se il valore da trattare rappresenta il codice fiscale di un individuo, definite la colonna come stringa di 16 caratteri, risparmiando così 34 bytes in memoria moltiplicati per il numero di righe che state trattando !

Di seguito la tabella con la mappatura dei tipi dati SQL Server più comuni  e l'equivalente gestito dal Flat File Connection Manager.

SQL Server Data Type Flat File Connection Manager Data Type
bigint eight-byte signed integer [DT_I8]
binary byte stream [DT_BYTES]
Bit Boolean [DT_BOOL]
Date single-byte unsigned integer [DT_UI1]
Datetime database timestamp [DT_DBTIMESTAMP]
Decimal numeric [DT_NUMERIC]
Float float [DT_R4]
Int four-byte signed integer [DT_I4]
Image image [DT_IMAGE]
Nvarchar or nchar Unicode string [DT_WSTR]
ntext Unicode text stream [DT_NTEXT]
Numeric numeric [DT_NUMERIC]
Smallint two-byte signed integer [DT_I2]
Text text stream [DT_TEXT]
Timestamp byte stream [DT_BYTES]
Tinytint single-byte unsigned integer [DT_UI1]
Uniqueidentifier unique identifier [DT_GUID]
Varbinary byte stream [DT_BYTES]
Varchar or char string [DT_STR]
Xml Unicode string [DT_WSTR]

About me

  • Danilo Dominici
  • Send mail to the author(s) Email
  • Skype
  • View Scott Hanselman's profile on LinkedIn

Tags

Calendar

<September 2010>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

Archives

Blogroll

Subscribe to this weblog's RSS feed with SharpReader, Radio Userland, NewsGator or any other aggregator listening on port 5335 by clicking this button.

Statistics

Total Posts: 75
This Year: 7
This Month: 0
This Week: 0
Comments: 0