SlideShare une entreprise Scribd logo
1  sur  79
Télécharger pour lire hors ligne
Converting 85% of Dutch Primary Schools 

from Oracle to PostgreSQL
Martijn Dashorst

topicus.nl
Martijn Dashorst
@dashorst
martijndashorst.com
github.com/dashorst
“I’d rather not work with
databases”
Martijn Dashorst (1997, first job interview)
Big thank you to
Klaasjan Brand
Please Give Feedback at

https://2019.pgconf.eu/f
What is ParnasSys?
Why migrate?
Planning
Stages
Conclusions & Questions
Dutch Education System
AGES
4-12
13-16/18
16-23
Primary Education
Secondary Education
Vocational/University Education
pre-vocational (4 yrs), pre-applied science (5 yrs), pre-research university (6 yrs)
vocational (4 yrs), applied science (4 yrs, bachelor), pre-research university (bachelor/master)
EDUCATION TYPE
Primary Education (4-12)
1.5M
students
141k
employees
6973
schoolsages 4-12, 2019-2020 2018 2018
Source: https://www.onderwijsincijfers.nl
Financing Primary Schools
€ government
school
teachers
buildings
materials
€
taxes lumpsum
number of

students

at 1 October
Financing Primary Schools
€ government
school
teachers
buildings
materials
€
taxes lumpsum
number of

students

at 1 October
administration
ParnasSys ~ noun. 

1. A SaaS to run primary schools by keeping student
records for school financing, student counseling and
guidance, attendance keeping and communicating with
parents


ParnasSys ~ noun. 

1. A SaaS to run primary schools by keeping student
records for school financing, student counseling and
guidance, attendance keeping and communicating with
parents
2. The only pinkmagenta administration 

system in the world
Java Web App
Hibernate (ORM)
Business Objects
(SAP)
MAXDB/SAPDB
Single database

Single schema

Multi-tenant
Development started

October 2003
Production in 

April 2004
First Database Migration in 2005
SAPDB/MAXDB ORACLE
User base growing fast

Unpredictable query performance in MaxDB
"Nobody got ever fired
for buying Oracle"
85% of dutch
primary schools
use ParnasSys
~5M student dossiers
in our database
1,270,000 students in 2019-2020
2019
85% of dutch
primary schools
use ParnasSys
~5M student dossiers
in our database
1,270,000 students in 2019-2020
2019
800+ pages 360 tables data & indices
~ 2TB
user files
~ 5TB
What is ParnasSys?
Why migrate?
Planning
Stages
Conclusions & Questions
Mismatch Between Future of
Oracle and our Product
Cost Structure of Running
Oracle Not Compatible with our
Profitability
The Oracle Migration Assistant
Paid Us a Visit
TM
The stranglehold

of the software giants
[...] Especially Oracle would
force unfair contracts upon
clients, and claim many millions
per year of late payments. [...]
http://fd.nl/weekend/1318745/de-wurggreep-van-de-softwarereuzen
Developer Happiness
Or How Do I Run My Database
on My Local Machine
DevOps Happiness on Oracle
is Incompatible with our
Profitability
What is ParnasSys?
Why migrate?
Planning
Stages
Conclusions & Questions
Inventory
✅ Database contents

✅ Java Application Code

✅ Business Objects Universe

✅ Business Objects Reports

✅ Backup & Restore

✅ Monitoring

✅ Training
🚫 No stored procedures

🚫 No custom functions

🚫 No triggers
Seasonality of Education
2 Moments in a Year to Migrate:
X-Mas & Summer Vacation
X-Mass 2 weeks
23 December 2019–5 January 2020
Summer vacation(s)
North
15 juli 2019–23 august 2019

Middle
22 juli 2019–30 august 2019

South
8 juli 2019–16 august 2019
Ideal migration moment:

start of summer vacation
Stage 1: make it run

incorrectly, correctly, fast

Stage 2: migrate production

in accordance to customer expectations
1 Year Migration
1 Year Migration
3 Year Migration
What is ParnasSys?
Why migrate?
Planning
Stages
Conclusions & Questions
Stage 1: make it run
Free

Works™

Great to find issues in your
application
Perl

“The only language that looks the same before
and after RSA encryption”

Direct datatype mapping

E.G. number(1,0) does not map to boolean

Slow

One import takes whole day

Stable or fast (pick one)

Single-threaded: stable but slow

Multi-threaded: fast but unstable

