Condividi tramite


Eseguire la migrazione da MySQL a SQL Server 2008

di Tali Smith

Introduzione

Con l'avvento di SQL Server Driver per PHP, gli sviluppatori PHP hanno ora una piattaforma avanzata per lo sviluppo e l'esecuzione di applicazioni Web: Windows Server 2008 e Microsoft® SQL Server® 2008.

Eseguire la migrazione da MySQL a SQL Server 2008

È possibile eseguire la migrazione dal database MySQL a SQL Server 2008 attenendosi alla procedura seguente:

  1. Decidere come eseguire il mapping dei database MySQL a SQL Server 2008. Sono disponibili due opzioni principali:

    • Eseguire il mapping di ogni database MySQL a un database di SQL Server separato.
      Ad esempio, è possibile eseguire il mapping del database MyDB MySQL al database di SQL Server MyDB.
    • Eseguire il mapping di ogni database MySQL a un singolo database di SQL Server ma a uno schema separato.
      Ad esempio, è possibile eseguire il mapping del database MySQL MyDB al database di SQL Server MySQLDatabases, schema MyDB.
  2. In SQL Server gli schemi non sono necessariamente collegati a un utente specifico o a un account di accesso e un server contiene più database.

  3. Convertire oggetti di database; si tratta di tabelle, vincoli di tabelle, indici, viste, procedure, funzioni e trigger.

  4. Eseguire il mapping dei tipi di dati dal tipo di dati MySQL a un tipo di dati di SQL Server.

  5. Riscrivere le viste, le procedure e le funzioni in base alla sintassi di SQL Server.

  6. Modificare le applicazioni in base alle esigenze in modo che possano connettersi e usare SQL Server 2008.

Dopo una conversione corretta del database, eseguire la migrazione dei dati dal database MySQL precedente al database di SQL Server 2008 appena creato. Per questa attività, ad esempio, è possibile usare Microsoft® SQL Server® Integration Services (SSIS).

Convertire oggetti di database

Sarà quindi necessario convertire gli oggetti di database.

Nomi degli oggetti dello schema

  • In SQL Server 2008 un nome di oggetto può contenere fino a 128 caratteri.

  • I nomi degli identificatori non racchiusi tra virgolette devono seguire queste regole:

    • Il primo carattere deve essere alfanumerico, un carattere di sottolineatura (_), un segno di chiosco (@) o un segno di numero (#).
    • I caratteri successivi possono includere caratteri alfanumerici, un carattere di sottolineatura, un segno di chiosco (@), un segno di numero o un segno di dollaro.
    • L'identificatore non deve essere una parola riservata Transact-SQL.
    • Non sono consentiti spazi incorporati o caratteri speciali.
  • Gli identificatori che iniziano con @ o un segno di numero hanno significati speciali. Gli identificatori che iniziano con @ sono nomi di variabili locali. Quelli che iniziano con un segno di numero sono nomi di tabella temporanei.

  • Per citare un nome di identificatore in Transact-SQL, è necessario usare parentesi quadre ([]).

Tabelle, vincoli, indici e viste

  • Convertire le tabelle usando il mapping dei tipi di dati della colonna . Vedere Mapping dei tipi più avanti in questa guida.
  • SQL Server 2008 supporta i vincoli di tabella (colonna) seguenti: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY e CHECK. Convertire ogni tipo di vincolo in base alla sintassi Transact-SQL.
  • Le istruzioni SELECT con VIEW devono essere convertite anche in base alla sintassi Transact-SQL SELECT.

Stored procedure e funzioni definite dall'utente

  • Convertire stored procedure e funzioni usando la sintassi Transact-SQL.
  • SQL Server 2008 non supporta istruzioni DML nelle funzioni definite dall'utente. Ciò significa che non è possibile modificare dati dall'interno della funzione.

Trigger

  • SQL Server 2008 non dispone di trigger BEFORE.
  • Convertire più trigger BEFORE in un singolo trigger INSTEAD OF.

Eseguire la migrazione dei tipi di dati MySQL

Sarà necessario eseguire la migrazione dei tipi di dati MySQL. Seguire i mapping dei tipi consigliati per la conversione di colonne di tabella, argomenti subroutine, valori restituiti e tipi di dati variabili locali, come illustrato nella documentazione: http://tinyurl.com/yf9cfcg.

Eseguire la migrazione di funzioni di sistema MySQL

Sarà quindi necessario eseguire la migrazione delle funzioni di sistema MySQL.

Funzioni equivalenti

Le funzioni di sistema MySQL seguenti sono utilizzabili come nel codice di SQL Server:

ASCII, LEFT, LOWER, LTRIM, REPLACE, REVERSE, RIGHT, RTRIM, SOUNDEX, SPACE, SUBSTRING, UPPER, ABS, ACOS, ASIN, ATAN, ATAN2, CEILING, COS, COT, DEGREES, EXP, FLOOR, LOG, LOG10, PI, POWER, RADIANS, RAND, ROUND, SIGN, SIN, SQRT, TAN, DAY, MONTH, COALESCE, NULLIF, CAST, CONVERT.

Funzioni non supportate

Le funzioni MySQL seguenti non possono essere emulate facilmente in SQL Server a causa delle differenze tra organizzazione logica e fisica e del modello di sicurezza:

BENCHMARK, CHARSET, COERCIBILITY, COLLATION, CRC32, DATE_ADD con INTERVAL, DATE_SUB con INTERVAL, GET_FORMAT, PERIOD_ADD, PERIOD_DIFF, SUBTIME, TIMESTAMP, TIMESTAMPADD, TIMESTAMPDIFF, MATCH, EXTRACTVALUE, UPDATEXML, GET_LOCK, IS_FREE_LOCK, MASTER_POS_WAIT, RELEASE_LOCK.

Nota

: questo articolo riepiloga il materiale in: "Guide to Migrateing from MySQL to SQL Server 2008" diAlexandero Alexander, Yuri Rusakov e Yuri Turnakov, pubblicato nel mese di agosto 2009.*

[1] IBM Corporation. 14 novembre 2006. Usare PHP in System i, Parte 1: Introduzione ed esempi.