Search This Blog

Monday, January 31, 2011

Create a database using the ASM storage

Tested environment : Oracle Linux 5 64 bits
Oracle 10.2.0.4 64bits for Linux

Create the database files init and password file

initorcl.ora

audit_file_dest='/oracle/admin/orcl/adump'
background_dump_dest='/oracle/admin/orcl/bdump'
compatible='10.2.0.4.0'
core_dump_dest='/oracle/admin/orcl/cdump'
db_block_size=8192
db_file_multiblock_read_count=32
db_name='orcl'
job_queue_processes=10
open_cursors=300
pga_aggregate_target=128M
processes=150
remote_login_passwordfile='EXCLUSIVE'
sga_target=512M
undo_management='AUTO'
undo_tablespace='UNDOTBS1'
user_dump_dest='/oracle/admin/orcl/udump'
db_create_file_dest='+DGROUP1'
control_files='+DGROUP1'
log_archive_dest="LOCATION='+DGROUP1'"
db_create_online_log_dest_1='+DGROUP1'
db_create_online_log_dest_2='+DGROUP1'
db_recovery_file_dest='+DGROUP1'
db_recovery_file_dest_size=6G
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'

Password file

orapwd file=orapworcl password=oracle entries=5

Create the dumps directories as described in initorcl.ora


mkdir -p /oracle/admin/orcl/adump
mkdir -p /oracle/admin/orcl/cdump
mkdir -p /oracle/admin/orcl/bdump
mkdir -p /oracle/admin/orcl/udump

chmod 755 /oracle/admin







Start the instance using the nomount startup option

export ORACLE_SID=orcl
sqlplus / as sysdba
sql> startup nomount

Create the database

sql>CREATE DATABASE orcl
MAXDATAFILES 100
MAXLOGFILES 6
MAXLOGHISTORY 100
MAXINSTANCES 1
ARCHIVELOG
LOGFILE
GROUP 1 ('+DGROUP1') size 10M,
GROUP 2 ('+DGROUP1') size 10M
DATAFILE '+DGROUP1'
SYSAUX DATAFILE '+DGROUP1'
DEFAULT TEMPORARY TABLESPACE TEMP tempfile '+DGROUP1'
UNDO TABLESPACE UNDOTBS1 DATAFILE '+DGROUP1'
CHARACTER SET UTF8
NATIONAL CHARACTER SET UTF8;

Create the data dictionary and the catalog


@?/rdbms/admin/catalog
@?/rdbms/admin/catproc
@?/rdbms/admin/utlrp

connect system/manager
@?/sqlplus/admin/pupbld

Important Note:
When you restart the database , the instance will not recognize the control file path ,since in init.ora this parameter is defined with ASM's incomplete name. Thus in order to start the database you need to replace it with an ASM qualified name or ASM numeric name or ASM alias . Thus , Open the asmcmd and find the control file qualifies name and use it your database's initorcl.ora file. Alternate , select the group_name,file and incarnation from v$ASM_FILE from ASM instance and use this format as my second example.

control_files="+DGROUP1/controlfile/current.256.740948485"
control_files="+DGROUP1.256.740948485

create spfile='+dgroup1(PARAMETERFILE)' from pfile;

ASM Files after database creation

ASMCMD>cd +DGROUP1/orcl
ASMCMD> ls
ARCHIVELOG/
CONTROLFILE/
DATAFILE/
ONLINELOG/
TEMPFILE/
flash_recovery_area/
ASMCMD>
ASMCMD> cd ONLINELOG
ASMCMD> ls
group_1.257.740948489
group_2.258.740948491
ASMCMD> cd ../CONTROLFILE
ASMCMD> ls
Current.256.740948485
ASMCMD> cd ../DATAFILE
ASMCMD> ls
SYSAUX.261.740948525
SYSTEM.259.740948495
UNDOTBS1.260.740948513
ASMCMD> cd ../TEMPFILE
ASMCMD> ls
TEMP.262.740948535
ASMCMD> pwd
+DGROUP1/orcl/ARCHIVELOG/2011_01_21
ASMCMD> ls
thread_1_seq_43.264.741044093
thread_1_seq_44.265.741044381

Backup the database using RMAN , the only way to backup Oracle database having ASM files.

rman TARGET sys/oracle@orcl NOCATALOG