One-way, big bang only
Differences between Oracle and PostgreSQL
“The good thing about standards is that there are
so many to choose from.”
― Andrew S. Tanenbaum
Mapping datatypes
Oracle PostgreSQL
number(1,0) number(1,0)
boolean
Java
int
boolean
enum Sex {

Female,
Male

}
Business
study year (1-8)
present (yes/no)
sex (female/male)
number(1,0)
number(1,0) number(1,0)
varchar2(6) varchar2(6)
ORM is 100% portable
@Basic
@Temporal(TemporalType.DATE)
private Date birthdate;
@Formula("add_months(birthdate, (to_char(sysdate, 'yyyy') to_char(birth
@Temporal(TemporalType.DATE)
private Date birthday;
CREATE OR REPLACE FUNCTION birthday(birthdate IN DATE) RETURN D
IS
BEGIN
RETURN add_months(birthdate-1, 

(to_char(sysdate, 'yyyy')
- to_char(birthdate, 'yyyy')) * 12)+1;
END;
Oracle speaks in tongues
select 1 from dual
select nvl(null, 'n/a') from dual
select * from (select x,y from ...) 

where rownum between 100 and 110
sysdate
trunc
Performance
ID ORGANIZATION NAME BIRTHDATE ...

14342 1231 JOHN SMITH 2010-09-23
14345 1231 MARTIJN DASHORST 2011-03-12
...
ID ORGANIZATION NAME

151231 1231 Group 1A
151232 1231 Group 1B
...
tenant identifier
Oracle is smarter...
UPDATE
testresult tr
SET
tr.endresult = TRUE
WHERE
tr.organisation = ?
AND tr.testpart IN (
SELECT part1.id
FROM
testpart part1
WHERE
part1.preference = (
SELECT MIN(part2.preference)
FROM
testresult tr3
INNER JOIN testpart part2 ON
tr3.testpart = part2.id
WHERE
part2.preference > 0
AND tr3.score IS NOT NULL
AND tr3.test = tr.test
AND ((part1.usemodulenorm IS NULL
AND part2.usemodulenorm IS NULL)
OR part1.usemodulenorm = part2.usemodulenorm)))
Oracle is smarter...UPDATE
testresult tr
SET
tr.endresult = TRUE
WHERE
tr.organisation = ?
AND tr.testpart IN (
SELECT part1.id
FROM
testpart part1
WHERE
part1.preference = (
SELECT MIN(part2.preference)
FROM
testresult tr3
INNER JOIN testpart part2 ON
tr3.testpart = part2.id
WHERE
part2.preference > 0
AND tr3.test = tr.test
UPDATE
testresult tr
SET
tr.endresult = TRUE
WHERE
tr.organisation = ?
AND tr.testpart IN (
SELECT part1.id
FROM
testpart part1
WHERE
part1.preference = (
SELECT MIN(part2.preference)
FROM
testresult tr3
INNER JOIN testpart part2 ON
tr3.testpart = part2.id
WHERE
part2.preference > 0
AND tr3.test = tr.test
AND tr3.organisation = tr.organisation))
100x
improvement
Java Web App
Business Objects
(SAP)
PDF
Universe
Report definition
Parameters
PDF
Teachers Generate a lot of PDFs

but that's OK, because 

Business Objects generates a lot of SQL
Business Objects 

can be a bit nostalgic
Quizz!
SELECT *
FROM A, B
WHERE B.column(+) = A.column
SELECT *
FROM A
RIGHT OUTER JOIN B
ON B.column = A.column
SELECT *
FROM B
LEFT OUTER JOIN A
ON B.column = A.column
SELECT *
FROM A
LEFT OUTER JOIN B
ON B.column = A.column
SELECT *
FROM B
RIGHT OUTER JOIN A
ON B.column = A.column
1 2
3 4
Quizz!
SELECT *
FROM A, B
WHERE B.column(+) = A.column
SELECT *
FROM A
RIGHT OUTER JOIN B
ON B.column = A.column
SELECT *
FROM B
LEFT OUTER JOIN A
ON B.column = A.column
1 2
Production ready?
Application works

Business Objects works
GO!
Application works

Business Objects works
GO!
How long takes migration?
Behavior of application under actual load?

- Heavy use of application side caching in Java process

- Modification of data

- Synthetic tests lie
Can we fall back to Oracle?
Stage 2: Migrate Production
Need help...

1-800-KILLORACLE
Why don't you use HVR?
–Splendid Data
Cross-database replication
using redo logs
Remote UNIX

Machine
Remote XYZ

Machine
Hub Machine
PC
HVR
HVR
Scheduler HVR
HVR
HVR
GUI
Database
Location
Hub DB
Database
Location
IntegrateCapture
Inetd
Router
Transaction
Files
Inetd
HVR
Listener
Service
Lots of databases supported
Lots of databases supported
Why HVR?
• Speed

• Real-time sync with low latency

• Options to test prior to actual migration

• Safe

• Fallback

• Expensive tool, but Special Price for Special Friend
Noteworthy issues
• Use primary key on each table

• Fix datatype incompatibilities because of differences between databases

E.G. time in date field ✅ Oracle 🚫 PostgreSQL

• Disable constraint checking in target database

• Don't perform DDL changes

• Don't update too many rows in a table too often
Oracle based deployment
DB1
PROD
failsafe
DB0
PROD TEST
APP
PROD
Business
Objects
APP
TEST
ORACLEORACLE ORACLE
APP
PROD
APP
PROD
Fail safe server
Offline

Archive Log shipping
DB0 DB1 DB2
PROD PROD TEST
TEST
failsafe
TEST
PROD
failsafe
PROD

standby
APP
PROD
Business
Objects
APP
TEST
ORACLEORACLE
ORACLE
ORACLE
PSQL PSQL
PSQL
HVR migration deployment
DB0 DB1 DB2
PROD PROD TEST
TEST
failsafe
TEST
PROD
failsafe
PROD

standby
APP
PROD
Business
Objects
APP
TEST
ORACLEORACLE
ORACLE
ORACLE
PSQL PSQL
PSQL
Prod Testing Business Objects
PostgreSQL based deployment
DB1 DB2
PROD
failsafe
DB1
PROD TEST
APP
PROD
Business
Objects
APP
TEST
PSQLPSQL PSQL
APP
PROD
APP
PROD
DB0
PROD
ORACLE
D-Dayde-oracle day
22 Juli 2019
What is ParnasSys?
Why migrate?
Planning
Stages
Conclusions & Questions
Make a *really* good inventory of things that have to be migrated

Pick a strategy that works for you

Plan around your business to minimise risk and maximise opportunity

A great way to find bugs in your system

Don't be afraid to pay for tools and help
“Nobody got fired from
migrating away from Oracle”
“Yet”
Migrate our Secondary Education
Application from Oracle to PostgreSQL
Feedback

https://2019.pgconf.eu/f
Questions?
THANK YOU!
@dashorst
martijndashorst.com
github.com/dashorst

Contenu connexe

Similaire à Converting 85% of Dutch Primary Schools from Oracle to PostgreSQL

Ravikanth_CV_10 yrs_ETL-BI-BigData-Testing
Ravikanth_CV_10 yrs_ETL-BI-BigData-TestingRavikanth_CV_10 yrs_ETL-BI-BigData-Testing
Ravikanth_CV_10 yrs_ETL-BI-BigData-Testing
Ravikanth Marpuri
 
Resume_20112016
Resume_20112016Resume_20112016
Resume_20112016
Tara Panda
 
Lokesh_Reddy_Datastage_Resume
Lokesh_Reddy_Datastage_ResumeLokesh_Reddy_Datastage_Resume
Lokesh_Reddy_Datastage_Resume
Lokesh Reddy
 
Nitin - Data Specialist
Nitin - Data SpecialistNitin - Data Specialist
Nitin - Data Specialist
Nitin singhal
 

Similaire à Converting 85% of Dutch Primary Schools from Oracle to PostgreSQL (20)

Resume quaish abuzer
Resume quaish abuzerResume quaish abuzer
Resume quaish abuzer
 
Challenges of Operationalising Data Science in Production
Challenges of Operationalising Data Science in ProductionChallenges of Operationalising Data Science in Production
Challenges of Operationalising Data Science in Production
 
Insync10 anthony spierings
Insync10 anthony spieringsInsync10 anthony spierings
Insync10 anthony spierings
 
Resume
ResumeResume
Resume
 
Jithender_3+Years_Exp_ETL Testing
Jithender_3+Years_Exp_ETL TestingJithender_3+Years_Exp_ETL Testing
Jithender_3+Years_Exp_ETL Testing
 
Girish_Resume
Girish_ResumeGirish_Resume
Girish_Resume
 
Ravikanth_CV_10 yrs_ETL-BI-BigData-Testing
Ravikanth_CV_10 yrs_ETL-BI-BigData-TestingRavikanth_CV_10 yrs_ETL-BI-BigData-Testing
Ravikanth_CV_10 yrs_ETL-BI-BigData-Testing
 
Cv software engineer ameen odeh 2018
Cv software engineer ameen odeh 2018Cv software engineer ameen odeh 2018
Cv software engineer ameen odeh 2018
 
Prasad_Resume
Prasad_ResumePrasad_Resume
Prasad_Resume
 
Arun Kondra
Arun KondraArun Kondra
Arun Kondra
 
BigData_Krishna Kumar Sharma
BigData_Krishna Kumar SharmaBigData_Krishna Kumar Sharma
BigData_Krishna Kumar Sharma
 
Tarun_Medimi
Tarun_MedimiTarun_Medimi
Tarun_Medimi
 
tej..
tej..tej..
tej..
 
Jeeva_Resume
Jeeva_ResumeJeeva_Resume
Jeeva_Resume
 
Debanshu_CV
Debanshu_CVDebanshu_CV
Debanshu_CV
 
Teradata - Hadoop profile
Teradata - Hadoop profileTeradata - Hadoop profile
Teradata - Hadoop profile
 
Resume_20112016
Resume_20112016Resume_20112016
Resume_20112016
 
Yeswanth-Resume
Yeswanth-ResumeYeswanth-Resume
Yeswanth-Resume
 
Lokesh_Reddy_Datastage_Resume
Lokesh_Reddy_Datastage_ResumeLokesh_Reddy_Datastage_Resume
Lokesh_Reddy_Datastage_Resume
 
Nitin - Data Specialist
Nitin - Data SpecialistNitin - Data Specialist
Nitin - Data Specialist
 

Plus de Martijn Dashorst

Keep your Wicket application in production
Keep your Wicket application in productionKeep your Wicket application in production
Keep your Wicket application in production
Martijn Dashorst
 

Plus de Martijn Dashorst (20)

HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
 
From Floppy Disks to Cloud Deployments
From Floppy Disks to Cloud DeploymentsFrom Floppy Disks to Cloud Deployments
From Floppy Disks to Cloud Deployments
 
SOLID principles
SOLID principlesSOLID principles
SOLID principles
 
Solutions for when documentation fails
Solutions for when documentation fails Solutions for when documentation fails
Solutions for when documentation fails
 
Whats up with wicket 8 and java 8
Whats up with wicket 8 and java 8Whats up with wicket 8 and java 8
Whats up with wicket 8 and java 8
 
Code review drinking game
Code review drinking gameCode review drinking game
Code review drinking game
 
Java Serialization Deep Dive
Java Serialization Deep DiveJava Serialization Deep Dive
Java Serialization Deep Dive
 
Code review drinking game
Code review drinking gameCode review drinking game
Code review drinking game
 
Scrum: van praktijk naar onderwijs
Scrum: van praktijk naar onderwijsScrum: van praktijk naar onderwijs
Scrum: van praktijk naar onderwijs
 
Who Automates the Automators? (Quis Automatiet Ipsos Automates?)
Who Automates the Automators? (Quis Automatiet Ipsos Automates?)Who Automates the Automators? (Quis Automatiet Ipsos Automates?)
Who Automates the Automators? (Quis Automatiet Ipsos Automates?)
 
De schone coder
De schone coderDe schone coder
De schone coder
 
Wicket 10 years and beyond
Wicket   10 years and beyond Wicket   10 years and beyond
Wicket 10 years and beyond
 
Apache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a treeApache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a tree
 
The State of Wicket
The State of WicketThe State of Wicket
The State of Wicket
 
Wicket 2010
Wicket 2010Wicket 2010
Wicket 2010
 
Vakmanschap is meesterschap
Vakmanschap is meesterschapVakmanschap is meesterschap
Vakmanschap is meesterschap
 
Keep your Wicket application in production
Keep your Wicket application in productionKeep your Wicket application in production
Keep your Wicket application in production
 
Wicket In Action - oredev2008
Wicket In Action - oredev2008Wicket In Action - oredev2008
Wicket In Action - oredev2008
 
Guide To Successful Graduation at Apache
Guide To Successful Graduation at ApacheGuide To Successful Graduation at Apache
Guide To Successful Graduation at Apache
 
Wicket In Action
Wicket In ActionWicket In Action
Wicket In Action
 

Dernier

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Dernier (20)

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Pharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyPharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodology
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 

Converting 85% of Dutch Primary Schools from Oracle to PostgreSQL