Skip to main content

Oracle RAC 11gR2 failed on Ubuntu 12.04 Linux

I have tried following steps for RAC implementation... unfortunately it failed on Ubuntu 12.04 as Oracle Grid infrastructure is not been supported on Ubuntu drivers.
Going ahead, Oracle is no more supporting RAC on Red hat and SuSe starting with release Red hat 6.0 and SuSe 12. ( As per information I got so far)
Now Oracle RAC will be available only on Oracle Enterprise Linux and Solaris....

Specification :
1) 2 Node RAC setup
2) Each machine with Linux Ubuntu 12.04 (x86_64 bit, Kernel : 3.2.0-23-generic)
3) Oracle 11gR2 Database
4) Oracle 11gR2 Grid Infrastructure.
Pre-Installation :
     1) All the nodes should have same OS and Kernel version and bits (x86 or x86_64)
For Linux use $uname –a it should show same output on all the nodes.
     2) Each of the Server should have 2 NIC cards
- Where group of 2 ( one from each machine) should have same name(say eth0/eth1) and IP subnet Mask
Ex : 1) Each of the machine has eth0 as Ethernet card number and IP on subnet say 10.88.33.0
2) Each of the machine has eth1 as Ethernet card number and IP on subnet say 10.88.36.0
( we must have both of these group on different VLANs as above. all can co-exist on the same Physical switch; that should not be an issue )
   3) Configure SCAN ( Single Client Access Name : http://www.oracle.com/technetwork/products/clustering/overview/scan-129069.pdf )
I have DNS setup in my network so I will use the same. If you don't have DNS setup you can hardcode these IP addresses under /etc/hosts file.
SCAN using DNS:
1) Add Scan entry on DNS server with 3 IP addresses for same host. Enable Round Robin on DNS
Ex : ORARAC-SCAN : 10.88.33.24
ORARAC-SCAN : 10.88.33.25
ORARAC-SCAN : 10.88.33.26
2) Once the entry is added in DNS test it from Local Client as
root@PTS0009:~# nslookup orarac-scan
Server: 10.77.224.101
Address: 10.77.224.101#53
Name: orarac-scan.mydomain.co.in
Address: 10.88.33.26
Name: orarac-scan.mydomain.co.in
Address: 10.88.33.24
Name: orarac-scan.mydomain.co.in
Address: 10.88.33.25
if you execute this command multiple time, you will notice that the list if IP addresses is varying in Round robin fashion.
3) These above 3 IP addresses are Virtual IPs. So your Ping should fail for each of them till the time we install Grid clusterware .
<< Execute following setups 4-9 on all the nodes >>
  4) Make sure each of the node has following Packages Installed :
Oracle Software Prerequisites Install required packages
apt-get install build-essential
apt-get install libaio1
apt-get install libaio-dev
apt-get install unixODBC
apt-get install unixODBC-dev
apt-get install pdksh
apt-get install expat
apt-get install sysstat
apt-get install libelf-dev
apt-get install elfutils
apt-get install lsb-cxx
                 5) To avoid error "linking ctx/lib/ins_ctx.mk...":
a.
( you may have to check the latest package available on site http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-3.3 and following file paths may change as per package structure )
$ dpkg-deb -x libstdc++5_3.3.6-25ubuntu1_amd64.deb ia64-libs
$ cp /tmp/ia64-libs/usr/lib/x86_64-linux-gnu/libstdc++.so.5.0.7 /lib64/
$ cd /lib64/
$ ln -s libstdc++.so.5.0.7 libstdc++.so.5
6) To avoid error invoking target 'idg4odbc' of makefile:
$ ln -s /usr/bin/basename /bin/basename
7) To avoid errors when executing the post-install root.sh script:
$ ln -s /usr/bin/awk /bin/awk
8) Modify the kernel parameter file
I have appended the following entries in /etc/sysctl.conf file.
Login as root and execute :
$echo "#">> /etc/sysctl.conf
$echo "# Oracle 11gR2 entries">> /etc/sysctl.conf
$echo "fs.aio-max-nr=1048576" >> /etc/sysctl.conf
$echo "fs.file-max=6815744" >> /etc/sysctl.conf
$echo "kernel.shmall=2097152" >> /etc/sysctl.conf
$echo "kernel.shmmni=4096" >> /etc/sysctl.conf
$echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
$echo "net.ipv4.ip_local_port_range=9000 65500" >> /etc/sysctl.conf
$echo "net.core.rmem_default=262144" >> /etc/sysctl.conf
$echo "net.core.rmem_max=4194304" >> /etc/sysctl.conf
$echo "net.core.wmem_default=262144" >> /etc/sysctl.conf
$echo "net.core.wmem_max=1048586" >> /etc/sysctl.conf
$echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf


Issue the command to reload kernel parameter :
$ sysctl -p
root@PTS0009:~# sysctl -p
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.shmmax = 2147483648
root@PTS0009:~#
                 9) Install Oracleasm, oracleasmlib and oracleasm-support for ASM instance creation
