Wednesday, August 28, 2013

Creating a RAC Database Manually (without dbca)

Step by Step Creating a RAC Database Manually 
(without dbca)

If you would like to by-pass the Database Configuration Assistant (dbca), you can use the following steps - with appropriate alterations - to create your RAC databases. This example assumes that you already have a cluster with the appropriate clusterware and shared storage, etc. configured. 

If not already present, Refer below link for more details.



Manual Database creation steps as follows.

Step 1: Environment variable Settings ( First Node).

export ORACLE_BASE=/u02/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1
export ORACLE_SID=DEVDB1

Step 2: Verify exist RAC setup. For more details about  RAC installation guideCLICKHERE

[oracle@krac1 dbs]$ crs_stat -t
Name           Type           Target    State     Host       
------------------------------------------------------------
ora....L1.inst application    ONLINE    ONLINE    krac1      
ora....L2.inst application    ONLINE    ONLINE    krac2      
ora.ORCL.db    application    ONLINE    ONLINE    krac1      
ora....SM1.asm application    ONLINE    ONLINE    krac1      
ora....C1.lsnr application    ONLINE    ONLINE    krac1      
ora.krac1.gsd  application    ONLINE    ONLINE    krac1      
ora.krac1.ons  application    ONLINE    ONLINE    krac1      
ora.krac1.vip  application    ONLINE    ONLINE    krac1      
ora....SM2.asm application    ONLINE    ONLINE    krac2      
ora....C2.lsnr application    ONLINE    ONLINE    krac2      
ora.krac2.gsd  application    ONLINE    ONLINE    krac2      
ora.krac2.ons  application    ONLINE    ONLINE    krac2      
ora.krac2.vip  application    ONLINE    ONLINE    krac2      

[oracle@krac1 dbs]$ olsnodes -i -p
krac1   krac1-priv      krac1-vip
krac2   krac2-priv      krac2-vip

[oracle@krac1 dbs]$ . oraenv
ORACLE_SID = [+ASM1] ? +ASM1
The Oracle base for ORACLE_HOME=/u02/app/oracle/product/11.1.0/asm_1 is /u02/app/oracle

[oracle@krac1 dbs]$ asmcmd
ASMCMD> ls -ltr
State    Type    Rebal  Name
MOUNTED  EXTERN  N      FRA/
MOUNTED  EXTERN  N      DATA/
ASMCMD>

Note : Domain name is dbprod.com  ( example : krac1. dbprod.com ).

Step 3 : Prepare initialization parameter file (initDEVDB1.ora) and store it in $ORACLE_HOME/dbs directory.

db_block_size=8192
cluster_database_instances=2
remote_listener=LISTENERS_DEVDB
open_cursors=300
db_domain=DBPROD.COM
db_name=DEVDB
db_create_file_dest=+DATA
db_recovery_file_dest=+FRA
db_recovery_file_dest_size=2147483648
compatible=11.1.0.0.0
diagnostic_dest=/u02/app/oracle
processes=150
sga_target=635437056
audit_file_dest=/u02/app/oracle/admin/DEVDB/adump
audit_trail=db
remote_login_passwordfile=exclusive
dispatchers="(PROTOCOL=TCP) (SERVICE=DEVDBXDB)"
pga_aggregate_target=211812352
DEVDB1.instance_number=1
DEVDB2.instance_number=2
DEVDB2.thread=2
DEVDB1.thread=1
DEVDB1.undo_tablespace=UNDOTBS1
DEVDB2.undo_tablespace=UNDOTBS2

Step 4:  Creating password file.

[oracle@krac1 dbs]$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle

Step 5 : Configure both listener.ora and tnsnames.ora file for all nodes in cluster.

-- Node #1 Listener.ora.

LISTENER_KRAC1 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = krac1-vip)(PORT = 1521)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 152.168.1.50)(PORT = 1521)(IP = FIRST))
    )
  )

Node #2 Listener.ora.

LISTENER_KRAC2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = krac2-vip)(PORT = 1521)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 152.168.1.51)(PORT = 1521)(IP = FIRST))
    )
  )


