Microsoft SSMA
Approfondimenti
Introduzione



Abbiamo visto SSMA alle prese con un
DB ridottissimo
Nei progetti reali la complessità dei
database è tutta un’altra cosa
Come si comporta SSMA nella vita
reale?
Agenda




Configurazione opzioni SSMA
Conversione da PL/SQL a T-SQL
Migrazione di un database reale con
SSMA
Considerazioni sulle performance
Agenda




Configurazione opzioni SSMA
Conversione da PL/SQL a T-SQL
Migrazione di un database reale con
SSMA
Considerazioni sulle performance
Installazione e configurazione
Extension Pack
Connessione source
Connessione target
Caricamento oggetti DB
Esecuzione script
salvati
Generazione
assessment reports
J2SE 1.4.2
Stima tempi
Microsoft SSMA
Conversione oggetti
Salvataggio script
Migrazione dati
Extension Pack
Test
Redirect applicazione
su DB target
Opzioni
Configurazione SSMA
Agenda




Configurazione opzioni SSMA
Conversione da PL/SQL a T-SQL
Migrazione di un database reale con
SSMA
Considerazioni sulle performance
Tipi di dati
Oracle
Microsoft SQL Server
CHAR
VARCHAR2, NVARCHAR2
NUMBER



DATE
ROWID

SYSDATE








CHAR
VARCHAR, NVARCHAR
TINYINT, SMALLINT, INT,
BIGINT, NUMERIC
DATETIME,
SMALLDATETIME
UNIQUEIDENTIFIER e
NEWID()
GETDATE()
Tipi di dati (2)
Oracle




BFILE – immagini su file
system
BLOB – immagini sul
database
CLOB – testo
NLOB – testo in national
language
Microsoft SQL Server

IMAGE – più simile a BLOB

TEXT – grandi testi
Tipo Boolean
Oracle
declare
v1 boolean := true; v2 boolean := false;
begin
…
v1 := (x>3) and v2;
end;
Microsoft SQL Server
declare
@v1 smallint, @v2 smallint
set @v1 = /* TRUE */ 1
set @v2 = /* FALSE */ 0
begin
set @v1 = case WHEN ((@x>3) and (@v2 <> /*FALSE*/ 0))
THEN /*TRUE*/ 1
ELSE /*FALSE*/ 0 end
end
Tabelle
Oracle



Fino a 1000
colonne
Nessun limite
dimensione riga
Creazione tabella
con statement
SELECT:
create table tbl1
as select * from
tbl2
Microsoft SQL Server



Fino a 1024
colonne
Massimo 8,060
byte per riga (16
byte per text e
image)
Creazione tabella
con statement
SELECT INTO:
select * into tbl1
from tbl2
Indici
Oracle





Tabella indexorganized
Variabile PCTFREE
Indici su funzioni
Nessun limite al
numero di indici
Fino a 32 colonne
per indice
Microsoft SQL Server





Indice clustered
Opzione
FILLFACTOR
Indici su colonne
calcolate (funz.
deterministiche)
Massimo 249
indici per tabella
Fino a 16 colonne
per indice
Variabili
Oracle
Microsoft SQL Server

Non usano prefissi:
declare var1
varchar2(30);

Usano il prefisso @:
declare @var1
varchar;

Assegnazione:
var1 := ‘test’;

