novembre 2007 - Posts

Nuovo blog dal Security Team

Come molti sapranno ogni Product Group, in Microsoft, ha la sua serie di blog. Il team di SQL Server ne ha diverse decine e un elenco è stato pubblicato da Paul Randal in questo post. Apprendo oggi che alla lista si aggiunge il blog del Security Team che nel suo post di esordio affronta il tema dello scope di una Symmetric Key.

Per chi volesse avere una panoramica sull'infrastruttura PKI introdotta in SQL Server 2005 può fare riferimento a questo mio articolo; a tutti consiglio di sottoscrivere questo blog che sono sicuro rappresenterà, insieme a tutti gli altri, una miniera di informazioni.

Bye

 

Posted by lbianchi with no comments
Filed under: ,

Priorità nelle conversazioni in SQL Server 2008

Nel mio post di ieri dove riportavo alcune delle novità presenti nella CTP di novembre di SQL Server 2008, non avevo citato la possibilità di definire una priorità tra le conversazioni del Service Broker.

In questo post ci pensa Bob Beauchemin a fornire alcuni dettagli ed uno script di esempio.

Bye

 

Posted by lbianchi with no comments
Filed under: ,

SQL Server 2008 - November CTP

Come già annunciato da Davide, è disponibile per tutti la CTP di Novembre di SQL Server 2008.

Tra le funzionalità introdotte o migliorate in questa build ci sono:

  • Backup Compression
  • Transparent Data Encryption
  • Filestream
  • Geography e Geometry datatype (Geospatial support)
  • T-SQL Intellisense
  • Resource Governor
  • Declarative Management Framework
  • Plan freezing

Molti saranno anche lieti di sapere che questa volta è disponibile anche la relativa build della versione Express.

E' possibile scaricare la CTP di Novembre a questo link.

Bye

Posted by lbianchi with 3 comment(s)
Filed under:

Change Data Capture in SQL Server 2008

Questa mattina stavo esplorando una delle nuove funzionalità di SQL Server 2008, il Change Data Capture (CDC), ovvero la possibilità di monitorare in maniera asincrona le modifiche ad una tabella.

Finora la strada passava per l'implementazione di un trigger che intercetti le modifiche ai dati e popoli una tabella in cui conservare la cronologia; per le modifiche alla struttura era invece necessario implementare un trigger DDL (e questo solo a partire da SQL Server 2005). Entrambe queste soluzioni sono però sincrone ed avvengono nella stessa transazione del comando che le ha scatenate con potenziali problemi di scalabilità. Una soluzione asincrona può essere realizzata ricorrendo al Service Broker e nella mia sessione al WPC di 2 settimane fa una delle demo era incentrata su uno scenario simile.

In SQL Server 2008 si aggiunge questa nuova funzionalità del Change Data Capture; vediamo un esempio...

 --Definisco un db e una tabella su cui costruirò la demo
CREATE DATABASE TestCDC;
GO
USE TestCDC;
GO
CREATE TABLE dbo.T_cdc
(
 ID smallint NOT NULL,
 c1 varchar(50) NOT NULL
);
GO

--Verifichiamo che il db non sia già abilitato per il cdc (per default non lo è)
SELECT name, is_cdc_enabled FROM sys.databases;

--Abilitiamo il cdc sul db
EXEC sys.sp_cdc_enable_db_change_data_capture;

--Abilitiamo il cdc sulla tabella
--Viene creato un ruolo, i metadati e 2 job (per la cattura ed il cleanup dei dati)
EXEC sys.sp_cdc_enable_table_change_data_capture @source_schema = 'dbo', @source_name = 'T_cdc', @role_name = 'cdc_role';
GO

-- Andiamo quindi a movimentare la tabella
INSERT dbo.T_cdc VALUES (1, 'primo record');
INSERT dbo.T_cdc VALUES (2, 'secondo record');
GO

UPDATE dbo.T_cdc
SET c1 = 'record modificato'
WHERE ID = 1
GO

--Verifichiamo il contenuto della tabella
SELECT * FROM dbo.T_cdc

--Con la query seguente recupero la cronologia delle modifiche
SELECT * FROM cdc.dbo_T_cdc_CT

Come si vede l'implementazione è molto semplice. L'acquisizione dei dati con cui popolare la tabella che contiene la cronologia delle modifiche avviene tramite un job (pertanto la funzionalità richiede che il servizio SQL Agent sia in esecuzione) che va a scandagliare il Transaction Log; un altro job provvede alla rimozione, dalla tabella cdc.dbo_T_cdc_CT. I record vengono rimossi dalla tabella, per impostazione predefinita, dopo 72 ore (entro questo periodo di tempo possono comunque essere archiviati su un'altra tabella, esportati altrove o semplicemente archiviati tramite il normale processo di backup dei dati). Ovviamente è possibile modificare l'impostazione tramite la stored procedure sp_cdc_change_job.

Chi volesse esplorare la funzionalità troverà nel BOL ulteriori fonti di documentazione, la lista delle tabelle che vengono create a supporto del cdc, delle stored procedure per esaminare i metadati e modificare le impostazioni e quant'altro.

Le mie prove le ho fatte con la CTP5 (build 10.0.1075) e non posso garantire il funzionamento di quanto sopra con build precedenti...

Bye

 

 

Posted by lbianchi with no comments
Filed under:

Operatore MERGE in SQL Server 2008

Vi segnalo questo articolo su una delle principali novità che riguardano il T-SQL il SQL Server 2008: l'operatore MERGE.

Si tratta di una istruzione molto versatile che, data una source table ed una target table messe in relazione fra loro, fonde i risultati della prima nella seconda inserendo i record non presenti (WHEN NOT MATCHED) e aggiornando quelli già presenti (WHEN MATCHED). Rispetto a quanto riportato nell'articolo è presente una terza clausola che è possibile utilizzare: la clausola WHEN SOURCE NOT MATCHED il cui scopo è quello di decidere il da farsi per i record che sono presenti nella target table ma non nella source.

Fino ad oggi era possibile eseguire la stessa attività solo con una triplice istruzione simile a

--eliminazione dei record non più presenti
DELETE dbo.Destinazione
WHERE PK NOT IN (SELECT PK FROM dbo.Origine)

--aggiornamento dei record modificati
UPDATE
SET campo1 = O.campo1,
    campo2 = O.campo2,
    ...,
    campon = O.campon
FROM dbo.Origine O INNER JOIN dbo.Destinazione D
        ON O.PK = D.PK
WHERE campo1 <> O.campo1
    OR campo2 = O.campo2
    OR ...
    OR campon = O.campon

--inserimento dei nuovi
INSERT dbo.Destinazione
SELECT O.*
FROM dbo.Origine O LEFT JOIN dbo.Destinazione D
        ON O.PK = D.PK
WHERE D.PK IS NULL

 

Benvenuto MERGE... Big Smile

Posted by lbianchi with 1 comment(s)
Filed under: ,