change archivelog all crosscheck;
run
{
allocate channel ch1 type disk;
backup incremental level 1 as backupset tag=orcl_L1 (database);
sql 'alter system archive log current';
release channel ch1;
allocate channel ch1 type disk;
backup
archivelog all
delete all input;
release channel ch1;
}


Find all ASM aliases files

set heading off
select '+'||dg.name||'/'||al.name
from v$asm_diskgroup dg,v$asm_alias al
where dg.group_number=al.group_number
/

-- Create an alias using the fully qualified filename.
ALTER DISKGROUP disk_group_1 ADD ALIAS '+disk_group_1/my_dir/my_file.dbf'
FOR '+disk_group_1/mydb/datafile/my_ts.342.3';

-- Create an alias using the numeric form filename.
ALTER DISKGROUP disk_group_1 ADD ALIAS '+disk_group_1/my_dir/my_file.dbf'
FOR '+disk_group_1.342.3';

-- Rename an alias.
ALTER DISKGROUP disk_group_1 RENAME ALIAS '+disk_group_1/my_dir/my_file.dbf'
TO '+disk_group_1/my_dir/my_file2.dbf';

-- Delete an alias.
ALTER DISKGROUP disk_group_1 DELETE ALIAS '+disk_group_1/my_dir/my_file.dbf';



My system aliases
+DGROUP1/orcl
+DGROUP1/utilities.dbf
+DGROUP1/ARCHIVELOG
+DGROUP1/2011_01_21
+DGROUP1/thread_1_seq_43.264.741044093
+DGROUP1/thread_1_seq_44.265.741044381
+DGROUP1/thread_1_seq_45.268.741045337
+DGROUP1/thread_1_seq_46.269.741045341
+DGROUP1/thread_1_seq_47.272.741045529
+DGROUP1/thread_1_seq_48.273.741045531
+DGROUP1/thread_1_seq_49.274.741046177
+DGROUP1/thread_1_seq_50.275.741046187
+DGROUP1/thread_1_seq_51.276.741046197

+DGROUP1/thread_1_seq_52.277.741046205
+DGROUP1/thread_1_seq_53.278.741046213
+DGROUP1/thread_1_seq_54.279.741046223
+DGROUP1/thread_1_seq_55.280.741046231
+DGROUP1/thread_1_seq_56.281.741046243
+DGROUP1/thread_1_seq_57.282.741046257
+DGROUP1/thread_1_seq_58.283.741046279
+DGROUP1/2011_01_22
+DGROUP1/thread_1_seq_59.285.741053405
+DGROUP1/CONTROLFILE
+DGROUP1/Current.256.740948485
+DGROUP1/ONLINELOG
+DGROUP1/group_1.257.740948489

+DGROUP1/group_2.258.740948491
+DGROUP1/DATAFILE
+DGROUP1/SYSTEM.259.740948495
+DGROUP1/UNDOTBS1.260.740948513
+DGROUP1/SYSAUX.261.740948525
+DGROUP1/USERS.263.740964343
+DGROUP1/UTILITIES.284.741048253
+DGROUP1/TEMPFILE
+DGROUP1/TEMP.262.740948535
+DGROUP1/BACKUPSET
+DGROUP1/2011_01_21
+DGROUP1/nnndn1_ORCL_L1_0.266.741045261
+DGROUP1/ncsnn1_ORCL_L1_0.267.741045327

+DGROUP1/nnndn1_ORCL_L1_0.270.741045483
+DGROUP1/ncsnn1_ORCL_L1_0.271.741045519
+DGROUP1/control01.ctl
+DGROUP1/flash_recovery_area


alter diskgroup DGROUP1 add alias '+DGROUP1/users.dbf' for '+DGROUP1/orcl/datafile/users.263.740964343';

Sunday, January 16, 2011

Create ASM instance Manualy on Oracle 10gR2 ( Using Virtual Box)

Automatic Storage Manage on Oracle 10gR2 RAC
Oracle Virtual Box 3.2.12 using Oracle Linux 5

Create the VM on Oracle Virtual Box 3.2.12 ( ASM_MACHINE)

Create VM's disks