Assegnazione:
SET @var1 = ‘test’
or
SELECT @var1 =
‘test’
Statement IF
Oracle
declare v1 numeric;
begin
v1 := 1;
if v1 > 1 then
dbms_output.put_line (‘1>1’);
v1 := 100;
elseif v1 > 2 then
dbms_output.put_line (‘1 > 2’);
v1 := 200;
else
dbms_output.put_line (‘None’);
null;
end if;
end;
Microsoft SQL Server
declare @v1 numeric
begin
set @v1 = 1
if (@v1 > 1)
begin
print ‘1>1’
set @v1 = 100
end
else
if (@v1 > 2)
begin
print ‘1>2’
set @v1 = 200
end
else
begin
print ‘None’
exec
SYSDB.SYS.DB_NULL_STATEME
NT
end
end
Statement WHILE
Oracle
while rank <=
max_rank
loop
do something;
rank := rank + 1;
end loop;
Microsoft SQL Server
while (@rank <=
@max_rank)
begin
do something
set @rank = @rank
+1
end
Statement LOOP
Oracle
loop
exit when rank >
max_rank;
do something;
rank := rank + 1;
end loop;
Microsoft SQL Server
while (1 =1)
begin
if @rank >
@max_rank
break
do something
set @rank = @rank
+1
end
Statement loop FOR
Oracle
for rank in
1..max_rank
loop
do something;
end loop;
Microsoft SQL Server
declare @rank int
set @rank = 1
while (@rank <=
max_rank)
begin
do something
set @rank = @rank
+1
end
Attributi dei cursori
Oracle




Microsoft SQL Server
cursor_name%NOTF
OUND
cursor_name%FOUN
D
cursor_name%ISOPE
N

cursor_name%ROWC
OUNT



(@@FETCH_STATUS
= -1)
(@@FETCH_STATUS
= 0)
(cursor_status
(‘local’,
‘cursor_name’) = 1)
Calcolato con
variabile
@v_cursor_name_ro
wcount da
incrementare a ogni
fetch
Oracle package
Oracle

Package functions
Microsoft SQL Server

User-defined functions
PackageName_FunctionName

Package procedures

Package variables

Stored procedures
PackageName_ProcedureName

Simulate con
funzionalità del SYSDB
Agenda




Configurazione opzioni SSMA
Conversione da PL/SQL a T-SQL
Migrazione di un database reale con
SSMA
Considerazioni sulle performance
Migrazione database
PROTDEMO
Architettura applicazione
Oracle .NET
Data Provider
Oracle
PROTDEMO – Migrazione
manuale
PROTDEMO – Migrazione
manuale



Il vostro capo vi invita a una riunione e
vi comunica che dovrete occuparvi
della migrazione di un certo database
Oracle (PROTDEMO) verso SQL Server
La versione in questione di Oracle è la
9i
La versione di SQL Server è la nuova
SQL Server 2005
PROTDEMO – Migrazione
manuale

Il vostro incarico consiste nel:





Elaborare una strategia di migrazione
Produrre un report dettagliato sul
database attuale comprensivo di una stima
dei tempi necessari alla migrazione
Produrre gli script di creazione del nuovo
database
Migrare i dati
Eseguire i test sul nuovo database
Strategia di migrazione
Assessment
progetto
Migrazione
schema
Migrazione
logica business
Migrazione
dati
Test codice
migrato
Migrazione manuale Assessment





Usare qualche tool client per Oracle
Interrogare le tabelle di sistema
Creare un file Excel, Word, …
Come si fa ad analizzare il testo di
funzioni, stored procedure, packages?
E’ un lavoro lunghissimo!
Migrazione manuale - Schema




Bisogna generare gli script di creazione
di tabelle, default, constraints, indici,
viste
Quanto ci vuole a tradurre tutto il
PL/SQL?
Riuscirò a mantenere uno standard?
Quante probabilità ho di commettere
errori?
Migrazione manuale - Dati

Oracle
Database


Text File
OLE DB
SQL Server
Database
ODBC
Bulk copy?
Bulk insert?
DTS?
Migrazione manuale – Logica
di business




Bisogna generare gli script di creazione
di trigger, funzioni, stored procedure
Quanto ci vuole a tradurre tutto il
PL/SQL?
Riuscirò a mantenere uno standard?
Quante probabilità ho di commettere
errori?
Migrazione manuale – Test



Bisogna definire dei piani test
Bisogna scrivere del codice per
l’esecuzione dei test
Bisogna eseguire i test
Migrazione manuale





