User Group Italiano SQL Server
SQL Server “Denali” CTP3
Sequence
Danilo Dominici
[email protected]
Attribution-NonCommercial-ShareAlike 2.5
http://creativecommons.org/licenses/by-nc-sa/2.5/
Speaker
Danilo Dominici
• +15 anni su SQL Server
– Consulente e docente
– Disegno, amministrazione, tuning di SQL Server dalla
versione 6.5
– MCSE, MCAD, MCDBA, MCITP, MCT
– Microsoft Community Contributor Award 2011
• Dal 2004 DBA in Regione Marche, VMWare
administrator
• Collaborazione attiva con UGISS
– Speaker e autore
UGISS - User Group Italiano SQL Server
2
Agenda
• L’oggetto SEQUENCE
–
–
–
–
Che cos’è
Come si usa
CACHE e prestazioni
Scenari d’uso
UGISS - User Group Italiano SQL Server
3
SEQUENCE
Che cos’è
• E’ un generatore di numeri (ANSI standard)
• Indipendente, legato ad uno schema, non ad
altri oggetti del db
• Può essere usato come la IDENTITY
specificando NEXT VALUE FOR come valore di
default del campo
• Al contrario della proprietà IDENTITY però:
– Può essere utilizzata direttamente da T-SQL
– E’ indipendente dalla tabella che lo utilizza
– Può essere usata contemporaneamente da più
tabelle (o campi) del database
UGISS - User Group Italiano SQL Server
4
SEQUENCE
Come si crea
• Con il comando CREATE SEQUENCE
Ad esempio:
CREATE SEQUENCE dbo.MySequence
START WITH 1
INCREMENT BY 1;
• Posso definire in che modo generare la
sequenza di valori:
–
–
–
–
All’interno di un range specificato (min e max)
Ascendente o discendente (incremento negativo)
Valore iniziale (può essere diverso dal valore minimo)
Ciclica
UGISS - User Group Italiano SQL Server
5
SEQUENCE
Come si crea
Da SSMS
UGISS - User Group Italiano SQL Server
6
SEQUENCE
Come si usa
• Richiedendo un valore singolo
• Attraverso la funzione NEXT VALUE FOR
– Restituisce il prossimo valore numerico della sequenza
– Può essere usata in stored procedure, trigger, default
• Maggiori info sul BOL
http://msdn.microsoft.com/en-us/library/ff878370(v=sql.110).aspx
UGISS - User Group Italiano SQL Server
7
SEQUENCE
Come si usa
• Richiedendo un “pool” di valori
• Attraverso la stored proc sp_sequence_get_range
– Accetta come parametri il nome della sequenza ed il numero di
valori da assegnare
– Restituisce nei parametri di output (opzionali) il primo e l’ultimo
valore, il numero di cicli già compiuti, i valori di incremento,
minimo e massimo impostati per la sequenza
– Da usare quando alla mia applicazione servono n valori
sequenziali tutti insieme
• Maggiori info sul BOL
http://msdn.microsoft.com/en-us/library/ff878352v=sql.110).aspx
UGISS - User Group Italiano SQL Server
8
SEQUENCE
Caching e prestazioni
• Tramite l’opzione CACHE possiamo richiedere l’uso
della cache e modificarne la dimensione
• Serve a migliorare le prestazioni minimizzando l’I/O su
disco
– Se non specificata, la dimensione di default è di 50 valori (nella
CTP3, potrebbe cambiare nella RTM)
– In realtà SQL Server mantiene due soli numeri: il valore corrente
ed il numero di valori rimasti in cache
• E’ un estensione di SQL Server allo standard ANSI
• E’ possibile specificare NO CACHE, ma ogni volta che si
richiede un valore, SQL Server deve aggiornare le
tabelle di sistema
UGISS - User Group Italiano SQL Server
9
SEQUENCE
Scenari di utilizzo
• Quando usare SEQUENCE ?
– L’applicazione richiede un numero prima di fare la INSERT
– Più tabelle (o colonne) devono condividere la stessa
numerazione
– La numerazione deve ricominciare al raggiungimento del limite
– I valori della sequenza devono essere generati ordinandoli sulla
base di un altro campo della tabella
– L’applicazione richiede un range di valori preassegnati
– Occorre modificare a runtime le specifiche della sequenza (es.
cambiarne il valore di incremento)
UGISS - User Group Italiano SQL Server
10
SEQUENCE
Scenari di utilizzo
• Limitazioni
–
–
–
–
Nessuna protezione da UPDATE
Univocità non garantita by design
Nessun controllo sull’utilizzo dei valori generati
Se creata con l’opzione CACHE, in caso di shutdown
improvviso si possono creare buchi nella
numerazione
UGISS - User Group Italiano SQL Server
11
SEQUENCE
UGISS - User Group Italiano SQL Server
12
SEQUENCE
Risorse Generiche
•
Presentazione e demo
–
•
Informazioni sul prodotto SQL Server
–
–
•
microsoft.public.it.sql
microsoft.public.sqlserver.*
Newsgroups pubblici via WEB
–
–
•
http://www.ugiss.org
Newsgroups pubblici via NTTP
–
–
•
http://www.microsoft.com/technet/prodtechnol/sql
http://msdn.microsoft.com/sql
Comunità SQL Server
–
•
http://www.microsoft.com/italy/sql
http://www.microsoft.com/sql
Supporto sviluppo ed professionisti IT
–
–
•
http://www.ugiss.org
http://www.microsoft.com/italy/communities/newsgroups/default.mspx
http://www.microsoft.com/technet/community/newsgroups/server/sql.mspx
Formazione
–
http://www.microsoft.com/italy/traincert
UGISS - User Group Italiano SQL Server
13
SEQUENCE
Risorse Specifiche
•
SQL Server “Denali” Books On-Line
–
–
–
–
–
•
Articoli magazines
–
–
•
Sequence numbers
CREATE SEQUENCE
NEXT VALUE FOR
sp_sequence_get_range
sys.sequences
SQL Server Magazine - Itzik Ben-Gan (parte 1)
SQL Server Magazine - Itzik Ben-Gan (parte 2)
Blogs
–
–
–
Sergio Govoni (SQL Server MVP)
Aaron Bertrand (SQL Server MVP)
SSMA Team Blog - Converting Oracle Sequence using SSMA for Oracle v5.1
UGISS - User Group Italiano SQL Server
14
Scarica

Diapositiva 1