Recentelijk zijn wij door twee van onze klanten benaderd om te helpen bij het overstappen van Oracle in eigen beheer naar een beheerde Azure SQL Server. In de vorige blog hebben we uitgelegd hoe wij gebruik maken van een gelaagde architectuur. Dit maakt het makkelijk om de ene database naar de andere te migreren. We vroegen Eric Wijnands om ons meer te vertellen over een van zijn huidige projecten, de migratie van een Oracle webapplicatie naar Azure.
Wie is Eric?
Eric is onze Systeem Architect en werkt inmiddels al meer dan 20 jaar voor BSL. Hij kent veel van onze klanten en heeft menig project geleid. Daardoor heeft hij een schat aan ervaring opgebouwd.
Hoewel hij zelf met Windows werkt, heeft hij ervaring met verschillende platforms en ook met een breed scala aan technologieën.
Eric, wat was je eerste indruk van Azure?
Het Azure platform bevat een brede reeks van diensten. Er zijn verschillende Cloud services beschikbaar, waaronder Azure SQL. Binnen Azure SQL kun je kiezen uit een Azure SQL database, een beheerd platform of een SQL server in een Virtual Machine.
Voor BSL is de Azure SQL database het meest relevant. We zijn reeds bekend met veel van de SQL Server features. De database wordt geleverd als een cloud service. Dit houdt in dat Microsoft, de provider, zorgt voor de beschikbaarheid, updates en backups. Dus alle voordelen van een SQL server zonder de administratieve rompslomp. En omdat je betaalt naar gebruik kan er gemakkelijk opgeschaald worden om te voldoen aan een hogere vraag.
Hoe was het om SRS van Oracle naar Azure SQL Server te migreren?
SRS is volledig ontwikkeld in Oracle. Wij ontwikkelen vaker in Oracle, omdat dat ten opzichte van andere databases meer functionaliteit biedt. BSL is echter flexibel, dus over de jaren hebben we meerdere databases gebruikt, waaronder SQL Server databases.
We zijn bekend met zowel het Oracle (PL/SQL) als SQL Server (Transact-SQL) dialect. Ook zijn we op de hoogte van de verschillende datatypes die beide databases ondersteunen. Toch was Azure SQL Server nieuw voor ons. We zijn dus eerst begonnen met het opzetten van accounts. Om gevoel voor het product te krijgen hebben we simpele test databases opgezet. Dit gaf ons ook de kans om onze Java DB libraries te testen tegen een Azure SQL database.
Zijn er hulpmiddelen gebruikt voor de migratie?
Aanvankelijk hebben we gebruik gemaakt van de Microsoft SQL Server Migration Assistant for Oracle (SSMA) om de Oracle tabellen en packages te converteren. Het datamodel werd goed gemigreerd door SSMA, maar de SQL code minder. SSMA probeert Oracle features die niet bestaan in SQL Server na te bootsen door functionaliteit toe te voegen in SQL Server. De gegenereerde code is echter lastig om te lezen en te onderhouden.
We hebben daarna gekeken naar de programma’s van SQLines. SQLData kan zowel het datamodel als de data tussen beide databases overzetten. Dit hebben we gebruikt om de data te migreren en om de Oracle tabellen, inclusief kolomdocumentatie en indexen, aan te maken in de Azure SQL Server.
Met de SQL Converter van SQLines kan de SQL code geconverteerd worden, inclusief stored procedures (SP’s), triggers en stored functions. Met deze Converter hebben we de Oracle packages geconverteerd. De gegenereerde code van dit programma was een stuk beter leesbaar en sloot beter aan op de oorspronkelijke Oracle code.
Wat waren de uitdagingen?
De uitdaging zat hem vooral in het converteren van de datatypes. Het Oracle type ORDImage bijvoorbeeld bestaat niet in Azure SQL. Dit type bevat onder andere het mime-type en de binaire inhoud. In Azure SQL hebben we dit datatype moeten scheiden over twee kolommen – één voor het mime-type en één voor de binaire data.
Daarnaast hebben we enkele gebruikte datatypes kunnen optimaliseren. In Oracle gebruikten we bijvoorbeeld een NUMBER(1) datatype om Boolean waarden (ja/nee) op te slaan. In SQL Server kunnen we het type BIT gebruiken, wat ruimte besparing en betere prestaties oplevert.
Welke problemen kwamen jullie tegen bij het converteren van de SP’s?
We hebben ongeveer 20.000 regels code en meer dan 200 stored procedures geconverteerd. Dit moesten we allemaal nalopen na de conversie door SQLines. Sowieso moesten we onze foutafhandeling aanpassen, zowel in de database code als in de Java database libraries. Daarnaast waren er een aantal verschillen in syntax.
Hoewel de gebruikte tools veel van het conversiewerk voor zijn rekening hebben genomen, moesten onze ontwikkelaars de gegeneerde code wel volledig nalopen en aanpassen waar nodig. Zo liepen we bijvoorbeeld tegen de volgende problemen aan:
- Oracle converteert automatisch tussen numerieke en tekst waarden, maar SQL Server doet dit niet.
- Oracle maakt geen onderscheid tussen de NULL waarde en een lege tekst, maar SQL Server ondersteunt dit onderscheid wel.
- De XML manipulatie van Oracle (XML DB) verschilt van de implementatie van de SQL Server. Gelukkig konden wij dankzij het gebruik van Transact-SQL een één-op-één conversie bewerkstelligen.
We hadden ongeveer zo’n 12 dagen nodig om alle code na te lopen en aanpassingen te doen. Het gehele proces van de database conversie, inclusief data, nam zo’n 14 dagen in beslag.
Hoe kijk je nu aan tegen het Azure platform?
Eric was kort en bondig: “De Azure SQL Database werkt prima: we kunnen met onze applicaties de database bereiken en het uitvoeren van de geconverteerde SQL code levert dezelfde resultaten op als bij een connectie met een Oracle database. We zijn er ook van overtuigd dat er vrij weinig database onderhoud nodig is in het toekomst.”
Neem contact op
Heeft u plannen om uw eigen systeem te migreren naar Azure, of naar andere databases waarmee wij bekend zijn? Neem dan contact met ons op. Wellicht kunnen we u van dienst zijn. U bent vrij om contact op te nemen met onze relatiemanager Caroline Bos. Zij kan dan een online call opzetten.