Quanto tempo ci vorrà?
Quanto costerà?
Quante persone servono?
Il buon esito del progetto è garantito?
L’applicazione funzionerà
correttamente?
PROTDEMO – Migrazione con
SSMA
Agenda




Configurazione opzioni SSMA
Conversione da PL/SQL a T-SQL
Migrazione di un database reale con
SSMA
Considerazioni sulle performance
Processo di migrazione
Assessment
progetto
Migrazione
schema
Migrazione
dati
Migrazione
logica business
Test codice
migrato
Migrazione
applicazione
Performance
tuning
Test e
integrazione
Performance tuning

Perfezionare i database generati




Tabelle, indici
Utilizzo di risorse critiche come RAM e
CPU
Gestione della memoria fisica
Migliorare le query ridisegnandole


È il momento giusto
Sfruttare i tool nativi di SQL Server

Ricordate ? Era uno dei motivi per migrare
Architettura storage
Schema
Schema
Tablespace 1
Database
Tablespace 2
Filegroup 1
Data File 1
Data File 2
Data File 3
Filegroup 2
Data File 4
Data File 1
Data File 2
Data File 3
Transaction
Log
Data File 4
Migrazione dati
Se la mole di dati è molto elevata?
 Qualche accorgimento:




Database recovery model: simple o bulklogged
Disabilitazione trigger
Disabilitazione foreign key e check
constraints
Cancellazione indici
Migliorare la base dati







Utilizzo di filegroup multipli
Distribuire il database su più dischi
Uso di tecniche di failover clustering
Separare i log transazionali dai dati
Ottimizzare la struttura degli indici
Osservare le dimensioni e l’uso del
database tempdb
Pianificare e osservare correttamente la
crescita dei database
Tabelle migliori





Separare in differenti filegroup colonne text e
image
Mantenere gli indici in filegroup differenti
Favorire constraints per la validazione
rispetto ai trigger
Normalizzare il database in maniera coerente
Impostare i valori di fillfactor in maniera
giudiziosa
Utilizzo di indici

Vantaggi





Indici clustered ordinano fisicamente i dati
Aumenta le prestazioni delle ricerche
Considerare Full text indexing su test e colonne
image
Maggiori performance su database acceduti da
sistemi di report e di analisi
Svantaggi in caso di over-indexing



Costi di manutenzione elevati
Vanno ricostruiti più spesso
Applicazioni OLTP sono penalizzate in scrittura
Uso appropriato della RAM

Impostare la RAM (Min – Max)



In caso di istanze multiple è molto importante
vincolare limite minimo e massimo
Per database di dimensioni ridotte è possibile
utilizzare l’approccio dinamico
Modalità AWE (versione Enterprise)


AWE extensions permette di allocare molta RAM
da dedicare alla cache di SQL Server
Assicurarsi che la memoria globalmente allocata
non ecceda l’effettiva disponibilità in un sistema
cluster multi-istanza con failover
Altre ottimizzazioni


I cursori vanno usati con parsimonia e
intelligenza estrema
Riscrivere query lente

È il momento giusto per individuare query
lente presenti nel sistema informativo in
questione da tempo per migliorarle con i
tool più user-friendly di SQL Server
Tool indispensabili







SQL Server Management Studio
SQL Server Profiler
Database Engine Tuning Advisor
Microsoft Query Analyzer
Business Intelligence Development
Studio
Windows Performance Monitor
Microsoft Baseline Security Analyzer
Riassunto


Molte problematiche coinvolte in una
migrazione di database
SSMA automatizza la maggior parte del
lavoro





Creazione report di assessment
Migrazione schema
Migrazione dati
Test migrazione
SSMA non è un giocattolo!
Ulteriori informazioni

Microsoft SQL Server


Migrazione a SQL Server


http://www.microsoft.com/sql/
http://www.microsoft.com/sql/solutions/ssm/
Per sviluppatori

http://msdn.microsoft.com/
Scarica

Microsoft SSMA Approfondimenti