Imagine you have a generic database that is just storing data in tables. No compiled code or views, just bare tables. Now you add 2 web servers that both get their data from this shared database. Your normal reasoning for doing this is to scale your app and add some redundancy to the middle tier, but this has an additional benefit. When it comes time to upgrade the code in your app, you can remove one web server from the load balancer, forcing all the traffic to go to the remaining WS. While the first WS is not taking any traffic, you are free to upgrade and test the app. Since no one sees the site as down, you may take your time with this and do all the testing and tweaking you want. Only when you are confident in the newly upgraded WS do you place it back in service. For overall consistency, you probably now want to remove the 2nd WS and watch that your newly upgraded server is acting exactly as you expect. Once you have a high level of confidence that the new version of your app is what you want it to be, and little chance you will want to revert to the old version, you simply run the same upgrade on the 2nd WS and place it back into service as well. Upgrade done safely and efficiently.
Obvious and old news really. You have virtualized your code into sets that run independently, in this case on web servers. Now let’s extend that to imagine that we can virtualize our code inside the database. Just as a load balancer makes decisions about which web servers to send connections to based on network addresses (name or IP), now our middle tier needs to make a decision about which virtual code set to use within the database. Once we connect to that code set, everything else looks the same, but at a high level we have achieved with database code that we did earlier with web server code, and now we can upgrade our database app with the same process (at least conceptually).
The tag that identifies a virtual code set in Oracle is called an “edition”. If you are running an 11gR2 database, you are already using a virtual code set, possibly without even knowing it existed, it’s an edition called ORA$BASE.