a. Since Ubuntu does not have by default support of Oracle ASM you will have to download (http://www.oracle.com/technetwork/server-storage/linux/downloads/rhel5-084877.html) and installation compatible to your kernel version.
b. For my Ubuntu Linux Kernel version : 3.2.0-23-generic I have used following libraries
oracleasm-2.6.18-308.11.1.el5-2.0.5-1.el5.x86_64.rpm
oracleasm-2.6.18-308.11.1.el5debug-2.0.5-1.el5.x86_64.rpm
oracleasm-2.6.18-308.11.1.el5xen-2.0.5-1.el5.x86_64.rpm
oracleasmlib-2.0.4-1.el5.x86_64.rpm
oracleasm-support-2.1.7-1.el5.x86_64.rpm
Steps for Oracle RAC :
1) Create group : dba, oinstall, asmadmin, asmdba, asmoper on all the nodes for Oracle software and ASM
2) Create users : Oracle ( for oracle software owner) and grid ( for oracle cluster owner) as follows :
$ id grid
uid=501(grid) gid=501(oinstall) groups=501(oinstall),502(asmadmin),503(asmdba),504(asmoper)
$ id oracle
uid=500(oracle) gid=501(oinstall) groups=501(oinstall),500(dba),503(asmdba)
3) Configure Oracle ASM:
root@PTS0006:/home/softwares# oracleasm configure
ORACLEASM_ENABLED=false
ORACLEASM_UID=
ORACLEASM_GID=
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
root@PTS0006:/home/softwares# oracleasm configure -i
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.
Default user to own the driver interface []: grid
Default group to own the driver interface []: asmadmin
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
root@PTS0006:/home/softwares# oracleasm configure
ORACLEASM_ENABLED=true
ORACLEASM_UID=grid
ORACLEASM_GID=asmadmin
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
root@PTS0006:/home/softwares#
4) Load Oracle ASM:
a. Check Current status
root@PTS0009:/home/softwares# oracleasm status
Checking if ASM is loaded: no
Checking if /dev/oracleasm is mounted: no
b. Init Oracle ASM : Fail to load ASM Drivers...
root@PTS0009:/home/softwares# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module "oracleasm": failed
Unable to load module "oracleasm"

Then, thought, will go with Shared storage instead of ASM for Voting Disk and OCR (https://forums.oracle.com/forums/thread.jspa?threadID=2419105&messageID=10478176#10478176) And launch the installer but now I have following error L There is no support available for this issue on OTN.

[INS-08106] Unexpected error occurred while loading the view 'GridPlugPlayInfoUI' associated to state 'GridPlugPlayInfoUI'.


Now, I will try with Redhat Enterprise Linux 5... let see... 

Comments

Post a Comment

Popular posts from this blog

Some facts and Figures of WCF

SOAP Message in WCF: 1.        The max size of SOAP message in WCF is 9,223,372,036,854,775,807 bytes. Including metadata. 2.        For actual user data we can use 2,147,483,647 bytes out of it. 3.        With default setting WCF uses only 65536 bytes. 4.        We can change it by setting maxReceivedMessageSize in clients app.config file.    5.        So selection of data types in Data Contract and Data table will matter a lot! 6.       Reference :   http://blogs.msdn.com/drnick/archive/2006/03/16/552628.aspx          http://blogs.msdn.com/drnick/archive/2006/03/10/547568.aspx       “Amazing blog for WCF!” Data Contract: 1.        By Default WCF can serialize 65536 DataMember. 2.        We can change it to max  2147483646. 3.       How?  Please go to: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/4a81a226-175b-41d3-864a-181792c71ffe Tracing WCF service message: 1.       Enable message log of WCF: http://www.avingtonsolutions.com/blog/post/2008/07/25/Tracing-SOAP-Message

Drop all Objects from Schema In Postgres

To Drop all objects from Postgres Schema there could be following two approaches: Drop Schema with cascade all and re-create it again.  In some cases where you dont want to/not allowed to drop and recreate schema, its easy to look for objects on current schema and drop them. following script would help to do so, Create function which would do the task and then drop that function too. --- CREATE OR REPLACE FUNCTION drop_DB_objects() RETURNS VOID AS $$ DECLARE  rd_object RECORD; v_idx_statement VARCHAR(500);   BEGIN ---1. Dropping all stored functions RAISE NOTICE '%', 'Dropping all stored functions...'; FOR rd_object IN ( SELECT format('%I.%I(%s)', ns.nspname, p.proname, oidvectortypes(p.proargtypes)) as functionDef     FROM pg_proc p     INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid)    WHERE ns.nspname = current_schema      AND p.proname <> 'drop_db_objects' )

Vacuum Analyze Full Schema in PostgreSQL Database

To analyze full database schema, you can use following shell script : -------------------------------------------------------------------------------------------------------------------------- #!/bin/sh rm -rf /tmp/vacuum_analyze_MyData.sql dbname="mydata" username="mydatadatamart" namespace="mydatadatamart" # Vacuum only those tables which are fragmented over 30% # Analyze tables only if they are not already # Process CMF and Groups Master table every time as they are master Tables=`psql $dbname $username << EOF SELECT 'VACUUM ANALYZE VERBOSE ' || tablename || ' ;' AS TableList   FROM ( SELECT *,       n_dead_tup > av_threshold AS "av_needed",       CASE WHEN reltuples > 0      THEN round(100.0 * n_dead_tup / (reltuples))       ELSE 0       END AS pct_dead FROM (SELECT C.relname AS TableName, pg_stat_get_tuples_inserted(C.oid) AS n_tup_ins, pg_stat_get_tuples_updated(