Survey							
                            
		                
		                * Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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/