The much awaited OWB to ODI Migration utility has been released.
The migration utility is a command-line tool that enables you to migrate design-time metadata from OWB 188.8.131.52 to ODI 12c. The migration utility is provided in patch number 17547241 for your OWB 11gR2 (184.108.40.206) installation.
Migration is supported on Linux 64-bit x86 systems only. Before migrating, ensure that the following requirements are met:
OWB 220.127.116.11 installed (OWB 18.104.22.168 plus patch number 17547241)
ODI 22.214.171.124.0 installed (ODI 126.96.36.199.0 plus patch number 17053768)
ODI is Oracle's strategic product for heterogeneous data integration. Because many Oracle Database customers have significant investment in OWB, Oracle supports a phased migration from OWB 11gR2 (188.8.131.52) to ODI 12c (12.1.2).
ODI 12c supports an easier mapping between OWB 11gR2 concepts and objects and their ODI 12c counterparts. A migration utility is provided that automatically translates many OWB objects and mappings into their ODI equivalents. More information about the migration utility is here
In addition to enabling the migration, the ODI 12c patch also comes
new components such as Pivot, Unpivot, Subquery filter and Table Functions.
They're documented in the following appendix:
It's been another busy week here at OTN. We have some of our team over at Devoxx, others wrapped up our participation at QCon SF, and yet others prepped for our upcoming Virtual Developer Day - Oracle ADF Development - Web, Mobile and Beyond (Americas Nov 19th, APAC Nov 21st, EMEA Nov 26th).
Here is the BEST of OTN for this week....
Architect Community -
Video: Coherence Community on Java.net - 4 Projects available under CDDL-1.0
Community Video Profile: Kevin McGinley - OBIEE, Business Intelligence, and Advanced Analytics
Do SOA stakeholders recognize the problems caused by poor communication among siloed service development teams? In this third and final segment of the series a panel of experts, including several Oracle ACE Directors, shares their insight.
Friday Funny from Valerie Simpson, Oracle WebLogic Community Manager - "Even if you're on the right track, you'll get run over if you just sit there." — Will Rogers, American humorist
(November 4, 1879 – August 15, 1935)
Java Community -
Video: Richard Bair on Java and the Internet of Things, Lambdas and more - Richard Bair, Client Java Architect, discusses Java and the Internet of Things,JavaFX, Lambdas and more. From the Devoxx conference in Antwerp
Java SE 7 Update 45 Technical Topics - This blog offers useful how-to’s, best practices, and advice on Java SE, Java Security and Usability. With the Java SE 7 Update 45, Java Platform team explains 7u45 caller-allowable-codebase and trusted-library as well as updated security baseline (7u45).
GlassFish and JavaEE Roadmap Update - Oracle has announced updates to the GlassFish roadmap.
Friday Funny form Tori Wieldt, Java Community Manager: Thank God we nipped that in the bud!
To follow and take part in the conversation follow/like etc. at one or all of the resources below -
With the new Oracle Cloud offering you no longer need to install and manage the runtime platform for ADF applications. You can use a hosted instance of Oracle WebLogic and the Oracle Database to host your application.
Deployment to the cloud is quite straightforward, and you can do it directly from inside JDeveloper.
Here is a quick video showing you how to first create your database objects and then deploy your application to the cloud.
One small point, in the demo you don't see it but I also used the option to import the data into the tables.
To do that scroll the cloud cart to the right and check the check box for data.
This is the fourth of twelve articles in a series called Operationally Scalable Practices. The first article gives an introduction and the second article contains a general overview. In short, this series suggests a comprehensive and cogent blueprint to best position organizations and DBAs for growth.
In the first half of this article we discussed platform standardization at a fairly high level. Now it’s time to get specific. What are some detailed suggestions for the platform that your Oracle databases will run on? Which decisions today could most impede or ease scaling your operations tomorrow?
The Oracle database is best known for running on expensive and powerful enterprise platforms. But you probably started thinking about standards long before this point – probably when your databases were still running on a handful of small commodity servers. This is when you want to start doing things right. And just to be clear, this isn’t mainly about spending more money. It’s more about how you do things. The standards and driving principles at very large organizations can benefit your commodity servers right now and eliminate many growing pains down the road.Storage
As we said before, successfully moving into standards works best when you start at the bottom of the stack – and the very bottom of your stack is your storage.
Storage is incredibly important to the platform underneath an Oracle database. As you craft standards for the storage component of your platform, start small and think modular.
- This isn’t specific to Oracle, but I strongly recommend drawing pictures to help understand storage architecture. I do this all the time. Start with the spindles and draw each link (SATA, PCI, etc) on the path to the CPU. Ignore caching and for extra credit add throughput numbers.
- Think mainly about spindle count. Size/capacity is secondary. Standardize on one size for your local disks; optionally add a second “high-capacity” option but two disk size purchasing options should take your org a long way. (Exadata only offers two.)
- Minimum 4 spindles in your smallest servers. I feel self-conscious suggesting this to smaller budget-conscious organizations but I think the benefits will make it worthwhile, particularly as standardization enables you to better consolidate.
- Two spindles mirrored for data and two spindles mirrored for recovery. This basic data/recovery split is deeply ingrained in oracle database layout – oracle automatically keeps a copy of important data on both volumes (control files, online logs). Don’t compromise on having two physically independent volumes. The disks used for recovery can also be used for the operating system.
- Add more spindles as you grow, cheap DAS or NAS is fine once the server chassis is full. Just keep those pictures up-to-date. Sketching and scanning is fine if you don’t want to spend too much time in visio or lucidchart.
- Introducing any form of shared network for storage requires great care, whether it’s fiber or ethernet. It’s not just cost – inexpensive options greatly increase complexity and risk (similar to clustering). Don’t go here until you must and then make sure you develop or hire the skills to manage it well.
- Parity can be tempting because of the extra capacity – but stick with mirroring for data protection. It won’t break the bank to buy a little more disk. I’m concerned more with local storage here than I am with fancy storage appliances that use parity under the covers. My biggest reason is that it’s far simpler to balance and rebalance I/O with RAID1 than it is with RAID5. Also, James Morle’s SANE SAN papers (both the original and the 2010 update) are informative and worthwhile read even if you’re just using local disk.
- Appliances can ease balancing and rebalancing I/O – but sometimes they get too smart for their own good, creating new problems which can be near impossible to track down due to sky-high levels of complexity in the total system. New storage appliances are adding deduplication, compression and even serialization to the list of clever enhancements. There is some really cool engineering here with the potential to get more capacity and performance with a lot less hardware investment. I really enjoy working with these in lab and pilot environments. But tread carefully with these newer, less-understood, non-traditional storage platforms. One other word on appliances: as the SANE SAN paper points out, cache (which generally includes any SSD storage) is great but design to the disks.
- Use ASM unless you have a good reason not to. My biggest reason is manageability. Specifically, ASM’s rebalancing is stellar. Skipping RAID and letting ASM handle the data protection can offer some big advantages too. ASM’s ability to do mirroring at a more granular level offers some advantages over traditional disk-by-disk RAID mirroring. You can add a single spindle into a diskgroup and ASM will re-balance all data evenly across the group while making sure each individual block maintains a mirrored copy somewhere. You can also remove spindles one-by-one with the same advantages.
- Having a standard disk type is fundamental here. Different disks should not be mixed in a single diskgroup.
- As you grow, ASM can still manage rebalancing even if you move back toward hardware RAID. Nonetheless you still have to know the underlying disk types and make sure not to combine LUNs built on different disk types into a single diskgroup.
- Sketch out a growth path for the next year or so and set expectations for capacity, for IOPS and for throughput. I won’t belabor this; in a nutshell I’m just saying to do a little thinking ahead. Have a rough idea how much disk you are willing to attach to a server, think about how many PCI slots you might need, etc. Always remember that I/O performance (IOPS and throughput) is most closely tied to spindle count rather than capacity. Bigger is not faster.
At this point, I’ve dumped a lot of information and made more than one reckless assertion. Hopefully I won’t start any religious wars. In the next article I’ll discuss CPU, memory, networking and a useful architectural pattern I call “slots”. But before I go there, what are your thoughts on storage for oracle database platforms? It’s a pretty important topic. What did I overlook or forget? Where do you disagree with me? Let me know your thoughts!
Economist says that Physics suggest that storms will get worse as the planet warms. Typhoon Haiyan in Philippines, bush-fires in Australia, floods in China, and extreme unpredictable weather across the planet is a sober reminder. Good news is that technology and awareness is rising, and so is the data. Database technologies are playing their part to intelligently store that data and enabling the stakeholders to analyze and get meaningful results to predict and counter the extreme conditions. This Log Buffer Edition appreciates these efforts.
Big Data Tools that You Need to Know About – Hadoop & NoSQL.
Dave Stokes is copying MySQL data to Hadoop with minimal loss of blood.
Mark Rittman is creating a Multi-Node Hadoop/Impala Cluster as a Datasource for OBIEE 184.108.40.206.
In what appears to be a short space of time, there has been a revolution in the data discovery and analytics space.
Is NoSQL less disruptive than we thought and just, well, useful?
Sayan Malakshinov is sharing a little example of index creation on extended varchars.
As almost everyone is interested in data science, take the boot camp to get ahead of the curve.
Guardian was introduced in Oracle Coherence 3.5 as uniform and reliable mean to detect and report various stalls and hangs on data grid members.
Session profile using V$ tables
Lucas Jellema is on the integrity of data in Java applications.
I got 99 Problems but my Backup ain’t one.
Let’s talk about the case where you want to compare tables to see what’s missing.
How Do You Prevent a SAN Failure? Mike Walsh tells us.
Tracy is going to start introducing some of the Powershell elements that tie audit process together.
Power Pivot: unable to convert a value to the data type requested.
Before there was information_schema and performance_schema, there were InnoDB Monitor tables.
Database schema changes are usually not popular among DBAs or sysadmins, not when you are operating a cluster and cannot afford to switch off the service during a maintenance window.
Will AWS plans for PostgreSQL RDS help it finally pick up?
SHOW EXPLAIN in MariaDB 10.0 vs EXPLAIN FOR CONNECTION in MySQL 5.7
Justin Swanhart is announcing a new MySQL fork: TroySQL.
Guest post today by: Mitchell Palski, WebCenter Sales Consultant
The Oracle WebCenter Portal People Connections service provides social networking tools for creating, interacting with, and tracking the activities of a user’s connections. WebCenter enables users to manage their personal profiles, access the profiles of other users, provide ad hoc feedback, post messages, track activities, and connect with others.
A Profile provides users with a variety of views into their own profile, as well as other users' profile information. Such information can include a user's email address, phone number, office location, department, manager, direct reports, and more. Profile takes the bulk of its information from the back-end identity store that provides a WebCenter Portal application with its list of users. Additionally, a Profile may offer opportunities for altering some of this information and for providing additional data that is not included in the identity store. Here is an example of my profile page in one of our Oracle demonstration environments:
By default, not all sections of the user profile are editable by a user and viewable by other users. It is the administrator's job to specify the information to show in each section of the profile and determine whether users are allowed to edit their profile data and their application password within the WebCenter Portal.
To configure the Profile:1. Open WebCenter Portal Administration. 2. Click Tools and Services, and then select People Connections. Tabs with the names of People Connections features appear to the right. 3. Click the Profile tab to bring it forward. In the Profile Access section of this page, an administrator can control view settings around the sections of the profile. There are two sections under “View settings” that need to be considered when an administrator wants to hide a section of the profile: • Who can view this section • Allow Owner Override For example, a number of my customers have asked about hiding the “Personal Information” section for their users because their users are employees and they don’t want them to share information such as their personal address. In this case, if the administrator logs in as an administrator change “Who can view this section” to “None” a user can still change that setting in their personal Preferences. **Note: the columns in the Profile Access table can be reordered. By default, not all of the attributes in a user’s profile are editable. Use the Profile Attributes – Edit Settings section of this page to enable and disable which attributes can be edited by a user through their web browser. For example, you may want to allow a user to edit their Business Contact information from their profile page.
Conclusion It is important to consider how a user’s information is being used in your Portal environment before making changes to this page. Some questions to ask are: • Is this information being managed elsewhere? • Is user information being used to network? • Are there any security concerns around allowing users to enter user information? For more information on configuring your People Connections Service and User Profile, please refer to these Oracle WebCenter Portal documentation links: • Configuring Profile
• Introducing the People Connections Service
Thanks for your time! Please comment on this post and let us know if this article is helpful for you and your organization!Learn how Oracle WebCenter Portal delivers secure, role-based, and personalized portal solutions that optimize the connections between people, information, and applications. Empower End Users with Integrated Self-Service Portals
->LEARN MORE TODAY!<-
The other day I posted an article on the blog about connecting OBIEE 220.127.116.11 to Cloudera Impala, a new “in-memory” SQL engine for Hadoop that’s much faster than Hive for interactive queries. In this example, I connected OBIEE 18.104.22.168 to the Cloudera Quickstart CDH4 VM, which comes with all the Hadoop and Cloudera tools pre-installed and configured, making it easy to get going with the Hadoop platform.
Whilst the example worked though, I couldn’t help thinking that using Impala against a single node Hadoop install isn’t really how it’d be used in real-life; in reality, if you used OBIEE in this way, you’re much more likely to be connecting to a full Hadoop cluster, with multiple server nodes handling the incoming queries and potentially gigabytes, terabytes or petabytes of data being processed. So it it possible to set up a Hadoop cluster that gets a bit nearer to this multi-node architecture, so we can practice connecting to a cluster and not a single server, and we can see Hadoop process our queries across all of the nodes – as we’d see in real life, given that this low-cost MPP processing is the key benefit of Hadoop as a whole?
Hadoop, as you’re probably aware, was designed from the ground-up to run across multiple nodes, with those nodes typically either being small, low-cost servers, or in many cases servers running in the “cloud”. As such, you’re as likely to see Hadoop running on a cluster of Amazon EC2 server as running on physical servers in a datacenter, and in most cases the underlying OS running on those servers is Linux – most usually, Ubuntu 64-bit. So if we want to set up our own Hadoop cluster, there’s a few options open to us:
1. Get hold of a bunch of physical servers (maybe, old PCs or blade servers), install Linux and Hadoop on them, and then do the configuration and setup manually.
2. Buy a preconfigured solution – Oracle’s Big Data Appliance, for example, which has all the software pre-installed along with connectivity to ODI, Oracle Database etc
3. Spin-up a bunch of servers in the Cloud, or
4. Spin-up a bunch of Linux VMs, for example using VirtualBox or VMWare Fusion/Workstation
In the past I’ve done the Hadoop setup myself, manually, using the Hadoop distribution files available on the Hadoop website, but more recently vendors such as Hortonworks, MapR and Cloudera have put together their own Hadoop + added value tools distributions, and it’s Cloudera I’ve been looking at in most detail recently (if only because there’s a lot of ex-Oracle people there who I know, and it’s the bundled Hadoop distribution that comes with Oracle Big Data Appliance). What’s particularly good about Cloudera’s Hadoop offering is their “Cloudera Manager” utility – of which there’s a free version – and which simplifies the whole process of setting up a cluster by automating most of the process.
What’s also particularly interesting about Cloudera and Cloudera Manager, is that there are a number of solution available out there that automate the process of spinning-up clusters. One of them, described in this blog post on Cloudera’s website, involves using a built-in feature in Cloudera Manager to automatically create, provision and configure X number of Amazon EC2 virtual servers, with this servers then able to handle your queries in parallel and you just paying by the hour for the compute resource you need. So let’s give it a try.
I won’t go into a tutorial or explanation into Amazon Web Services and their EC2 (“Elastic Compute Cloud”) service here, suffice to say that you can create on-demand cloud-based VMs, paying by the hour and with pricing based on the size of instance, amount of memory needed, OS needed and so forth. We use Amazon AWS and EC2 extensively within Rittman Mead for development work, training environments and so forth, and what’s particularly interesting about AWS is the fact it’s all scriptable, there’s a public API and so forth. It’s this public API that Cloudera Manager uses to provision and spin-up the cluster VMs, something Cloudera Manager will automatically offer to do if it detects it’s running on Amazon EC2. Once you’ve provisioned the basic VMs, Cloudera Manager will automatically install the required Hadoop software on each of the VMs, meaning you can just sit back and watch the install, and then at the end, log in and check it’s all working.
And it did work – compared with problems I’d had with earlier versions of Cloudera Manager I’d had, where I’d set up the servers myself, installed Linux and Cloudera Manager myself, it all went amazingly well – to the point where I could upload some data into Impala itself, run some queries, and make use of my cloud-based Hadoop cluster.
And for one-off tasks, particularly where you need a very large amount of compute resource for a relatively small amount of time, Amazon AWS is great, but the cost soon starts to mount-up if you leave it running for too long – reckon on a cost of around $200-$400 for a reasonably-high specced instance for a month, multiplied by the amount of servers in your cluster.
So what are the alternatives? Well as I said before, you could set up a cluster yourself, installing the various bits of software, and potentially creating lots of VMs on a test server to host the Hadoop nodes. But another route you could take is to use one of the various “devops” tools out there to automate the build of a number of Hadoop nodes, using virtualisation tools such as VMWare or VirtualBox and a reasonably well-specced desktop or laptop. Back on the Cloudera website again, I saw a blog post and how-to just along these lines – one that used a devops tool called Vagrant to script and automate the build of the cluster, including setting up Ubuntu Linux on the VMs, and downloading and installing Cloudera Manager, just leaving the job of configuring the Hadoop cluster to us afterwards. This is the approach I finally went with in the end, and to do the same you’d need the following bits of kit and software:
- A desktop or server with a lot of RAM – I’ve used my iMac which has 32GB RAM; you could use a 16GB server or laptop but you’ll need to alter the Vagrant scripts to reflect this
- Either VirtualBox (supported by default by Vagrant) or VMWare Fusion / Workstation (which require an extra-cost plugin for Vagrant)
- Vagrant itself – a free download with install instructions here
Vagrant itself is an easy install and is available for OS X, Windows, Linux etc, and you can download Vagrant configuration flle for setting everything up from the Cloudera blog post. Then, it was a case of running the Vagrant script, and watching it create my VMs.
In the terminal screenshot above, you can see the VMs begin created (I started off using VirtualBox, later on I switched to VMWare Fusion), and in the screenshot below, you can see the various Cloudera packages being downloaded and installed.
Once the Vagrant set-up of the VMs was complete, I then logged into the Cloudera Manager website, and similar to how I’d done it with the EC2-based install, I just selected the other VMs to configure, chose the software components, and let the configuration complete.
At the end of the install process, I had six VMs running to provide by Hadoop cluster, each one using about 4GB of memory, and playing the following roles:
To be honest – you still need to know a bit about Hadoop, what the various bits do and so on to get it working – but then you also do to get Oracle installed, SQL Server, and so on. I guess the real barrier is having a machine big enough to run multiple Hadoop server nodes – too few and you don’t really see how the query processing works – so I guess this is why the cloud / EC2 route is so popular. But for me, I’ve got the six nodes working now, along with an OBIEE Windows VM with 22.214.171.124 installed to test out the connectivity. The screenshot below shows Cloudera Manager listing out the nodes in the cluster:
whilst the screenshot below this shows the various Hadoop platform elements listed out alongside the cluster nodes (a.k.a. VirtualBox/VMWare VMs) they’re running on.
and with OS X’s Activity Monitor showing they’re (just about) comfortably running within the overall 32GB RAM in the iMac.
So – the moment of truth – let’s try out some queries. I’ll start with Hive first of all, as Hue (Hive’s web-based UI) has some nice tools for uploading files and creating Hive tables out of them – or of course you can use ODI and it’s Hadoop Adapter and upload some data to the cluster as part of an ETL process. To use a more meaningfully-large dataset, I unloaded some of the tables from the full Airline Delays dataset to CSV files (around 180m rows of flight leg data), and then created Hive tables out of those – the screenshot below shows data from the main flight leg fact table.
In the background, two things happen when you upload new data into Hive; first, the file containing the data is stored in Hadoop’s filesystem, called HDFS (Hadoop Distributed File System), a unix-like distributed filesystem that breaks data down into blocks, and stores the blocks redundantly across the nodes in the cluster. If we take a look at the file I uploaded with the flight delays fact table data in it, you can see that it’s been broken down into blocks as shown at the bottom of the page:
If you click on an individual block, you can also see that the block is stored primarily on one node, and then redundantly on three other nodes in the cluster.
HDFS does this for two reasons; first, by spreading the data file over multiple servers, it can take advantage of the parallel processing provided by the Hadoop framework. Second, though, this redundancy means that if any node goes down, there’s copies of the data blocks elsewhere in the cluster, giving you the ability to use low-cost, commodity hardware (or cloud-based servers) whilst still protecting uptime, and your data.
So let’s run a query via the Hue UI, using Hive first of all. I put together a simple query that sums up flights, and averages distances, for all flights with California as the destination. As you can see from the Hue screenshot below, the query triggered two MapReduce jobs, one to find all flights with Californian destinations (the “map”), and one to aggregate the results (the “reduce”).
Looking at the MapReduce jobs being spun-up, run and then results gathered in, you can see that the MapReduce element (i.e., query time) took just under three minutes.
Going over the Job Tracker / MapReduce admin pages in Cloudera Manager, you can see the MapReduce jobs that were triggered by the Hive query – see how it handles the join, and how the filtering (mapping) is handled separately to the aggregating (reducing).
You can also bring up the Hadoop task tracker page, to see how the task track gave out chunks of the work to the various nodes in the cluster, and then got the results back in the end.
So – what about the Impala equivalent of the same query, then? Let’s give it a go. Well the query is more or less the same, but this time the results come back in around ten seconds, as we’d expect with Impala.
Looking inside Cloudera Manager, you can see the various Impala server processes working in the background, bypassing the need to generate MapReduce code and instead, using their own in-memory MPP framework to query the HDFS files and return the results.
And finally – the $64,000 question – can we connect OBIEE to the cluster? To do this, you’ll need to download the Cloudera Impala ODBC drivers, as I outlined in my previous blog post on the subject, but once you do, it should work – see the screenshot below where I’m querying the flight delays data using OBIEE 126.96.36.199.
So there you have it – a couple of ways you can spin-up your own multi-node Hadoop cluster, and confirmation that it should all still work with OBIEE once it’s put together.
-- it's just for fun: SQL> alter system set "_scalar_type_lob_storage_threshold"=32000; System altered. SQL> create table t_varchar32000(v varchar2(32000 byte)); Table created. SQL> insert into t_varchar32000 2 select rpad(rownum,31999) || `x' str from dual connect by level<=1000; 1000 rows created. SQL> commit; Commit complete. SQL> create index ix_t_varchar32000 on t_varchar32000(v) tablespace users; create index ix_t_varchar32000 on t_varchar32000(v) tablespace users * ERROR at line 1: ORA-01450: maximum key length (6398) exceeded SQL> create index ix_t_varchar32000 on t_varchar32000(v) tablespace ts_32k; create index ix_t_varchar32000 on t_varchar32000(v) tablespace ts_32k * ERROR at line 1: ORA-01450: maximum key length (26510) exceeded -- tablespace for big varchars: SQL> alter system set DB_32K_CACHE_SIZE=100M; System altered. SQL> CREATE TABLESPACE TS_32K DATAFILE '/u01/app/oracle/oradata/xtsql/pdb1/ts_32k_1.dbf' SIZE 150M 2 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M 3 BLOCKSIZE 32K; Tablespace created. SQL> create table t_varchar16000(v varchar2(16000 byte)) tablespace ts_32k; Table created. SQL> insert into t_varchar16000 2 select rpad(rownum,15999,'x' ) || 'y' from dual connect by level<=1000; 1000 rows created. SQL> create index ix_t_varchar16000 on t_varchar16000(v) tablespace ts_32k; Index created.Spoiler:: Statistics SelectShow
SQL> begin 2 dbms_stats.gather_table_stats( 3 ownname => user 4 ,tabname => 'T_VARCHAR16000' 5 ,method_opt => 'for all columns size auto' 6 ,cascade => true 7 ); 8 end; 9 / PL/SQL procedure successfully completed. SQL> @stats/tab t_varchar16000 OWNER TABLE_NAME PARTITION_NAME # ST_LOCK STALE_STA GLOBAL_ST USER_STAT NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_ROW_LEN AVG_SPACE LAST_ANALYZED --------------- ------------------------------ -------------------- ---- ------- --------- --------- --------- ---------- ---------- ------------ ----------- ---------- --------------- XTENDER T_VARCHAR16000 NO YES NO 1000 3016 0 16001 0 14-NOV-13 OWNER INDEX_NAME NUM_ROWS DISTINCT_KEYS BLEVEL LEAF_BLOCKS CL_FACTOR LAST_ANALYZED GLOBAL_ST USER_STAT --------------- ------------------------------ ---------- ------------- ---------- ----------- ---------- --------------- --------- --------- XTENDER IX_T_VARCHAR16000 1000 1000 1 1000 1000 14-NOV-13 YES NO --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | column_name | num_distinct| low_value | high_value | num_nulls | num_bucket| last_analyzed | sample_size| globa| user_| avg_c| histogram | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | V | 1000 | 1000xxxxxxxxxxxxxx| 9xxxxxxxxxxxxxxxxx| 0 | 1 | 2013-11-14 21:11 | 1000 | YES | NO | 16001| NONE | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
This is the fourth of twelve articles in a series called Operationally Scalable Practices. The first article gives an introduction and the second article contains a general overview. In short, this series suggests a comprehensive and cogent blueprint to best position organizations and DBAs for growth.
I hesitate greatly to use the word “standard” having seen the ways it gets bandied about by IT groups everywhere. But the ubiquitous presence of this term and the manifold frustrations which always accompany it only prove that there’s something relevant here. We’re all familiar with the basic ideas behind so-called standardization. Anyone who has had a job maintaining more than one server for more than one month got frustrated at some point because something worked in one place and unexpectedly failed in another. The reason? Something was different between those two places. And so began the crusade for “standardization” – at least for those of us who had the time, energy, comfort level and motivation to try changing things!
The basic idea behind standards is to make things similar. The more evolved and realistic version of standards is that there’s process wrapped around the differences. (Hope you have those change history systems ready!) The “standard platform” itself has a lifecycle – and there will be new standard platforms to come on whatever schedule makes sense for your business (personally I think 2-4 years is a good place to start). Even though you may still have more than one configuration, by limiting them it becomes realistic to develop predictable processes for moving between them. Of course there will always be bespoke systems to manage; some will be legacy, some will be special-purpose. Smart standardization is not idealistic but rather business-driven. Hope I’m not sounding repetitious by saying that! For each exception, carefully weigh the costs and the benefits over the long term.
As a brief aside here: I do think outside opinions (user groups, professional networks and paid consultation) are very valuable and generally under-utilized. But use them mainly to test your own thinking for flaws. Consultants can sometimes come across very confident and convincing about the right way to do something (it’s an important skill for success in that field) but nobody knows your actual infrastructure and operations better than you. Get lots of input – even pay for some – then question everything and don’t follow advice that you don’t understand. Blame me if the consultants resent you for it!
Successfully moving into standards works best when you start at the bottom of the stack: with your physical hardware. I’ve worked at larger companies who are further along this road and they sometimes have the spec nailed down to the peripheral model numbers and firmware versions. But how can a small company get started on this when they purchase infrequently and have a bunch of existing servers to deal with? A few suggestions:
- Survey your hardware and figure out which server you have the most of. Do the same for peripherals: network cards, memory, CPUs, etc.
- See if you can make these servers look more alike without spending too much money. (For example cpu core count, memory size and hard drive configuration!)
- By this point you should be getting a good idea what CPU, memory and storage needs you have. Look at the newer servers you’ve already bought and see if there’s a suitable choice to be the “standard” moving forward over the next few years.
- Make a simple rule for your organization: for the next year, if a new server is purchased then it will be this exact server in this exact configuration. Is that possible for you? After a year see how things are going and consider extending for another one to three years before choosing the next “standard” platform.
When you survey existing equipment, don’t worry if you can’t get things exactly identical – just get as close as possible. It’s worthwhile just to get the CPU core count, memory size and disk spindle counts to match – or at least minimize the variation. That alone will help a lot when you tackle standards for the layers above the hardware.
Maybe you’ll need a “high-storage” option or a “large-memory” one (Amazon’s options for EC2 instances are informative when defining options). Minimizing variation means that you only allow defined configurations: any app that needs a little extra of some resource needs to go all the way up to the next tier or option you’ve defined. Any app that needs less of some resource isn’t allowed to save money by trimming the hardware. After all, one of the major benefits of good standards is to make consolidation easy – so a bunch of those small apps should share one server. No in-betweens or compromises. In this sense, having a “standard” simply comes down to the courage and ability to convincingly say no to anything else. You need the foresight to see the benefits and the hindsight to recount the costs.
This is already enough material for digesting and discussing, so I’ll split this topic into two articles. In the next article I’ll get into some very specific suggestions from an Oracle database perspective. Any thoughts so far? What do you agree or disagree with?
Hopefully this is not too redundant to previous posts but I’ve found that I keep using a particular script to debug performance issues and I thought I’d share it and explain what I use it for. It’s helpful to me so I’m sure someone could use it unless they have their own tools which meet the same needs.
The first usergroup presentation I did was on the topic of profiles and was based on things I had learned a variety of places including Jeff Holt and Cary Millsap’s excellent book titled “Optimizing Oracle Performance”.
Out of all that came a simple set of SQL and sqlplus commands that I tag on to the end of a sqlplus script that I want to get a profile of. In my case a profile includes:
- Real Elapsed time
The main point of my paper and the critical point I got from the Holt and Millsap book and other things was to compare the total waits and CPU to the real time. So, this SQL/sqlplus code is a quick and dirty way to get this kind of profile for a sqlplus script that you are running as part of a performance testing exercise. Here is the code:
VARIABLE monitored_sid number; begin SELECT sid into :monitored_sid from v$session where audsid=USERENV('SESSIONID'); end; / SELECT SID, substr(USERNAME,1,12) Username, substr(TIMESOURCE,1,30), SECONDS, ROUND(SECONDS/(SELECT ROUND((SYSDATE-LOGON_TIME)*24*60*60,0) FROM V$SESSION WHERE SID= :monitored_sid),2)*100 AS PERCENTAGE FROM (SELECT logon_time, SID, username, 'TOTAL_TIME' TIMESOURCE, ROUND((SYSDATE-LOGON_TIME)*24*60*60,0) SECONDS FROM V$SESSION WHERE SID= :monitored_sid UNION ALL SELECT a.logon_time, a.SID,a.USERNAME,'CPU' TIMESOURCE, ROUND((VALUE/100),0) SECONDS FROM V$SESSION a, V$SESSTAT b where a.SID = b.SID and a.SID = :monitored_sid and b.STATISTIC# = (SELECT STATISTIC# FROM V$STATNAME WHERE NAME='CPU used by this session') UNION ALL SELECT b.logon_time, a.SID,b.USERNAME,a.EVENT TIMESOURCE, ROUND((TIME_WAITED/100),0) SECONDS FROM V$SESSION_EVENT a, V$SESSION b WHERE a.SID = b.SID AND a.SID= :monitored_sid UNION ALL select b.logon_time, a.sid, b.username, 'UNACCOUNTED_TIME' TIMESOURCE, ROUND(MAX(SYSDATE-LOGON_TIME)*24*60*60,0)- (ROUND(SUM((TIME_WAITED/100)),0)+ROUND(MAX(VALUE/100),0)) as UNACCOUNTED_FOR_TIME FROM V$SESSION_EVENT a, V$SESSION b, V$SESSTAT c WHERE a.SID = b.SID AND b.sid = c.sid and c.STATISTIC# = (SELECT STATISTIC# FROM V$STATNAME WHERE NAME='CPU used by this session') AND a.SID= :monitored_sid group by b.logon_time, a.sid, b.username) order by SECONDS desc;
And here is some typical output:
SUBSTR(TIMESOURCE,1,30) SECONDS PERCENTAGE ------------------------------ ---------- ---------- TOTAL_TIME 43 100 direct path read 30 70 CPU 5 12 db file scattered read 4 9 db file sequential read 4 9 Disk file operations I/O 0 0 SQL*Net message to client 0 0 SQL*Net message from client 0 0 events in waitclass Other 0 0 enq: KO - fast object checkpoi 0 0 UNACCOUNTED_TIME -1 -2
I left off the initial SID and username columns so the output would fit on this page, but if you run it you get that information as well. The output contains waits and CPU which I think are typical but the two values TOTAL_TIME and UNACCOUNTED_TIME may be unusual.
TOTAL_TIME is the real elapsed time since the user first logged in to this session.
UNACCOUNTED_TIME is TOTAL_TIME-sum of the waits and CPU. If there is a lot of queuing for the CPU then UNACCOUNTED_TIME goes up.
The idea is that you run the script like this:
username/password@dbname < profileexample.sql
If you want to learn how to use this kind of profile I would encourage you to read the paper, but the short answer is to just look at which is the biggest consumer of time – CPU, a particular wait, or something unknown, and let that lead the next steps of your investigation.
The Hotsos Symposium 2014 will be held March 2-6, 2014 in Irving, TX. This is always one of the best, if not the best performance conferences for Oracle professionals.
A good item to remember: Oracle 11g Invisible Index, over at CzmMiao的博客生活.
Oracle Linux Tips and Tricks: Using SSH, from Oracle's Linux Blog.
Oracle Service Bus JMS Deployments Utility, from the SOA & BPM Partner Community Blog.
Part two of a series from Pythian on Oracle RAC on the Cloud.
A detailed article on a rather controversial subject: Mixing databases usually not optimal, over at the Open Query blog.
Over at (YABAOAE) Yet Another Blog About Oracle Application Express: You don't lack APEX skills.....you lack Oracle skills.
Oracle releases VirtualBox 4.3, from ZDNet.
Interesting results from this study: Monster VM Study: Moves 3 RAC Nodes Under 180 Seconds!
From RittmanMead: Oracle Endeca Information Discovery 3.1 and Self- Service Data Mashup capability.
Oracle Essentials, 5th Edition, over at Wowebooks.com.
Really nice, detailed walkthrough of a British diesel sub that is now a kind of floating museum: Sound the depths of a submarine in Google Street View, from Google, via NBC News.
From the water…to the air, way up in the air: Crazy plane landing on a mountain.
A company called Sampo IP, which is a wholly owned subsidiary of patent troll Marathon Patent Group, is suing Blackboard for patent infringement. The patents in question appear to be incredibly broad and have also been asserted against Salesforce as well as high-profile customers of collaboration companies Jive, Hyperoffice, and Rally, including Dell, Starbucks, Hewlett-Packard, Aetna, and about 15 others. I have not read the patents carefully, but they seem to be related to applying push notifications to allow one person in a group to send notifications or requests to other people in the group.
For those of you tempted to Schadenfreude because of sins of Blackboard’s past, that would be a mistake. Patent trolls like Marathon can come after any company and their customers. In this case, the Marathon patents appear to be broad enough to be important for countless educational applications and could be applied against a range of vendors and schools alike. At the moment, there are no reports of suits against education customers, and there are practical reasons why the patent trolls would be somewhat unlikely to file suit against such customers in the future. But there is no legal barrier. We should all be rooting for Blackboard and the other defendants in this case.
Patents are a serious and ongoing threat to education. I had hoped during the Blackboard v. D2L fight that there would have been enough concern and awareness within the community to take some broader action, but that never happened. Unfortunately, there are very few tools to employ against patent trolls but what steps can be taken to minimize edupatent suits in general should be taken. Vendors in the space, who own substantial IP, should be encouraged by their customers to form a protective patent pool, for example. Patent pools are of little value against trolls, but at least it would reduce the likelihood of lawsuits by practicing companies. And since big technology players like Google, IBM, Microsoft, and Oracle do substantial business in this space, perhaps they could be persuaded to contribute broader patents and create a substantial umbrella of protection. It is even possible the patent pool might yield prior art that could be effective in invalidating patents held by trolls. The sector could also unite to give companies like Marathon a PR black eye whenever they come after educational software. There are steps that could be taken, but educational leadership needs to step up to make it happen.
You can find and read the legal complaint here.
The post Patent Troll Sues Blackboard for Patent Infringement appeared first on e-Literate.
For much of the globe, inclement weather means that commuters will face difficulties getting to the office. Technology-savvy individuals, however, will have no trouble finishing their workloads if their companies have leveraged a cloud solution.
Ensuring continuity with a cloud-based infrastructure
According to CloudTech, St. Jude, the hurricane that tore across the UK in late Oct., threatened the commuting patterns of thousands of employees. Despite Britain's best efforts at clearing away felled trees and reestablishing order, most of Calgary's office-workers were unable to reach their destinations. Organizations that support a cloud-based working environment, however, were able to continue production.
The source reported that the cloud's remote access capabilities enabled individuals to work from home during the worst of the storm. By utilizing popular platforms, such as Dropbox, employees had immediate access to important files that they could not have retrieved with a legacy, on-premises storage solution. Additionally, because of its flexibility, organizations can fully customize their cloud-based solutions by outfitting their digital architectures with enhanced applications.
Customization with unique applications
Forbes reported that as the digital storage industry evolves, more applications are being developed that allow IT managers to customize their infrastructures. Decision-makers should be aware of how these solutions work before they purchase them, however. Database administration software, for example, makes categorizing big data simpler and more efficient. It also provides businesses with a fully-equipped infrastructure that can be further customized, with support from the remote DBA experts.
The source also noted that cloud-based infrastructures are simple to use and make training programs for new employees more effective. For instance, organizations can load videos and important documents onto the cloud that can be downloaded by individuals anywhere, at any time, as long as they have access to the Internet.
Furthermore, existing storage options, such as datacenters, can be united with the cloud in a hybrid solution. These integrate legacy storage facilities with a digital, cloud-based strategy, allowing business leaders to retain sensitive information on-premise and deploy the rest.
Decision-makers who are considering a transition to the cloud should outline a goal for their operation first. By doing this, it will be much easier to conceptualize the above-mentioned benefits.
RDX supports all major UNIX/LINUX operating systems, including Redhat, IBM, HP-UX and Sun. We offer expertise in highly available architectures, database and SQL Tuning, security and auditing, advanced database features and more. For more information, please visit our OS Services page or contact us.
Oracle 12c has increased the maximum length of character-based columns to 32K bytes – don’t get too excited, they’re stored out of lines (so similar in cost to LOBs) and need some modification to the parameter file and data dictionary (starting the database in upgrade mode) before you can use them.
Richard Foote has a pair of articles on indexing such columns:
Be cautious about enabling this option and test carefully – there are going to be a number of side effects, and some of them may require a significant investment in time to resolve. The first one that came to my mind was that if you’ve created a function-based index on a pl/sql function that returns a varchar2() type and haven’t explicitly created the index on a substr() of the return value then the data type of the function’s return value will change from the current default of varchar2(4000) to varchar2(32767) – which means the index will become invalid and can’t be rebuilt or recreated.
Obviously you can redefine the index to include an explicit substr() call – but then you have to find all the code that was supposed to use the index and modify it accordingly.
1. Create table as shown below with some sample rows.
sqlf> run './sql/boolean.sql';
sqlf> drop table boolean_test;
0 rows inserted/updated/deleted
sqlf> create table boolean_test (col1 smallint);
0 rows inserted/updated/deleted
sqlf> insert into boolean_test values (1);
1 row inserted/updated/deleted
sqlf> insert into boolean_test values (1);
1 row inserted/updated/deleted
sqlf> insert into boolean_test values (0);
1 row inserted/updated/deleted
sqlf> insert into boolean_test values (1);
1 row inserted/updated/deleted
sqlf> insert into boolean_test values (0);
1 row inserted/updated/deleted
sqlf> select * from boolean_test;
5 rows selected
2. Sample JDBC code to query table using ResultSet.getBoolean().
public void run() throws SQLException
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
logger.log (Level.INFO, String.format("Connecting to SQLFire with url %s", url));
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
rset = stmt.executeQuery("select * from boolean_test");
System.out.println("col1 = " + rset.getBoolean(1));
catch (SQLException se)
if (conn != null)
if (stmt != null)
if (rset != null)
Nov 14, 2013 12:37:24 PM pas.au.apples.sqlfire.types.BooleanDemo runINFO: Connecting to SQLFire with url jdbc:sqlfire://127.0.0.1:1527/Nov 14, 2013 12:37:26 PM pas.au.apples.sqlfire.types.BooleanDemo runINFO: NetConnection@12401369,agent: NetAgent@2cba5bdb:127.0.0.1col1 = falsecol1 = truecol1 = falsecol1 = truecol1 = truehttp://feeds.feedburner.com/TheBlasFromPas
So last year I was ONLY scheduled originally to speak ( two speakers at a time ) against Cary Millsap. Someone wanted to swap sessions so of course I agreed and then moved into a speaking slot against Kerry Osborne.
Maybe this year they will schedule me against someone minor like say Tanel Poder or Maria Colgan or Carlos Sierra ... keeping my fingers crossed.
Enough whining ... I am pumped! Hope to see you at Hotsos 2014!
This is part 3 of a multipart series of getting Oracle RAC running on a cloud environment. In part 1, we set up a NFS server for shared storage. In part 2, we set up OS components for each RAC server. Now we finish up the OS configuration and move to the Oracle grid infrastructure.Passwordless SSH, take two
Now that we have Oracle users on both rac01 and rac02, we need to configure passwordless SSH between them. (It’s also possible to do it from the installer, but I prefer to do it myself)
On rac01-pub as Oracle:
cd ~/.ssh scp rac02-pub:$PWD/id_rsa.pub rac02.pub (enter oracle user password, and confirm the hostkey addition) cat rac02.pub >> authorized_keys
And on rac02-pub, again as oracle:
cd ~/.ssh scp rac01-pub:$PWD/id_rsa.pub rac01.pub (shouldn't have a password prompt, but you can confirm hostkey addition) cat rac01.pub >> authorized_keysGetting RAM for the install
Before we run the Oracle installer, we should expand the physical RAM for each machine. This can be done from the Gandi control panel for each server. When I first tried this I got a quota error, and had to raise a support ticket (and wait for a response) to get the quota raised. A second issue with the RAM is that the the VM doesn’t see the full amount of RAM allocated: when I tried firing up a 4GB instance, Linux only saw 3667716k available, and the Oracle installer promptly complained about insufficient memory.
So instead of 4096MB of memory, we’re going to adjust rac01 and rac02 to have 4800MB. After adjusting in the control panel, you may see that the operation is complete within a minute or so, but the server didn’t consistently get more memory. So while logged onto rac01 as oracle, have a look:
for host in rac01-pub rac02-pub; do echo $host; ssh $host free; done
If each node shows 4388612 total memory, you’re golden. Otherwise, reboot the nodes.
(And yes, 700mb seems like an awful amount of memory to simply not be available to the OS; I’m wondering what’s using the space?)
By now the Oracle software download should be complete, and we need to give the downloaded files .zip extensions and install an unzipper to use it. (Note to Oracle packagers: unzip isn’t _all_ that common in the Linux world, and gzip provides better compression rates anyways. Why not do tarballs?)
Back on rac01:
cd /srv/datadisk01/dl for file in *zip?AuthParam*[0-9a-f]; do sudo mv "$file" "$file".zip; done sudo yum -y install unzip for file in *.zip; do sudo unzip $file; done
Now setting up a remote VNC so that we can actually run the Oracle installer, as well as a firewall rule to let us connect:
sudo yum -y install tigervnc-server xterm twm sudo iptables -I INPUT 4 -p tcp --dport 5901 -j ACCEPT
Starting the server; you’ll need to supply a password the first time around. (still logged in as oracle)
vncpasswd vncserver :1
Now we start a VNC viewer locally. If you don’t have one already, you can download one from www.realvnc.comGrid Infrastructure Install
Connecting to display 1 of the server external IP, you should get an xterm window if all went well. Running the installer:
cd /srv/datadisk01/dl/grid ./runInstaller
Skipping software updates, and doing a cluster install, using a standard cluster. Doing an advanced install. Using the default language. Under “grid plug and play” we need to set up the node naming. Using cluster name “rac-cluster”, and SCAN name “rac-cluster” as defined in /etc/hosts earlier. On the cluster node screen, we should see that rac01-pub has been detected. Adding rac02-pub too, with rac02-pub-vip as its VIP address.
Now comes the validation, where we learn if SSH, naming etc were properly set up. If all goes well, you’ll make it to the network interface usage screen. Here we need to make changes: eth0 shouldn’t be used, eth1 is public, and eth2 is private. The management repository is a choice: it takes up memory and install time, but it does allow us to use such things as QoS management, and it can only be created at install time. I chose to skip.
For storage, we’re using a shared file system: the NFS we created. Using external redundancy since it’s a single disk anyway. Doing the same for the voting disk.
Not using IPMI. We’ll also leave the ASM oper group blank, and accept the warning.
Using the default “/u01/app/oracle” and “/u01/app/12.1.0/grid” directories for ORACLE_BASE and grid home. Using /u01/app/oraInventory for oraInventory. You can either run sudo yourself or let the installer do it. I like to run it myself to have more control over re-running and deconfigs if required.
Now it’s time for the prerequisite checks. If all previous steps have succeeded, you shouldn’t see any warnings at all.
Saving the response file and kicking off the install itself.
Running the orainstRoot.sh from the oraInventory, plus root.sh from the grid home. Running on rac01 first.
Just got errors starting ASM:
PRCR-1079 : Failed to start resource ora.asm CRS-2672: Attempting to start 'ora.asm' on 'rac01-pub' CRS-5017: The resource action "ora.asm start" encountered the following error: ORA-00600: internal error code, arguments: [SKGMHASH], , , , , , , , , , ,  . For details refer to "(:CLSN00107:)" in "/u01/app/12.1.0/grid/log/rac01-pub/agent/ohasd/oraagent_oracle/oraagent_oracle.log". CRS-2674: Start of 'ora.asm' on 'rac01-pub' failed CRS-2679: Attempting to clean 'ora.asm' on 'rac01-pub' CRS-2681: Clean of 'ora.asm' on 'rac01-pub' succeeded CRS-2674: Start of 'ora.asm' on 'rac01-pub' failed 2013/11/05 21:28:33 CLSRSC-113: Start of ASM instance failed Preparing packages for installation... cvuqdisk-1.0.9-1 2013/11/05 21:28:54 CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster ... succeeded
But there is no ASM here, so ignoring the error.
On rac02, it didn’t even try starting ASM with root.sh.
Running the rootinventory and root.sh since we have sudo running. It does take some time to run as the grid infrastructure is shut down and started up a few times.Database install
Now that the grid infrastructure is in place, we can move onto the actual database install. We can re-use the same VNC window to install:
Skipping software updates and skipping the DB creation too (software only). Picking a RAC install. At this point we should see both nodes detected. Using the default language.
Installing enterprise edition with default home locations. In the group selection, it won’t let me select dba, even though the group was installed by the preinstall RPM. For now I’ll select oinstall.
The rest are default.
Running root.sh, which this time is very short.Database creation assistant
With a database home we can run the creation assistant. But first, working on a hugepage configuration. /proc/meminfo is missing the HugePages lines entirely, and it does look like, regrettably, the supplied kernel does not support hugepages:
[oracle@rac01-pub ~]$ zgrep HUGETLB /proc/config.gz # CONFIG_HUGETLBFS is not set # CONFIG_HUGETLB_PAGE is not set
And a quick web search seems to show that, while custom kernel support has been a long-standing user request at Gandi, it’s still not available.
So onto the install. From the same VNC session:
Creating a new database. Using the advanced install with:
- RAC database (default)
- General purpoase/transaction processing
- DB name: racdb
- Selecting both nodes to run on
- Configuring EM express
- Running CVU periodically
- Picking a password
- File system storage
- /srv/datadisk01/oradata/oradata – default
- Default FRA, using the default size of 5G
- Archiving disabled
- Skipping sample schemas and database value
- Unselecting automatic memory management
- Leaving the remaining parameters default
And we’re installed and have a database. It can be tested via SQL*Plus:
export ORACLE_SID=racdb export ORAENV_ASK=NO . oraenv export ORACLE_SID=racdb1 sqlplus "/ as sysdba"
If all went well, you should see a SQL prompt:
[oracle@rac01-pub ~]$ sqlplus "/ as sysdba" SQL*Plus: Release 188.8.131.52.0 Production on Wed Nov 6 23:38:51 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 184.108.40.206.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP, Advanced Analytics and Real Application Testing options SQL>
And that’s it for the series. I made it through with 50,000 credits remaining in my Gandi account to play with.
Feel free to ping me in case of issues getting running. Some of these steps are a combination of several iterations as bugs were worked out, so it’s likely that there are some gremlins still lurking, and I’ll try and incorporate fixes as issues are discovered.Lessons Learned
- Yes, Oracle RAC can installed cleanly on a cloud environment, and at $17, the price is right
- True shared storage from a cloud provider is still hard to come by, limiting the high-availability potential
- There are quite a few extra steps required to satisfy the RAC installer and its prerequisite checks
- In the Gandi environment, you need to overallocate RAM as not all of it is visible to the OS
- The lack of hufepage support in the Gandi kernel (and complete lack of custom kernel support) further increases memory requirements
- A dummy oracle-release RPM is all we need to keep the OS prerequisite checks happy