Quick Post: Mendix and Oracle

This isn't a fully featured blog post or anything. I just wanted to capture (and share) some lessons learned over the past week with one of my clients when attempting to configure Mendix on premise with Oracle as the DB.

First, the table name in Oracle is limited to 30 characters. Mendix creates long table names (up to 254 characters, I believe) by default because it maps the module name as the first part of the table name. This means porting a cloud version to Oracle is going to be very, very difficult. Not impossible, but what complicates the issue is that when you standup Mendix on Oracle and have it generate the table names, the algorithm used to name the table in 30-character format seems nearly impossible to reverse engineer. It (seemingly) randomly chops out characters form the name and then appends a (seemingly) random numeric roughly 5 or so integers long to the end of the table. If you need to go down this path of moving a production cloud environment locally, it might make more sense to bring up the new system on Oracle, close out open items in the cloud and not create new there, and then archive the db for retainer policy adherence.

Secondly, not surprisingly, Oracle interprets XPath differently than other databases. There is a lot of history 'why' that is that my colleague and I poured through, but I'll leave that for you to discover. The reason I bring this up is how, for example, it treats evaluations of empty strings vs strings that are of length 0, or ''. Oracle evaluates all of them as NULL, which is not the same as we all know as a sting attribute containing ''. A fix for this could be to test the string length instead of = ''. In any case, this is one of the pitfalls we came across.

Lastly, I learned from other Mendix experts that each time you upgrade Oracle, you potentially introduce a whole host of new issues.

So with a word of caution, and discussing with partners and other Mendix experts around the globe, it IS possible to have a highly available Mendix app running on Oracle...It just wouldn't be my first recommendation.