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/