tnsnames.ora file

LISTENERS_DEVDB =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = krac1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = krac2-vip)(PORT = 1521))
  )

DEVDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = krac1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = krac2-vip)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DEVDB.DBPROD.COM)
    )
  )

DEVDB2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = krac2-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DEVDB.DBPROD.COM)
      (INSTANCE_NAME = DEVDB2)
    )
  )

DEVDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = krac1-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DEVDB.DBPROD.COM)
      (INSTANCE_NAME = DEVDB1)
    )
  )

Step 6 :  Create directory for database files and diagnostic files.

[oracle@krac1 ~]$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/{adump,dpdump,hdump}
[oracle@krac1 ~]$ cd $ORACLE_BASE/admin/$ORACLE_SID/
[oracle@krac1 DEVDB1]$ ls -ltr
total 12
drwxr-xr-x 2 oracle oinstall 4096 Oct 16 18:42 hdump
drwxr-xr-x 2 oracle oinstall 4096 Oct 16 18:42 dpdump
drwxr-xr-x 2 oracle oinstall 4096 Oct 16 18:42 adump

[oracle@krac1 dbs]$ . oraenv
ORACLE_SID = [+ASM1] ? +ASM1
The Oracle base for ORACLE_HOME=/u02/app/oracle/product/11.1.0/asm_1 is /u02/app/oracle
[oracle@krac1 dbs]$ asmcmd mkdir +DATA/DEVDB
[oracle@krac1 dbs]$ asmcmd ls +DATA
DEVDB/ -- Directory has been created.
ORCL/
[oracle@krac1 dbs]$

Step 7: Execute Create database command.


[oracle@krac1 dbs]$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on Tue Oct 16 19:02:52 2012

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup nomount
ORACLE instance started.

Total System Global Area  640294912 bytes
Fixed Size                  1301784 bytes
Variable Size             171967208 bytes
Database Buffers          461373440 bytes
Redo Buffers                5652480 bytes
SQL> CREATE DATABASE "DEVDB"
  2  MAXINSTANCES 32
  3  MAXLOGHISTORY 1
  4  MAXLOGFILES 192
  5  MAXLOGMEMBERS 3
  6  MAXDATAFILES 1024
  7  DATAFILE SIZE 300M AUTOEXTEND ON NEXT  1024M MAXSIZE UNLIMITED
  8  EXTENT MANAGEMENT LOCAL
  9  SYSAUX DATAFILE SIZE 120M AUTOEXTEND ON NEXT  1024M MAXSIZE UNLIMITED
 10  SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE SIZE 20M AUTOEXTEND ON NEXT  640K MAXSIZE UNLIMITED
 11  SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE SIZE 200M AUTOEXTEND ON NEXT  5120K MAXSIZE UNLIMITED
 12  DEFAULT TABLESPACE USERS DATAFILE SIZE 100M
 13  CHARACTER SET WE8MSWIN1252
 14  NATIONAL CHARACTER SET AL16UTF16
 15  LOGFILE GROUP 1  SIZE 500M,
 16  GROUP 2  SIZE 500M
 17  USER SYS IDENTIFIED BY ORACLE
 18  USER SYSTEM IDENTIFIED BY ORACLE
;

Database created.


Step 8: Adding  CONTROL_FILES parameter in pfile.