"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename D:\ora-virtual-box\asm-disks\asm-disk1.vdi --size 2048 --format VDI --variant Fixed
"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename D:\ora-virtual-box\asm-disks\asm-disk2.vdi --size 2048 --format VDI --variant Fixed
"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename D:\ora-virtual-box\asm-disks\asm-disk3.vdi --size 2048 --format VDI --variant Fixed

"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename D:\ora-virtual-box\asm-disks\asm-disk4.vdi --size 2048 --format VDI --variant Fixed
"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename D:\ora-virtual-box\asm-disks\asm-disk5.vdi --size 2048 --format VDI --variant Fixed
"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename D:\ora-virtual-box\asm-disks\asm-disk6.vdi --size 2048 --format VDI --variant Fixed

"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename D:\ora-virtual-box\asm-disks\asm-disk7.vdi --size 2048 --format VDI --variant Fixed
"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename D:\ora-virtual-box\asm-disks\asm-disk8.vdi --size 2048 --format VDI --variant Fixed

Assign the disk to the machine ASM_MACHINE

"C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach ASM_MACHINE --storagectl "SATA Controller" --port 1 --device 0 --type hdd --medium D:\ora-virtual-box\asm-disks\asm-disk1.vdi
"C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach ASM_MACHINE --storagectl "SATA Controller" --port 2 --device 0 --type hdd --medium D:\ora-virtual-box\asm-disks\asm-disk2.vdi
"C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach ASM_MACHINE --storagectl "SATA Controller" --port 3 --device 0 --type hdd --medium D:\ora-virtual-box\asm-disks\asm-disk3.vdi
"C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach ASM_MACHINE --storagectl "SATA Controller" --port 4 --device 0 --type hdd --medium D:\ora-virtual-box\asm-disks\asm-disk4.vdi
"C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach ASM_MACHINE --storagectl "SATA Controller" --port 5 --device 0 --type hdd --medium D:\ora-virtual-box\asm-disks\asm-disk5.vdi
"C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach ASM_MACHINE --storagectl "SATA Controller" --port 6 --device 0 --type hdd --medium D:\ora-virtual-box\asm-disks\asm-disk6.vdi
"C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach ASM_MACHINE --storagectl "SATA Controller" --port 7 --device 0 --type hdd --medium D:\ora-virtual-box\asm-disks\asm-disk7.vdi
"C:\Program Files\Oracle\VirtualBox\VBoxManage" storageattach ASM_MACHINE --storagectl "SATA Controller" --port 8 --device 0 --type hdd --medium D:\ora-virtual-box\asm-disks\asm-disk8.vdi




Install Oracle Linux 5 64bit , prepare Oracle's kernel parameters OS depended rpm packages.
....

Install ASMLib rpms using the following command

for the kernel: 2.6.18-194.el5
rpm -ivh oracleasm-support-2.1.3-1.el5.x86_64.rpm
rpm -ivh oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm
rpm -ivh oracleasmlib-2.0.4-1.el5.x86_64.rpm

Configure ASMLib using the following command
oracleasm configure -i

Load the kernel module using the following command.
usr/sbin/oracleasm init

Make sure you have the correct version of the driver
/usr/sbin/oracleasm update-driver

Mark the five shared disks as follows
/usr/sbin/oracleasm createdisk DISK1 /dev/sdb1
/usr/sbin/oracleasm createdisk DISK2 /dev/sdc1
/usr/sbin/oracleasm createdisk DISK3 /dev/sdd1
/usr/sbin/oracleasm createdisk DISK4 /dev/sde1

/usr/sbin/oracleasm createdisk DISK5 /dev/sdf1
/usr/sbin/oracleasm createdisk DISK6 /dev/sdg1
/usr/sbin/oracleasm createdisk DISK7 /dev/sdh1
/usr/sbin/oracleasm createdisk DISK8 /dev/sdi1

Configuration the local CSS
( run it as root)

#localconfig delete
/etc/oracle does not exist. Creating it now.
/u01/app/oracle/product/10.2.0/db_1/bin/localconfig: line 737: /etc/init.d/init.cssd: No such file or directory

#localconfig add
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configuration for local CSS has been initialized

Adding to inittab
Startup will be queued to init within 30 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
asm_machine
CSS is active on all nodes.
Oracle CSS service is installed and running under init(1M)

