

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Fase 3: migrazione
<a name="phase-3-migrate"></a>

Un'attività principale delle migrazioni dei database consiste nel completare la migrazione con tempi di inattività minimi. Poiché entrambi i database devono utilizzare lo stesso linguaggio di programmazione e gli stessi protocolli di comunicazione, potrebbe essere necessario convertire il codice e lo schema per sintassi, procedure e funzioni di query simili. Durante la conversione di uno schema, considerate i seguenti aspetti:
+ Modificate la connessione al database in base alle esigenze del nuovo motore.
+ Correggi eventuali avvisi ed errori derivanti dalla conversione del codice.
+ Modifica le mappature e il codice delle tabelle in base allo schema convertito.
+ Identifica e rifattorizza qualsiasi funzionalità specifica del fornitore utilizzata dall'applicazione.

Puoi utilizzare qualsiasi strumento di migrazione di terze parti per la conversione del codice dello schema, come il database SAP ASE e Amazon RDS for SQL Server. Potrebbe essere necessario convertire del codice manualmente perché SQL non ANSI non è supportato in SQL Server.

Dopo aver convertito il codice, converti il codice dell'applicazione o l'applicazione SQL dinamico, quindi esegui test unitari e funzionali. Per ulteriori informazioni, vedere [Testing Migrated Database Objects (SybaseToSQL).](https://learn.microsoft.com/en-us/sql/ssma/sybase/testing-migrated-database-objects-sybasetosql?view=sql-server-ver15)

## Conversione dei dati
<a name="converting-the-data.08113c62-7c5a-5df1-abcf-462e3e9209f4"></a>

Trasforma i dati grezzi per renderli più utili pulendoli, standardizzandoli, verificandoli e ordinandoli. Nelle migrazioni dei database, i processi di estrazione, trasformazione e caricamento (ETL) vengono utilizzati nei seguenti modi:
+ All'interno del database
+ Con script esterni
+ Utilizzo di strumenti di terze parti

Esempi di strumenti ETL includono AWS Glue Informatica e Talend. Per le migrazioni da SAP ASE a SQL Server, alcuni strumenti gratuiti possono convertire automaticamente le procedure e le funzioni archiviate.

## Convalida degli oggetti del database
<a name="validating-database-objects"></a>

La convalida del database aiuta a prevenire problemi nelle fasi successive della migrazione. Dopo la conversione del codice, convalida lo schema del database confrontando i seguenti elementi tra SAP ASE e RDS SQL Server:
+ Schemi
+ Tabelle
+ Visualizzazioni
+ Funzioni
+ Indici delle procedure memorizzate
+ Triggers
+ Vincoli (ad esempio, chiavi primarie, chiavi esterne, controlli e impostazioni predefinite)

Verificate che ogni oggetto sia stato migrato correttamente. Se trovi delle differenze, identifica il motivo dell'errore. Potrebbe essere necessario creare manualmente gli oggetti mancanti nel database di destinazione o convertire il codice Transact-SQL. Per ulteriori informazioni, consulta [Convalida degli oggetti del database dopo la migrazione da SAP ASE ad Amazon RDS for SQL Server o Microsoft SQL Server](https://aws.amazon.com/blogs/database/validate-database-objects-after-migrating-from-sap-ase-to-amazon-rds-for-sql-server-or-microsoft-sql-server/).

## Migrazione dei dati utilizzando AWS DMS
<a name="migrating-data-using-dms"></a>

Se hai più utenti del database, potrebbe essere necessario migrare l'applicazione in base a una pianificazione. A seconda delle dimensioni del database e della finestra di migrazione, tali migrazioni di dati richiedono la conoscenza dei carichi completi e incrementali. Per questo motivo, AWS DMS può connettere i database di origine e di destinazione per replicare il contenuto del database secondo i seguenti processi:
+ Creazione di un server di replica.
+ Crea endpoint di origine e destinazione che descrivono le connessioni ai data store.
+ Crea una o più attività di migrazione per migrare i dati tra gli archivi dati di origine e di destinazione.
+ Replica continua da SAP ASE a SQL Server
+ (Facoltativo) Migrazione completa dei dati da SAP ASE a SQL Server con acquisizione dei dati di modifica

Potrebbe essere necessario ottimizzare la gestione AWS DMS di determinati tipi di dati. Per ulteriori informazioni, vedere [Utilizzo di un database SAP ASE come fonte per AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html).

## Migrazione dei dati offline
<a name="migrating-offline-data"></a>

Puoi utilizzarlo Gateway di archiviazione AWS per integrare il tuo database SAP ASE con Amazon Simple Storage Service (Amazon S3), che fornisce uno storage conveniente, scalabile e sicuro per i backup di database SAP ASE locali. Per ulteriori informazioni, consulta [Integrare un database SAP ASE con Amazon Gateway di archiviazione AWS S3](https://aws.amazon.com/blogs/storage/integrate-an-sap-ase-database-to-amazon-s3-using-aws-storage-gateway/) utilizzando.

## Utilizzo di strumenti di terze parti
<a name="using-third-party-tools"></a>

Alcune applicazioni fungono da punto di contatto unico (SPOC) che si interfaccia con altre applicazioni. Durante la migrazione a una piattaforma di database SQL Server, queste interconnessioni potrebbero risentirne e il monitoraggio del database potrebbe richiedere strumenti nativi o di terze parti che utilizzano protocolli di comunicazione specifici del server. È importante valutare se queste applicazioni e strumenti dipendenti supportano già SQL Server o se necessitano di modifiche per funzionare correttamente.

Per le applicazioni in pacchetto, consulta i fornitori per determinare se supportano Amazon RDS for SQL Server. Per le applicazioni personalizzate, potrebbe essere necessario modificare il codice per garantire la compatibilità con il database migrato.

## Monitoraggio del database
<a name="monitoring-the-database"></a>

Indipendentemente dal percorso di migrazione scelto, Amazon CloudWatch svolge un ruolo nella raccolta di parametri, come il tipo di CPU, la memoria e I/O le funzioni. È anche in grado di impostare soglie di metriche e avviare azioni quando vengono attivate le soglie.

Ad esempio, puoi creare allarmi per parametri, notifiche e azioni del cluster Amazon RDS per rilevare e chiudere le istanze di lettura inutilizzate o sottoutilizzate. L'impostazione di allarmi su metriche ed eventi può aiutare a ridurre al minimo i tempi di inattività e gli impatti aziendali. Servizi AWS come Amazon S3, [Amazon RDS Performance Insights,](https://aws.amazon.com/rds/performance-insights/) Amazon CloudWatch, e AWS CloudTrail sono già integrati con la piattaforma di database RDS e li consigliamo per monitorare le prestazioni.

## Convalida dei dati
<a name="validating-the-data"></a>

Una volta completata la migrazione dei dati da SAP ASE ad Amazon RDS for SQL Server, convalida i dati per garantire precisione e coerenza. Utilizza le seguenti query SQL per generare istruzioni di metadati per ogni tabella del database.

### Fase 1: Generazione di istruzioni di metadati ed elenchi di colonne
<a name="step-1-generate-metadata-statements-and-column-lists"></a>

```
SELECT dt.schema_name, dt.table_name,
    STRING_AGG(dt.column_name, ',') AS column_name,
    STRING_AGG(dt.cname, ',') AS column_order
FROM (
    SELECT 
        object_name(a.id) AS table_name,
        a.name colname,
        c.name col_type,
        a.isnullable,
        a.name AS cname,
        schema_name(b.uid) AS schema_name,
        CASE 
            WHEN a.isnullable = 1 THEN
                CASE 
                    WHEN c.name LIKE '%char%' 
                        THEN 'coalesce(ltrim(rtrim('+a.name+')),''X'') as '+a.name
                    WHEN (c.name LIKE '%int%' OR c.name = 'numeric') 
                        THEN 'coalesce('+a.name+',0) as '+a.name
                    WHEN c.name IN ('decimal','float','money') 
                        THEN 'coalesce('+a.name+',0.0) as '+a.name
                    WHEN c.name LIKE 'datetime%' 
                        THEN 'coalesce(convert(nvarchar(30),'+a.name+',112),''99991231'') as '+a.name
                    ELSE a.name 
                END
            WHEN c.name LIKE 'datetime%' 
                THEN 'coalesce(convert(nvarchar(30),'+a.name+',112),''99991231'') as '+a.name
            WHEN c.name LIKE '%char%' 
                THEN 'coalesce(ltrim(rtrim('+a.name+')),''X'') as '+a.name
            ELSE a.name
        END AS column_name
    FROM syscolumns a
    INNER JOIN sysobjects b
        ON a.id = b.id 
        AND b.type = 'U'
    INNER JOIN systypes c
        ON a.usertype = c.usertype
        AND a.xusertype = c.xusertype
        AND c.name != 'varbinary'
    INNER JOIN (
        SELECT 
            OBJECT_NAME(ic.OBJECT_ID) AS table_name,
            COL_NAME(ic.OBJECT_ID, ic.column_id) AS column_name
        FROM sys.indexes AS i
        INNER JOIN sys.index_columns AS ic
            ON i.OBJECT_ID = ic.OBJECT_ID
            AND i.index_id = ic.index_id
            AND i.is_primary_key = 1
    ) pk
        ON pk.table_name = object_name(a.id)
        AND pk.column_name = a.name
) dt 
GROUP BY dt.schema_name, dt.table_name;
```

La tabella seguente elenca esempi di output:


| 
| 
| **Nome dello schema** | **Nome della tabella** | **Nome della colonna** | **Ordine delle colonne** | 
| --- |--- |--- |--- |
| Person | Indirizzo | IndirizzoID | ID indirizzo | 
| Person | AddressType | AddressTypeID | AddressTypeID | 
| Person | BusinessEntity | BusinessEntityID | BusinessEntityID | 
| Person | BusinessEntityAddress | BusinessEntityID, ID indirizzo, ID AddressType | BusinessEntityID, ID indirizzo, ID AddressType | 

### Fase 2: Generazione di query di confronto utilizzando i risultati dei metadati e creazione di istruzioni SELECT
<a name="step-2-generate-comparison-queries"></a>

```
SELECT <column_name>
FROM [schema_name].[table_name]
ORDER BY <column_order>;
```

Di seguito è riportato un esempio di query generata:

```
SELECT BusinessEntityID, AddressID, AddressTypeID
FROM [Person].[BusinessEntityAddress]
ORDER BY BusinessEntityID, AddressID, AddressTypeID;
```

### Fase 3: Convalida
<a name="step-3-validation"></a>

1. Esegui la query sui metadati in entrambi i database.

1. Genera ed esegui `SELECT` istruzioni per ogni tabella.

1. Confronta i risultati tra i database di origine e di destinazione:
   + Il numero di righe deve corrispondere.
   + I valori dei dati devono essere identici.
   + Verifica la presenza di problemi di conversione dei tipi di dati.

### Fase 4: Convalida del conteggio delle righe
<a name="step-4-validate-row-count"></a>

```
SELECT COUNT(1) AS total_rows
FROM [schema_name].[table_name];
```

### Passaggio 5: aggiorna la configurazione dell'applicazione in modo che punti al nuovo database
<a name="step-5-update-your-application-configuration"></a>

1. Aggiorna il gruppo di sicurezza.

1. Modifica la stringa di connessione DNS in base alle esigenze per connetterti al database di destinazione.

## Test della migrazione
<a name="testing-the-migration"></a>

Il processo di test può aiutarti a identificare i problemi trascurati durante lo sviluppo, come le query convertite in modo errato o gli indici mancanti. Inoltre, potrebbe rivelare la necessità di ottimizzare il motore di database o modificare le query in base alle prestazioni del carico di lavoro.

I test funzionali, che includono test unitari per i flussi di lavoro delle applicazioni, aiutano a garantire una perfetta integrazione con il nuovo database. I test delle prestazioni aiutano a ottimizzare il database verificando i tempi di risposta accettabili e identificando i punti deboli.

Sebbene esistano metodi di test manuali e automatizzati, consigliamo un metodo automatizzato perché è più efficiente, soprattutto per cicli di test aggiuntivi.