SQL> set linesize 2048;
SQL> column ctl_files NEW_VALUE ctl_files;
SQL> select concat('control_files=''', concat(replace(value, ', ', ''','''), '''')) ctl_files from v$parameter where name ='control_files';
SQL> host echo &ctl_files >> $ORACLE_HOME/dbs/initDEVDB1.ora;


Step 9: Create a UNDO tablespace for remaining nodes.

SQL> CREATE SMALLFILE UNDO TABLESPACE "UNDOTBS2" DATAFILE SIZE 100M;   

Tablespace created.

Step 10: Run following script as SYS user.

SQL> CONNECT / AS SYSDBA
Connected.
SQL> @?/rdbms/admin/catalog.sql
SQL> @?/rdbms/admin/catblock.sql
SQL> @?/rdbms/admin/catproc.sql
SQL> SHOW PARAMETER CASE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon             boolean     TRUE

SQL> ALTER SYSTEM SET sec_case_sensitive_logon=FALSE;

System altered.

Step 11: Run following script as SYSTEM user.

SQL> connect system/oracle
Connected.
SQL> @?/sqlplus/admin/pupbld.sql
SQL> @?/sqlplus/admin/help/hlpbld.sql helpus.sql

Step 12: Adding redo log file for remaining nodes and run catclust.sql script as SYS.

SQL> CONNECT / AS SYSDBA    
Connected.
SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 3 SIZE 500M,
  2  GROUP 4  SIZE 500M;

Database altered.

SQL> ALTER DATABASE ENABLE PUBLIC THREAD 2;

Database altered.

SQL> @?/rdbms/admin/catclust.sql


Step 13: Create a SPFILE and copy those files to remaining nodes.

SQL> create spfile='+DATA/DEVDB/spfileDEVDB.ora' from pfile;

File created.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> host echo "SPFILE='+DATA/DEVDB/spfileDEVDB.ora'" >$ORACLE_HOME/dbs/initDEVDB1.ora

SQL> startup
ORACLE instance started.

Total System Global Area  640294912 bytes
Fixed Size                  1301784 bytes
Variable Size             171967208 bytes
Database Buffers          461373440 bytes
Redo Buffers                5652480 bytes
Database mounted.
Database opened.
SQL> select value from v$parameter where name='spfile';

VALUE
--------------------------------------------------------------------------------
+DATA/devdb/spfiledevdb.ora

SQL> host scp $ORACLE_HOME/dbs/initDEVDB1.ora krac2:$ORACLE_HOME/dbs/initDEVDB2.ora
SQL> host scp $ORACLE_HOME/dbs/orapwDEVDB1 krac2:$ORACLE_HOME/dbs/orapwDEVDB2  

Step 14: Login as oracle user on node2(krac2) and execute below statements. 
[oracle@krac2 ~]$ export ORACLE_SID=DEVDB2
[oracle@krac2 ~]$ export ORACLE_HOME=/u02/app/oracle/product/11.1.0/db_1
[oracle@krac2 ~]$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/{adump,dpdump,hdump}
[oracle@krac2 ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on Tue Oct 16 20:51:19 2012

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  640294912 bytes
Fixed Size                  1301784 bytes
Variable Size             167772904 bytes
Database Buffers          465567744 bytes
Redo Buffers                5652480 bytes
Database mounted.
Database opened.
SQL> col host_name for a25
SQL> col instance_name for a20
SQL> select instance_name,host_name from gv$instance;

INSTANCE_NAME        HOST_NAME
-------------------- -------------------------
DEVDB2               krac2.dbprod.com
DEVDB1               krac1.dbprod.com
SQL> shutdown immediate
Database closed.
Database dismounted.

Note : Make sure that all the instance in down before continue below steps. If not bring it all the instance down.


[oracle@krac1 ~]$ export ORACLE_HOME=/u02/app/oracle/product/11.1.0/db_1
[oracle@krac1 ~]$ srvctl add database -d DEVDB -o $ORACLE_HOME -m DBPROD.COM
[oracle@krac1 ~]$ srvctl add instance -d DEVDB -i DEVDB1 -n krac1
[oracle@krac1 ~]$ srvctl add instance -d DEVDB -i DEVDB2 -n krac2
[oracle@krac1 ~]$ crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host       
----------------------------------------------------------------------
ora....B1.inst application    0/5    0/0    OFFLINE   OFFLINE              
ora....B2.inst application    0/5    0/0    OFFLINE   OFFLINE              
ora.DEVDB.db   application    0/0    0/1    OFFLINE   OFFLINE              
ora....L1.inst application    0/5    0/0    ONLINE    ONLINE    krac1      
ora....L2.inst application    0/5    0/0    ONLINE    ONLINE    krac2      
ora.ORCL.db    application    0/0    0/1    ONLINE    ONLINE    krac1      
ora....SM1.asm application    0/5    0/0    ONLINE    ONLINE    krac1      
ora....C1.lsnr application    0/5    0/0    ONLINE    ONLINE    krac1      
ora.krac1.gsd  application    0/5    0/0    ONLINE    ONLINE    krac1      
ora.krac1.ons  application    0/3    0/0    ONLINE    ONLINE    krac1      
ora.krac1.vip  application    0/0    0/0    ONLINE    ONLINE    krac1      
ora....SM2.asm application    0/5    0/0    ONLINE    ONLINE    krac2      
ora....C2.lsnr application    0/5    0/0    ONLINE    ONLINE    krac2      
ora.krac2.gsd  application    0/5    0/0    ONLINE    ONLINE    krac2       
ora.krac2.ons  application    0/3    0/0    ONLINE    ONLINE    krac2      
ora.krac2.vip  application    0/0    0/0    ONLINE    ONLINE    krac2      
[oracle@krac1 ~]$ srvctl start database -d DEVDB
[oracle@krac1 ~]$ crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host       
----------------------------------------------------------------------
ora....B1.inst application    0/5    0/0    ONLINE    ONLINE    krac1      
ora....B2.inst application    0/5    0/0    ONLINE    ONLINE    krac2      
ora.DEVDB.db   application    0/0    0/1    ONLINE    ONLINE    krac2      
ora....L1.inst application    0/5    0/0    ONLINE    ONLINE    krac1      
ora....L2.inst application    0/5    0/0    ONLINE    ONLINE    krac2      
ora.ORCL.db    application    0/0    0/1    ONLINE    ONLINE    krac1      
ora....SM1.asm application    0/5    0/0    ONLINE    ONLINE    krac1      
ora....C1.lsnr application    0/5    0/0    ONLINE    ONLINE    krac1      
ora.krac1.gsd  application    0/5    0/0    ONLINE    ONLINE    krac1      
ora.krac1.ons  application    0/3    0/0    ONLINE    ONLINE    krac1      
ora.krac1.vip  application    0/0    0/0    ONLINE    ONLINE    krac1      
ora....SM2.asm application    0/5    0/0    ONLINE    ONLINE    krac2      
ora....C2.lsnr application    0/5    0/0    ONLINE    ONLINE    krac2      
ora.krac2.gsd  application    0/5    0/0    ONLINE    ONLINE    krac2      
ora.krac2.ons  application    0/3    0/0    ONLINE    ONLINE    krac2      
ora.krac2.vip  application    0/0    0/0    ONLINE    ONLINE    krac2      
[oracle@krac1 ~]$ sqlplus system/oracle@devdb

SQL*Plus: Release 11.1.0.6.0 - Production on Tue Oct 16 22:52:19 2012

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> col host_name for a25
SQL> col instance_name for a20
SQL> select instance_name,host_name from gv$instance;

INSTANCE_NAME        HOST_NAME
-------------------- -------------------------
DEVDB2               krac2.dbprod.com
DEVDB1               krac1.dbprod.com


[oracle@krac1 ~]$ srvctl status database -d devdb
Instance DEVDB1 is running on node krac1
Instance DEVDB2 is running on node krac2
[oracle@krac1 ~]$ srvctl status asm -n krac1
ASM instance +ASM1 is running on node krac1.
[oracle@krac1 ~]$ srvctl status asm -n krac2
ASM instance +ASM2 is running on node krac2.
[oracle@krac1 ~]$ srvctl status instance -d devdb -i devdb1
Instance devdb1 is running on node krac1
[oracle@krac1 ~]$ srvctl status instance -d devdb -i devdb2
Instance devdb2 is running on node krac2
[oracle@krac1 ~]$ srvctl config database -d devdb
krac1 DEVDB1 /u02/app/oracle/product/11.1.0/db_1
krac2 DEVDB2 /u02/app/oracle/product/11.1.0/db_1
[oracle@krac1 ~]$

No comments:

Post a Comment