Switched many times. Mostly because the "Involuntary Conversion" -- an old product is no longer supported or is no longer suitable.
- DB2 to Oracle. Pre-UDB data was preserved and moved into Oracle.
- MS-Access to Oracle. Continued using the Access front-end over Oracle tables.
- Oracle to Oracle. 6 to 8, I think...
"why did you do it?" Not features. Not cost. In all cases, something is broken.
- Old product no longer works. Either an OS upgrade or something else has made the legacy product break.
- Old product did not scale.
Switching is rarely something you choose to do. It's forced on you when vendors go out of business (Ingres did this once) or stop supporting your version (Microsoft does this frequently).
Then, of course, it's a crisis. Compounded by the technical complexity of trigger and stored procedure changes. If it was only the data, it wouldn't be much of a crisis. Dump to some standard form (CSV, for instance), reload, and you're up and running.
More importantly, the more "stuff" (stored procedures, triggers, etc.) in the database, the more your application software becomes a confusing pile of hard-to-follow (and hard-to-maintain) kludges. There's nothing so frustrating as waiting weeks for someone to track down a stored procedure name. If it was VB code, everyone would have had access to it. But since it was in the database, it became -- paradoxically -- less visible. Code is code and should be kept away from data.
See Where to put your code - Database vs. Application? for more on this topic.