ps -ef | grep css
oracle 14277 1 0 21:36 ? 00:00:00 /u01/app/oracle/product/10.2.0/db_1/bin/ocssd.bin

Create the ASM instance
Directories:
mkdir -p /oracle/admin/+ASM/bdump
mkdir -p /oracle/admin/+ASM/cdump
mkdir -p /oracle/admin/+ASM/udump

Pfile :
create the init+ASM.ora under $ORACLE_HOME/dbs and add the following :

background_dump_dest=/oracle/admin/+ASM/bdump
core_dump_dest=/oracle/admin/+ASM/cdump
user_dump_dest=/oracle/admin/+ASM/udump
instance_type=asm
compatible=10.2.0.4
large_pool_size=12M
remote_login_passwordfile=exclusive
ASM_DISKGROUPS=Dgroup1
ASM_DISKSTRING='ORCL:DISK*'

Password File:
orapwd file=orapw+asm password=oracle entries=5

/etc/oratab
+ASM:/u01/app/oracle/product/10.2.0/db_1:N


Start the ASM instance and Create Diskgroups
Note:
NORMAL REDUNDANCY (2-way mirroring by default for most file types)
HIGH REDUNDANCY (3-way mirroring for all files)


[oracle@asm_machine dbs]$ export ORACLE_SID=+ASM
[oracle@asm_machine dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jan 15 23:30:46 2011

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to an idle instance.

SQL> startup nomount
ASM instance started

Total System Global Area 130023424 bytes
Fixed Size 2082208 bytes
Variable Size 102775392 bytes
ASM Cache 25165824 bytes
SQL>


GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU STATE PATH
------------ ----------- ------- ------------ -------- ------------
0 1 CLOSED PROVISIONED NORMAL ORCL:DISK2
0 2 CLOSED PROVISIONED NORMAL ORCL:DISK3
0 7 CLOSED PROVISIONED NORMAL ORCL:DISK8
0 4 CLOSED PROVISIONED NORMAL ORCL:DISK5
0 5 CLOSED PROVISIONED NORMAL ORCL:DISK6
0 6 CLOSED PROVISIONED NORMAL ORCL:DISK7
0 3 CLOSED PROVISIONED NORMAL ORCL:DISK4


•UNKNOWN - Automatic Storage Management disk header has not been read

•CANDIDATE - Disk is not part of a disk group and may be added to a disk group with the ALTER DISKGROUP statement

•INCOMPATIBLE - Version number in the disk header is not compatible with the Automatic Storage Management software version.

•PROVISIONED - Disk is not part of a disk group and may be added to a disk group with the ALTER DISKGROUP statement.
The PROVISIONED header status is different from the CANDIDATE header status in that PROVISIONED
implies that an additional platform-specific action has been taken by an administrator to make the disk available for Automatic Storage Management.

•MEMBER - Disk is a member of an existing disk group. No attempt should be made to add the disk to a different disk group.
The ALTER DISKGROUP statement will reject such an addition unless overridden with the FORCE option

•FORMER - Disk was once part of a disk group but has been dropped cleanly from the group. It may be added to a new disk group with the ALTER DISKGROUP statement.

•CONFLICT - Automatic Storage Management disk was not mounted due to a conflict

•FOREIGN - Disk contains data created by an Oracle product other than ASM. This includes datafiles, logfiles, and OCR disks.





SQL>CREATE DISKGROUP Dgroup1 NORMAL REDUNDANCY
FAILGROUP controller1 DISK
'ORCL:DISK1',
'ORCL:DISK2'
FAILGROUP controller2 DISK
'ORCL:DISK3' ,
'ORCL:DISK4'
/

GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU STATE PATH
------------ ----------- ------- ------------ -------- ---------------
0 4 CLOSED PROVISIONED NORMAL ORCL:DISK5
0 5 CLOSED PROVISIONED NORMAL ORCL:DISK6
0 6 CLOSED PROVISIONED NORMAL ORCL:DISK7
0 7 CLOSED PROVISIONED NORMAL ORCL:DISK8
1 0 CACHED MEMBER NORMAL ORCL:DISK1
1 1 CACHED MEMBER NORMAL ORCL:DISK2
1 2 CACHED MEMBER NORMAL ORCL:DISK3
1 3 CACHED MEMBER NORMAL ORCL:DISK4