一步一步在OEL5.5 64位Linux上安装Oracle 10gR2 RAC(5)

17 安装oracle软件

Oracle用户登录图形界面,执行安装介质中的10201_databse_inux-x86-64来进行。

 

Next

 

Next

 

Next:这里需要注意指定oracle软件的家目录,即/u01/app/oracle/product/10.2.0/db_1

 

Next:选中所有节点

 

Next

 

根据提示,重新将双节点的 ip_local_port_range=9000 – 65500.

修改为ip_local_port_range=1024 – 65000

Next

 

Next:选中只安装软件;

 

Next

 

 

Next

 

Next

 

 

Next

根据提示,分别以root用户在双节点上执行:/u01/app/oracle/product/10.2.0/db_1/root.sh

Node1

[root@node1 ~]# /u01/app/oracle/product/10.2.0/db_1/root.sh

Running Oracle10 root.sh script…

 

The following environment variables are set as:

    ORACLE_OWNER= oracle

    ORACLE_HOME=  /u01/app/oracle/product/10.2.0/db_1

 

Enter the full pathname of the local bin directory: [/usr/local/bin]: 

   Copying dbhome to /usr/local/bin …

   Copying oraenv to /usr/local/bin …

   Copying coraenv to /usr/local/bin …

 

 

Creating /etc/oratab file…

Entries will be added to the /etc/oratab file as needed by

Database Configuration Assistant when a database is created

Finished running generic part of root.sh script.

Now product-specific root actions will be performed.

 

[root@node1 ~]# 

 

Node2

[root@node2 ~]# /u01/app/oracle/product/10.2.0/db_1/root.sh

Running Oracle10 root.sh script…

 

The following environment variables are set as:

    ORACLE_OWNER= oracle

    ORACLE_HOME=  /u01/app/oracle/product/10.2.0/db_1

 

Enter the full pathname of the local bin directory: [/usr/local/bin]: 

   Copying dbhome to /usr/local/bin …

   Copying oraenv to /usr/local/bin …

   Copying coraenv to /usr/local/bin …

 

 

Creating /etc/oratab file…

Entries will be added to the /etc/oratab file as needed by

Database Configuration Assistant when a database is created

Finished running generic part of root.sh script.

Now product-specific root actions will be performed.

 

[root@node2 ~]# 

Next

 

完成,在双节点上安装Oracle数据库软件!

node1-> hostname 

node1.oracleonlinux.cn

node1-> env|grep ORA

ORA_CRS_HOME=/u01/app/oracle/product/10.2.0/crs_1

ORACLE_SID=devdb1

ORACLE_BASE=/u01/app/oracle

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

node1-> sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.1.0 – Production on Sat Dec 21 23:38:16 2013

 

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

 

Connected to an idle instance.

 

SQL> !       

node1-> ssh node2

node2-> env|grep ORA

ORA_CRS_HOME=/u01/app/oracle/product/10.2.0/crs_1

ORACLE_SID=devdb2

ORACLE_BASE=/u01/app/oracle

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

node2-> sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.1.0 – Production on Sat Dec 21 23:38:50 2013

 

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

 

Connected to an idle instance.

 

SQL> 

 

 

一步一步在OEL5.5 64位Linux上安装Oracle 10gR2 RAC(4)

16 升级clusterware软件

升级之前,查看CRS版本:

Node1

[root@node1 ~]# su – oracle

node1-> hostname 

node1.oracleonlinux.cn

node1-> crs_stat -t

Name           Type           Target    State     Host        

————————————————————

ora.node1.gsd  application    ONLINE    ONLINE    node1       

ora.node1.ons  application    ONLINE    ONLINE    node1       

ora.node1.vip  application    ONLINE    ONLINE    node1       

ora.node2.gsd  application    ONLINE    ONLINE    node2       

ora.node2.ons  application    ONLINE    ONLINE    node2       

ora.node2.vip  application    ONLINE    ONLINE    node2       

node1-> crsctl query crs softwareversion

CRS software version on node [node1] is [10.2.0.1.0]

node1-> 

node1-> crsctl query crs activeversion

CRS active version on the cluster is [10.2.0.1.0]

node1-> 

Node2

 

执行升级:

执行安装介质中的p8202632_10205_Linux-x86-64来给集群件打patch

Oracle用户在图形界面调用/mnt/p8202632_10205_Linux-x86-64/Disk1/runInstaller 来执行:

 

进入升级操作:

 

Next

注意选择正确的cluster_name,以及clusterware软件的home

 

Next

 

Next

 

预检查未通过,根据提示,以root用户在双节点上将/etc/sysctl.conf配置文件中的

fs.file-max = 65536修改为fs.file-max = 101365

net.ipv4.ip_local_port_range=1024 – 65000.修改为net.ipv4.ip_local_port_range=9000 – 65500

并执行sysctl -p 来使之生效。

 

 

然后,单击Retry,确保预检查通过:

 

Next

 

 Install,开始安装:

 

 

Note:

Because the software consists of local identical copies distributed across each of the nodes in the cluster, it is possible to patch your CRS installation in a rolling manner, one node at a time.

 

To complete the installation of this patchset, you must perform the following tasks on each node:

 

1.Log in as the root user.

2.As the root user, perform the following tasks:

 

a.Shutdown the CRS daemons by issuing the following command:

/u01/app/oracle/product/10.2.0/crs_1/bin/crsctl stop crs

b.Run the shell script located at:

/u01/app/oracle/product/10.2.0/crs_1/install/root102.sh

This script will automatically start the CRS daemons on the

patched node upon completion.

 

3.After completing this procedure, proceed to the next node and repeat.

根据上述提示,以滚动方式来对CRS升级,即先升级其中的一个节点,然后再升级其它的节点。

Node1:

root用户执行/u01/app/oracle/product/10.2.0/crs_1/bin/crsctl stop crs

[root@node1 ~]# /u01/app/oracle/product/10.2.0/crs_1/bin/crsctl stop crs

Stopping resources.

Successfully stopped CRS resources 

Stopping CSSD.

Shutting down CSS daemon.

Shutdown request successfully issued.

[root@node1 ~]# 

root用户执行/u01/app/oracle/product/10.2.0/crs_1/install/root102.sh

[root@node1 ~]# /u01/app/oracle/product/10.2.0/crs_1/install/root102.sh

Creating pre-patch directory for saving pre-patch clusterware files

Completed patching clusterware files to /u01/app/oracle/product/10.2.0/crs_1

Relinking some shared libraries.

Relinking of patched files is complete.

WARNING: directory ‘/u01/app/oracle/product/10.2.0’ is not owned by root

WARNING: directory ‘/u01/app/oracle/product’ is not owned by root

WARNING: directory ‘/u01/app/oracle’ is not owned by root

WARNING: directory ‘/u01/app’ is not owned by root

WARNING: directory ‘/u01’ is not owned by root

Preparing to recopy patched init and RC scripts.

Recopying init and RC scripts.

Startup will be queued to init within 30 seconds.

Starting up the CRS daemons.

Waiting for the patched CRS daemons to start.

  This may take a while on some systems.

.

10205 patch successfully applied.

clscfg: EXISTING configuration version 3 detected.

clscfg: version 3 is 10G Release 2.

Successfully deleted 1 values from OCR.

Successfully deleted 1 keys from OCR.

Successfully accumulated necessary OCR keys.

Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.

node <nodenumber>: <nodename> <private interconnect name> <hostname>

node 1: node1 node1-priv node1

Creating OCR keys for user ‘root’, privgrp ‘root’..

Operation successful.

clscfg -upgrade completed successfully

Creating ‘/u01/app/oracle/product/10.2.0/crs_1/install/paramfile.crs’ with data used for CRS configuration

Setting CRS configuration values in /u01/app/oracle/product/10.2.0/crs_1/install/paramfile.crs

[root@node1 ~]# 

同理,在节点2上执行上述操作!

升级后,双节点上的CRS都从10.2.0.1.0升级到10.2.0.5.0

 

 

 

至此,我们已经在双节点上将CRS版本已经升级至10.2.0.5.0!!!

一步一步在OEL5.5 64位Linux上安装Oracle 10gR2 RAC(3)

15 安装clusterware软件

Note

由于oracle 10g早在10年前,即2003年就发布了,而Redhat Enterprise Linux 5的发布日期要晚于oracle 10g发布,所以,默认情况下Oracle 10g 不支持在Redhat Enterprise Linux 5及以上版本上安装。所以,解决方案:

可以通过修改/etc/redhat-release 文件;

在安装的过程中,执行runInstaller 加上–ignoreSysPreReqs选项;

这里采取第一种方法。

修改前:

[root@node1 /]# cat /etc/redhat-release 

Red Hat Enterprise Linux Server release 5.5 (Tikanga)

[root@node1 /]#

修改后:

[root@node1 /]# cat /etc/redhat-release 

Red Hat Enterprise Linux Server release 4 (Tikanga)

[root@node1 /]#

 

将安装介质挂载到光驱上,然后挂载光盘到/mnt

[root@node1 /]# mount /dev/cdrom /mnt/

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@node1 /]# 

Oracle用户登录图形界面:

 

根据提示,以root用户在双节点上执行rootpre.sh脚本:

[root@node1 rootpre]# pwd

/mnt/10201_clusterware_linux_x86_64/rootpre

[root@node1 rootpre]# sh rootpre.sh 

No OraCM running 

[root@node1 rootpre]# 

继续安装:

 

提示错误,缺少libXp软件包,root用户到OS安装光盘中重新安装缺少的软件包:

[root@node1 media]# rpm -ivh libXp-1.0.0-8.1.el5.i386.rpm 

warning: libXp-1.0.0-8.1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing…                ########################################### [100%]

   1:libXp                  ########################################### [100%]

[root@node1 media]# rpm -ivh libXp-1.0.0-8.1.el5.x86_64.rpm 

warning: libXp-1.0.0-8.1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing…                ########################################### [100%]

   1:libXp                  ########################################### [100%]

[root@node1 media]# 

Note

node2节点上也要安装缺失的软件包!

重新执行:

node1-> sh /mnt/10201_clusterware_linux_x86_64/runInstaller 

来安装:

 

Next

 

Next

 

注意path指向ORA_CRS_HOME=/u01/app/oracle/product/10.2.0/crs_1,以及指定cluster_name=crs.  Next:

 

添加节点信息:

 

修改eth0网卡作为publicNext

 

指定OCR为外部冗余策略,并选择存放路径为/dev/raw/raw1Next

 

指定Voting disk为外部冗余策略,并选择存放路径为/dev/raw/raw2Next

 

Install开始安装:

 

Next

 

Next

 

根据提示执行以root用户分别在2个节点上执行/u01/app/oracle/oraInventory/orainstRoot.sh 

/u01/app/oracle/product/10.2.0/crs_1/root.sh脚本:

Node1:

[root@node1 ~]# /u01/app/oracle/oraInventory/orainstRoot.sh

Changing permissions of /u01/app/oracle/oraInventory to 770.

Changing groupname of /u01/app/oracle/oraInventory to oinstall.

The execution of the script is complete

[root@node1 ~]# /u01/app/oracle/product/10.2.0/crs_1/root.sh

WARNING: directory ‘/u01/app/oracle/product/10.2.0’ is not owned by root

WARNING: directory ‘/u01/app/oracle/product’ is not owned by root

WARNING: directory ‘/u01/app/oracle’ is not owned by root

WARNING: directory ‘/u01/app’ is not owned by root

WARNING: directory ‘/u01’ is not owned by root

Checking to see if Oracle CRS stack is already configured

/etc/oracle does not exist. Creating it now.

 

Setting the permissions on OCR backup directory

Setting up NS directories

Oracle Cluster Registry configuration upgraded successfully

WARNING: directory ‘/u01/app/oracle/product/10.2.0’ is not owned by root

WARNING: directory ‘/u01/app/oracle/product’ is not owned by root

WARNING: directory ‘/u01/app/oracle’ is not owned by root

WARNING: directory ‘/u01/app’ is not owned by root

WARNING: directory ‘/u01’ is not owned by root

Successfully accumulated necessary OCR keys.

Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.

node <nodenumber>: <nodename> <private interconnect name> <hostname>

node 1: node1 node1-priv node1

node 2: node2 node2-priv node2

Creating OCR keys for user ‘root’, privgrp ‘root’..

Operation successful.

Now formatting voting device: /dev/raw/raw2

Format of 1 voting devices complete.

Startup will be queued to init within 90 seconds.

Adding daemons to inittab

Expecting the CRS daemons to be up within 600 seconds.

CSS is active on these nodes.

        node1

CSS is inactive on these nodes.

        node2

Local node checking complete.

Run root.sh on remaining nodes to start CRS daemons.

[root@node1 ~]# 

Node2:

[root@node2 ~]# /u01/app/oracle/oraInventory/orainstRoot.sh

Changing permissions of /u01/app/oracle/oraInventory to 770.

Changing groupname of /u01/app/oracle/oraInventory to oinstall.

The execution of the script is complete

[root@node2 ~]#

 

[root@node2 ~]# /u01/app/oracle/product/10.2.0/crs_1/root.sh

WARNING: directory ‘/u01/app/oracle/product/10.2.0’ is not owned by root

WARNING: directory ‘/u01/app/oracle/product’ is not owned by root

WARNING: directory ‘/u01/app/oracle’ is not owned by root

WARNING: directory ‘/u01/app’ is not owned by root

WARNING: directory ‘/u01’ is not owned by root

Checking to see if Oracle CRS stack is already configured

/etc/oracle does not exist. Creating it now.

 

Setting the permissions on OCR backup directory

Setting up NS directories

Oracle Cluster Registry configuration upgraded successfully

WARNING: directory ‘/u01/app/oracle/product/10.2.0’ is not owned by root

WARNING: directory ‘/u01/app/oracle/product’ is not owned by root

WARNING: directory ‘/u01/app/oracle’ is not owned by root

WARNING: directory ‘/u01/app’ is not owned by root

WARNING: directory ‘/u01’ is not owned by root

clscfg: EXISTING configuration version 3 detected.

clscfg: version 3 is 10G Release 2.

Successfully accumulated necessary OCR keys.

Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.

node <nodenumber>: <nodename> <private interconnect name> <hostname>

node 1: node1 node1-priv node1

node 2: node2 node2-priv node2

clscfg: Arguments check out successfully.

 

NO KEYS WERE WRITTEN. Supply -force parameter to override.

-force is destructive and will destroy any previous cluster

configuration.

Oracle Cluster Registry for cluster has already been initialized

Startup will be queued to init within 90 seconds.

Adding daemons to inittab

Expecting the CRS daemons to be up within 600 seconds.

CSS is active on these nodes.

        node1

        node2

CSS is active on all nodes.

Waiting for the Oracle CRSD and EVMD to start

Oracle CRS stack installed and running under init(1M)

Running vipca(silent) for configuring nodeapps

/u01/app/oracle/product/10.2.0/crs_1/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory

[root@node2 ~]# 

 

 

Note

解决上述错误,/u01/app/oracle/product/10.2.0/crs_1/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory

其实,这是1bug

在每个节点上,修改$ORA_CRS_HOME/bin目录下的srvctlvipca文件,

vipca文件ARGUMENTS=””165行之前和srvctl文件的export LD_ASSUME_KERNEL 174行之后增加 unset LD_ASSUME_KERNEL 语句;

修改后的$ORA_CRS_HOME/bin/vipca文件:

160       fi

161       export LD_LIBRARY_PATH

162       ;;

163 esac

164 

165 unset LD_ASSUME_KERNEL

166 ARGUMENTS=””

167 NUMBER_OF_ARGUMENTS=$#

修改后的$ORA_CRS_HOME/bin/srvctl文件:

172 #Remove this workaround when the bug 3937317 is fixed

173 LD_ASSUME_KERNEL=2.4.19

174 export LD_ASSUME_KERNEL

175 unset LD_ASSUME_KERNEL

176 

177 # Run ops control utility

178 $JRE $JRE_OPTIONS -classpath $CLASSPATH $TRACE oracle.ops.opsctl.OPSCTLDriver “$@”

179 exit $?

 

在任意一个节点上,用root用户,手动运行vipca,配置完正确的prvipvip 信息之后,crs就可以安装完成。

 

Next

 

填写对应的VIP别名:node1-vip.oracleonlinux.cnnode2-vip.oracleonlinux.cn

 

Next

 

Next

 

然后,继续进行集群软件的安装:

此时单击,Retry:

 

最后,

 

完成clusterware软件的安装!!!

如下

node1-> crs_stat -t

Name           Type           Target    State     Host        

————————————————————

ora.node1.gsd  application    ONLINE    ONLINE    node1       

ora.node1.ons  application    ONLINE    ONLINE    node1       

ora.node1.vip  application    ONLINE    ONLINE    node1       

ora.node2.gsd  application    ONLINE    ONLINE    node2       

ora.node2.ons  application    ONLINE    ONLINE    node2       

ora.node2.vip  application    ONLINE    ONLINE    node2       

node1-> 

一步一步在OEL5.5 64位Linux上安装Oracle 10gR2 RAC(2)

11 配置共享磁盘

给双节点配置6块共享磁盘。

Note

其中第1块大小为130M,用于存放Oracle 10g R2 RACOCR

其中第2块大小为130M,用于存放Oracle 10g R2 RACVoting Disk

其中第3块大小为3G,用于配置DATA磁盘组,存放数据库。

其中第4块大小为3G,用于配置FRA磁盘组,作为数据库的闪回恢复区,存放归档日志、RMAN备份等。

其中第5块大小为1G,用于将来升级到11gR2 RAC时,给Grid Infrastructure使用。

具体的配置过程,在本文档中就不再一一赘述,但是视频里会给出操作过程。具体可以通过

下述2中方式查看:

查看本人之前的系列视频之《黄伟老师Oracle RAC+DG系列视频+售后安心技术支持服务》第4RAC双节点格式化共享存储,配置ASM磁盘,配置ASM

2 或查看本人系列文章之一步一步在Linux上安装Oracle 11gR2 RAC (3)2.13 配置共享磁盘

12 在共享磁盘上创建分区

这里在每个磁盘上分别创建1个分区,且把磁盘所有空间都用于这1个主分区。

Note:

对共享磁盘分区时,只需要以root用户在任意节点上创建即可,不需要在每个节点上执行!

分区后的信息如下:

Node1:

[root@node1 ~]# fdisk -l

 

Disk /dev/sda: 42.9 GB, 42949672960 bytes

255 heads, 63 sectors/track, 5221 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1        4711    37841076   83  Linux

/dev/sda2            4712        5221     4096575   82  Linux swap / Solaris

 

Disk /dev/sdb: 134 MB, 134217728 bytes

64 heads, 32 sectors/track, 128 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         128      131056   83  Linux

 

Disk /dev/sdc: 134 MB, 134217728 bytes

64 heads, 32 sectors/track, 128 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1         128      131056   83  Linux

 

Disk /dev/sdd: 3221 MB, 3221225472 bytes

255 heads, 63 sectors/track, 391 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdd1               1         391     3140676   83  Linux

 

Disk /dev/sde: 3221 MB, 3221225472 bytes

255 heads, 63 sectors/track, 391 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sde1               1         391     3140676   83  Linux

 

Disk /dev/sdf: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdf1               1         130     1044193+  83  Linux

[root@node1 ~]# 

Node 2

[root@node2 ~]# fdisk -l

 

Disk /dev/sda: 42.9 GB, 42949672960 bytes

255 heads, 63 sectors/track, 5221 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1        4463    35849016   83  Linux

/dev/sda2            4464        5221     6088635   82  Linux swap / Solaris

 

Disk /dev/sdb: 134 MB, 134217728 bytes

64 heads, 32 sectors/track, 128 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         128      131056   83  Linux

 

Disk /dev/sdc: 134 MB, 134217728 bytes

64 heads, 32 sectors/track, 128 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1         128      131056   83  Linux

 

Disk /dev/sdd: 3221 MB, 3221225472 bytes

255 heads, 63 sectors/track, 391 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdd1               1         391     3140676   83  Linux

 

Disk /dev/sde: 3221 MB, 3221225472 bytes

255 heads, 63 sectors/track, 391 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sde1               1         391     3140676   83  Linux

 

Disk /dev/sdf: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdf1               1         130     1044193+  83  Linux

[root@node2 ~]# 

节点2上的磁盘分区信息除/dev/sda可能不同之外,其它共享磁盘分区信息应该完全同节点1

13 配置裸设备以存放OCRVoting Disk

由于在Oracle 10g版本里,OCRVoting Disk还不支持存放在ASM磁盘里,所以,这里

需要将/dev/sdb1/dev/sdc1这两个硬盘分区作为裸设备来分别存放OCRVoting Disk

我们将使用udev来管理/dev/sdb1/dev/sdc12个设备:

编辑/etc/udev/rules.d/60-raw.rules 文件:

在其中加入下述内容:

ACTION==”add”, KERNEL==”/dev/sdb1″, RUN+=”/bin/raw /dev/raw/raw1 %N”

ACTION==”add”, ENV{MAJOR}==”8″, ENV{MINOR}==”17″, RUN+=”/bin/raw /dev/raw/raw1 %M %m”

 

ACTION==”add”, KERNEL==”/dev/sdc1″, RUN+=”/bin/raw /dev/raw/raw2 %N”

ACTION==”add”, ENV{MAJOR}==”8″, ENV{MINOR}==”33″, RUN+=”/bin/raw /dev/raw/raw2 %M %m”

 

KERNEL ==”raw[1-2]”, OWNER =”oracle”, GROUP =”oinstall”, MODE =”640″

 

编辑后:

[root@node1 rules.d]# pwd

/etc/udev/rules.d

[root@node1 rules.d]# ll

total 152

-rw-r–r– 1 root root   515 Jul  3  2009 05-udev-early.rules

-rw-r–r– 1 root root   900 Mar 31  2010 40-multipath.rules

-rw-r–r– 1 root root 15647 Jul  3  2009 50-udev.rules

-rw-r–r– 1 root root   471 Jul  3  2009 51-hotplug.rules

-rw-r–r– 1 root root   143 Jul  4  2009 60-net.rules

-rw-r–r– 1 root root  1088 Jun  6  2007 60-pcmcia.rules

-rw-r–r– 1 root root   628 Dec 19 21:23 60-raw.rules

-rw-r–r– 1 root root  9014 Apr  1  2010 60-wacom.rules

-rw-r–r– 1 root root   129 Apr  1  2010 61-uinput-stddev.rules

-rw-r–r– 1 root root   214 Apr  1  2010 61-uinput-wacom.rules

-rw-r–r– 1 root root  1823 Nov  5  2008 85-pcscd_ccid.rules

-rw-r–r– 1 root root   114 Nov  5  2008 90-alsa.rules

-rw-r–r– 1 root root    61 Jul  3  2009 90-dm.rules

-rw-r–r– 1 root root    82 Apr  1  2010 90-hal.rules

-rw-r–r– 1 root root   107 Jul  3  2009 95-pam-console.rules

-rw-r–r– 1 root root   292 Apr  1  2010 98-kexec.rules

-rw-r–r– 1 root root  2319 Jul 15  2008 bluetooth.rules

[root@node1 rules.d]# cat 60-raw.rules 

# Enter raw device bindings here.

#

# An example would be:

#   ACTION==”add”, KERNEL==”sda”, RUN+=”/bin/raw /dev/raw/raw1 %N”

# to bind /dev/raw/raw1 to /dev/sda, or

#   ACTION==”add”, ENV{MAJOR}==”8″, ENV{MINOR}==”1″, RUN+=”/bin/raw /dev/raw/raw2 %M %m”

# to bind /dev/raw/raw2 to the device with major 8, minor 1.

 

ACTION==”add”, KERNEL==”/dev/sdb1″, RUN+=”/bin/raw /dev/raw/raw1 %N”

ACTION==”add”, ENV{MAJOR}==”8″, ENV{MINOR}==”17″, RUN+=”/bin/raw /dev/raw/raw1 %M %m”

 

ACTION==”add”, KERNEL==”/dev/sdc1″, RUN+=”/bin/raw /dev/raw/raw2 %N”

ACTION==”add”, ENV{MAJOR}==”8″, ENV{MINOR}==”33″, RUN+=”/bin/raw /dev/raw/raw2 %M %m”

 

KERNEL ==”raw[1-2]”, OWNER =”oracle”, GROUP =”oinstall”, MODE =”640″

[root@node1 rules.d]# 

关于使用udev来管理Linux下的设备文件,具体可以查看链接:

http://www.ibm.com/developerworks/cn/linux/l-cn-udev/

该部分内容,不是本课程内容,不做过多阐述。

其中的ENV{MAJOR}ENV{MINOR}可以通过下述命令确定:

[root@node1 rules.d]# ll /dev/sd*

brw-r—– 1 root disk 8,  0 Dec 19 16:33 /dev/sda

brw-r—– 1 root disk 8,  1 Dec 19 16:34 /dev/sda1

brw-r—– 1 root disk 8,  2 Dec 19 16:33 /dev/sda2

brw-r—– 1 root disk 8, 16 Dec 19 16:33 /dev/sdb

brw-r—– 1 root disk 8, 17 Dec 19 21:20 /dev/sdb1

brw-r—– 1 root disk 8, 32 Dec 19 16:33 /dev/sdc

brw-r—– 1 root disk 8, 33 Dec 19 21:20 /dev/sdc1

brw-r—– 1 root disk 8, 48 Dec 19 16:33 /dev/sdd

brw-r—– 1 root disk 8, 49 Dec 19 21:20 /dev/sdd1

brw-r—– 1 root disk 8, 64 Dec 19 16:33 /dev/sde

brw-r—– 1 root disk 8, 65 Dec 19 21:20 /dev/sde1

brw-r—– 1 root disk 8, 80 Dec 19 16:33 /dev/sdf

brw-r—– 1 root disk 8, 81 Dec 19 21:20 /dev/sdf1

[root@node1 rules.d]# 

然后,启动udev:

[root@node1 rules.d]# /sbin/udevcontrol reload_rules

[root@node1 rules.d]# /sbin/start_udev 

Starting udev: [  OK  ]

[root@node1 rules.d]# 

 

之后,可以看到/dev/raw下的裸设备文件:

[root@node1 rules.d]# ll /dev/raw/*

crw-r—– 1 oracle oinstall 162, 1 Dec 19 21:31 /dev/raw/raw1

crw-r—– 1 oracle oinstall 162, 2 Dec 19 21:31 /dev/raw/raw2

[root@node1 rules.d]# 

 

Note

上述操作需要在双节点执行!且确保在双节点均可以看到裸设备文件,以及oracle用户具有对裸设备的权限!

 

14 安装asm软件包、创建ASM磁盘

选择与OS内核对应的软件包:

[root@node1 asm]# uname -rm

2.6.18-194.el5 x86_64

[root@node1 asm]# ll

total 244

-rw-r–r– 1 root root 137486 Dec 19 13:50 oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm

-rw-r–r– 1 root root  13929 Dec 19 13:50 oracleasmlib-2.0.4-1.el5.i386.rpm

-rw-r–r– 1 root root  85687 Dec 19 13:50 oracleasm-support-2.1.7-1.el5.i386.rpm

[root@node1 asm]#

安装:

[root@node1 asm]# rpm -ivh oracleasm-support-2.1.7-1.el5.i386.rpm 

warning: oracleasm-support-2.1.7-1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing…                ########################################### [100%]

   1:oracleasm-support      ########################################### [100%]

[root@node1 asm]# rpm -ivh oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm 

warning: oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing…                ########################################### [100%]

   1:oracleasm-2.6.18-194.el########################################### [100%]

[root@node1 asm]# rpm -ivh oracleasmlib-2.0.4-1.el5.i386.rpm 

warning: oracleasmlib-2.0.4-1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing…                ########################################### [100%]

   1:oracleasmlib           ########################################### [100%]

[root@node1 asm]#

Note

注意安装顺序,先安装oracleasm-support-2.1.7-1.el5.i386.rpm ,然后oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm ,最后oracleasmlib-2.0.4-1.el5.i386.rpm

2 ASM软件包一定要选择与OS内核对应的软件包。

配置ASM驱动:

[root@node1 asm]# /etc/init.d/oracleasm configure

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 []: oracle

Default group to own the driver interface []: oinstall

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

Initializing the Oracle ASMLib driver: [  OK  ]

Scanning the system for Oracle ASMLib disks: [  OK  ]

[root@node1 asm]# /etc/init.d/oracleasm status

Checking if ASM is loaded: yes

Checking if /dev/oracleasm is mounted: yes

[root@node1 asm]# 

Note

上述操作需要在双节点上完成!

在配置oracleasm时,要选择正确的用户、用户组,这里是oracleoinstall组。

创建ASM磁盘:

这里选择将/dev/sdd1/dev/sdf1分别创建为ASMDISK1ASMDISK2

[root@node1 asm]# /etc/init.d/oracleasm createdisk ASMDISK1 /dev/sdd1

Marking disk “ASMDISK1” as an ASM disk: [  OK  ]

[root@node1 asm]# /etc/init.d/oracleasm createdisk ASMDISK2 /dev/sde1

Marking disk “ASMDISK2” as an ASM disk: [  OK  ]

[root@node1 asm]# /etc/init.d/oracleasm listdisks

ASMDISK1

ASMDISK2

[root@node1 asm]# 

创建ASM磁盘操作,只需在任意节点上执行即可。然后,再另一节点上执行scandisks:

[root@node2 asm]# /etc/init.d/oracleasm scandisks

Scanning the system for Oracle ASMLib disks: [  OK  ]

[root@node2 asm]# /etc/init.d/oracleasm listdisks

ASMDISK1

ASMDISK2

[root@node2 asm]# 

一步一步在OEL5.5 64位Linux上安装Oracle 10gR2 RAC(1)

概述:

    继本人上一个系列的Oracle 11gR2 RAC+DG项目实战教程发布已一年有余,在此期间,那个系列的教程得到众多网友的喜爱与好评,更是在互联网上畅销不衰。为此,众多网友也一直希望本人推出Oracle 10gR2 RAC的系列教程,恰逢前不久,深圳某客户需要将一套Oracle 10gR2双节点RAC生产数据库升级至Oracle 11gR2 RAC,所以便有了本系列实战的教程。

为更贴切还原生产过程中的实际操作,本系列教程一个分两大部分:

第一部分从零开始一步一步搭建一套在OEL 5.5 X86_64位环境下的双节点10gR2 RAC数据库,并将数据库升级至10.2.0.5.0版本。

第二部分,一步一步将10gR2 RAC升级至Oracle 11gR2 RAC,数据库版本选择11g最新的11.2.0.4.0版本。

 

第一部分主要步骤:

一、准备软件;

二、配置虚拟机;

三、配置/etc/hosts文件;

四、建用户、改口令、修改用户配置文件;

五、建路径、改权限

六、修改/etc/security/limits.conf,配置oraclegrid用户的shell限制

七、修改/etc/pam.d/login配置文件

八、修改/etc/profile文件

九、修改内核配置文件

十、 配置oracle用户SSH对等性

十一、 配置共享磁盘

十二、 在共享磁盘上创建分区

十三、 配置裸设备以存放OCRVoting Disk

十四、 安装asm软件包、创建ASM磁盘

十五、 安装clusterware软件

十六、 升级clusterware软件

十七、 安装oracle软件

十八、 升级oracle软件

十九、 创建RAC监听

二十、 创建ASM磁盘组、RAC数据库

准备软件:

软件名称

官方下载

百度网盘

360网盘

OEL 5.5 X86_64

https://edelivery.oracle.com/linux

http://pan.baidu.com/share/link?shareid=513608932&uk=3409299182

http://yunpan.cn/QDHwHk63tepJU

VMware Server

http://www.vmware.com/download/server/

http://pan.baidu.com/share/link?shareid=765358990&uk=3409299182

http://yunpan.cn/QDHwcLuECp2Lp

10201_clusterware_linux_x86_64

N/A 

http://pan.baidu.com/share/link?shareid=1472026032&uk=3409299182

http://yunpan.cn/QDBQw49Thgjdz

10201_database_linux_x86_64

N/A

http://pan.baidu.com/share/link?shareid=1472026032&uk=3409299182

http://yunpan.cn/QDBQw49Thgjdz

p8202632_10205_Linux-x86-64

N/A

http://pan.baidu.com/share/link?shareid=1472026032&uk=3409299182

http://yunpan.cn/QDBQw49Thgjdz

p13390677_112040_Linux-x86-64_3of7  [Grid软件] 

N/A

http://pan.baidu.com/share/link?shareid=1479956116&uk=3409299182

http://yunpan.cn/QDBQaw93MzR8z

p13390677_112040_Linux-x86-64_1of7

p13390677_112040_Linux-x86-64_2of7  [Oracle软件] 

N/A

http://pan.baidu.com/share/link?shareid=1479956116&uk=3409299182

http://yunpan.cn/QDBQaw93MzR8z

Oracle ASM软件包

N/A

http://pan.baidu.com/s/1mgK6aYO

 请稍后

2 配置虚拟机,安装OEL 5.5 X86_64Linux操作系统

    这里,我们需要在VMware ESXi Version 4.0的虚拟主机上创建两台虚拟机,其中每台机器至少需要配置双网卡,一块网卡作为Public,另一块作为Private,建议IP地址均选择手动配置,而不是DHCP动态分配,且要求指定的IP在网络里是唯一的。主机名也分别要求指定为唯一,避免冲突。主机名、IP地址在前期规划要慎重,一经指定,最好不要轻易改变,避免一些不必要的麻烦。这里列出两台机器前期规划的主机名、IP地址信息:

Hostname

Hostname alias

Type   

IP Address

Interface

node1.oracleonlinux.cn

node1

Public IP

172.16.0.33

eth0

node1-vip.oracleonlinux.cn

node1-vip

Virtual IP

172.16.0.35

eth0:1

node1-priv.oracleonlinux.cn

node1-priv

Private IP

192.168.94.11

eth1

node2.oracleonlinux.cn

node2

Public IP

172.16.0.34

eth0

node2-priv.oracleonlinux.cn

node2-vip

Virtual IP

172.16.0.36

eth0:1

node2-priv.oracleonlinux.cn

node2-priv

Private IP

192.168.94.12

eth1

scan-cluster.oracleonlinux.cn

scan-cluster

SCAN IP

172.16.0.223

eth0

                              (Figure 1.1网络配置信息表)

Note

上述中配置的SCAN IP是为后期我们将10gR2 RAC 升级到11gR2 RAC预留的。

     其中,每台机器至少需要配置3IP地址,在安装操作系统的过程中,我们需要配置公网IP和私有IP即可,虚拟IP在安装集群件时自动配置。Public IPVirtual IPSCAN IP必须配置在同一网段。SCAN IPOracle 11g新推出的,在配置11g RAC时需要指定。我们的SCAN IP通过配置DNS服务器来实现。

配置/etc/hosts文件

参照上述1.1网络配置信息表来配置/etc/hosts文件。在双节点上均需执行。

节点1

[root@node1 ~]# hostname 

node1.oracleonlinux.cn

[root@node1 ~]# cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               localhost

::1             localhost6.localdomain6 localhost6

 

 

# public

172.16.0.33     node1.oracleonlinux.cn       node1

172.16.0.34     node2.oracleonlinux.cn       node2

 

# private

192.168.94.11   node1-priv.oracleonlinux.cn  node1-priv

192.168.94.12   node2-priv.oracleonlinux.cn  node2-priv

 

 

# virtual

172.16.0.35     node1-vip.oracleonlinux.cn   node1-vip

172.16.0.36     node2-vip.oracleonlinux.cn   node2-vip

 

# scan-ip

172.16.0.223            scan-cluster.oracleonlinux.cn        scan-cluster

[root@node1 ~]# 

节点2

[root@node2 ~]# cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               localhost

::1             localhost6.localdomain6 localhost6

 

 

 

# public

172.16.0.33     node1.oracleonlinux.cn       node1

172.16.0.34     node2.oracleonlinux.cn       node2

 

# private

192.168.94.11   node1-priv.oracleonlinux.cn  node1-priv

192.168.94.12   node2-priv.oracleonlinux.cn  node2-priv

 

 

# virtual

172.16.0.35     node1-vip.oracleonlinux.cn   node1-vip

172.16.0.36     node2-vip.oracleonlinux.cn   node2-vip

 

# scan-ip

172.16.0.223            scan-cluster.oracleonlinux.cn        scan-cluster

[root@node2 ~]# 

建用户、改口令、修改用户配置文件;

root用户执行事先配置的脚本1preuser_dir.sh,脚本具体内容请见附件1在双节点上均需执行。

[root@node1 shell]# pwd

/root/media/shell

[root@node1 shell]# ll

total 24

-rw-r–r– 1 root root 1625 Dec 19 14:10 1preuser_dir.sh

-rw-r–r– 1 root root  477 Dec 19 14:11 2predir.sh

-rw-r–r– 1 root root  631 Dec 19 14:11 3prelimits.sh

-rw-r–r– 1 root root  465 Dec 19 14:11 4prelogin.sh

-rw-r–r– 1 root root  632 Dec 19 14:12 5preprofile.sh

-rw-r–r– 1 root root  931 Dec 19 14:12 6presysctl.sh

[root@node1 shell]# 

[root@node1 shell]# sh 1preuser_dir.sh 

Now create two groups named ‘oinstall’ and ‘dba’, plus a user named ‘oracle’.Also setting the Environment

Now create the necessary directory for oracle user and change the authention to oracle user…

Changing password for user oracle.

passwd: all authentication tokens updated successfully.

The two groups named ‘oinstall’ and ‘dba’ plus the oracle user has been created.

The Environment variable for oracle user also has been setted sussessfully.

[root@node1 shell]# 

Note

节点2上执行该脚本时,需要将脚本中的ORACLE_SID改为devdb2,或者根据实际情况修改为自己的SID

建路径、改权限

root用户执行事先配置的脚本2predir.sh,脚本具体内容请见附件1root用户在双节点上均需执行。

执行命令:sh 2predir.sh

脚本执行具体过程及输出,不再赘述。

修改/etc/security/limits.conf,配置oraclegrid用户的shell限制

root用户执行事先配置的脚本3prelimits.sh,脚本具体内容请见附件1root用户在双节点上均需执行。

执行命令:sh 3prelimits.sh

脚本执行具体过程及输出,不再赘述。

修改/etc/pam.d/login配置文件

root用户执行事先配置的脚本4prelogin.sh,脚本具体内容请见附件1root用户在双节点上均需执行。

执行命令:sh 4prelogin.sh

脚本执行具体过程及输出,不再赘述。

修改/etc/profile文件

root用户执行事先配置的脚本5preprofile.sh,脚本具体内容请见附件1root用户在双节点上均需执行。

执行命令:sh 5preprofile.sh

脚本执行具体过程及输出,不再赘述。

修改内核配置文件

root用户执行事先配置的脚本6presysctl.sh,脚本具体内容请见附件1root用户在双节点上均需执行。

执行命令:sh 6presysctl.sh

脚本执行具体过程及输出,不再赘述。

10 配置oracle用户SSH对等性

Node1:

[root@node1 ~]# su – oracle

node1-> hostname 

node1.oracleonlinux.cn

node1-> mkdir ~/.ssh

node1-> chmod 700 ~/.ssh

node1-> ls -al

total 44

drwx—— 4 oracle oinstall 4096 Dec 19 14:28 .

drwxr-xr-x 3 root   root     4096 Dec 19 14:18 ..

-rw——- 1 oracle oinstall   18 Dec 19 14:28 .bash_history

-rw-r–r– 1 oracle oinstall   33 Dec 19 14:18 .bash_logout

-rw-r–r– 1 oracle oinstall  544 Dec 19 14:18 .bash_profile

-rw-r–r– 1 oracle oinstall  124 Dec 19 14:18 .bashrc

-rw-r–r– 1 oracle oinstall  515 Dec 19 14:18 .emacs

drwxr-xr-x 4 oracle oinstall 4096 Dec 19 14:18 .mozilla

drwx—— 2 oracle oinstall 4096 Dec 19 14:28 .ssh

-rw-r–r– 1 oracle oinstall  658 Dec 19 14:18 .zshrc

node1-> ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/oracle/.ssh/id_rsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/oracle/.ssh/id_rsa.

Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.

The key fingerprint is:

fe:9a:d5:0a:c6:68:4e:c9:b2:af:7f:ad:a0:f9:07:c9 oracle@node1.oracleonlinux.cn

node1-> ssh-keygen -t dsa 

Generating public/private dsa key pair.

Enter file in which to save the key (/home/oracle/.ssh/id_dsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/oracle/.ssh/id_dsa.

Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.

The key fingerprint is:

4a:e4:b0:a5:d6:74:18:0b:39:c3:0f:cc:59:b2:23:18 oracle@node1.oracleonlinux.cn

node1-> 

Node2

[root@node2 ~]# su – oracle

node2-> hostname 

node2.oracleonlinux.cn

node2-> mkdir ~/.ssh

node2-> chmod 700 ~/.ssh

node2-> ls -al

total 72

drwx—— 4 oracle oinstall 4096 Dec 19 14:30 .

drwxr-xr-x 3 root   root     4096 Dec 19 14:26 ..

-rw-r–r– 1 oracle oinstall   33 Dec 19 14:26 .bash_logout

-rw-r–r– 1 oracle oinstall  544 Dec 19 14:26 .bash_profile

-rw-r–r– 1 oracle oinstall  124 Dec 19 14:26 .bashrc

-rw-r–r– 1 oracle oinstall  515 Dec 19 14:26 .emacs

drwxr-xr-x 4 oracle oinstall 4096 Dec 19 14:26 .mozilla

drwx—— 2 oracle oinstall 4096 Dec 19 14:30 .ssh

-rw-r–r– 1 oracle oinstall  658 Dec 19 14:26 .zshrc

node2-> ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/oracle/.ssh/id_rsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/oracle/.ssh/id_rsa.

Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.

The key fingerprint is:

40:21:4a:ef:c7:3d:1e:48:fa:5e:45:ce:57:60:df:6c oracle@node2.oracleonlinux.cn

node2-> ssh-keygen -t dsa

Generating public/private dsa key pair.

Enter file in which to save the key (/home/oracle/.ssh/id_dsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/oracle/.ssh/id_dsa.

Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.

The key fingerprint is:

50:4d:9c:dd:d0:92:ac:e6:d0:d1:e8:1d:1a:cb:b2:08 oracle@node2.oracleonlinux.cn

node2-> 

重新回到节点1

node1-> hostname 

node1.oracleonlinux.cn

node1-> cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

node1-> cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys

node1-> ssh node2 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

The authenticity of host ‘node2 (172.16.0.34)’ can’t be established.

RSA key fingerprint is 42:bc:46:40:87:81:b7:23:d1:6b:0a:b3:1c:04:cd:ed.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node2,172.16.0.34’ (RSA) to the list of known hosts.

oracle@node2’s password: 

node1-> ssh node2 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys 

oracle@node2’s password: 

node1-> scp ~/.ssh/authorized_keys node2:~/.ssh/authorized_keys 

oracle@node2’s password: 

authorized_keys                                                    100% 2060     2.0KB/s   00:00    

node1-> 

验证oracle用户的SSH对等性:

node1-> ssh node1 date

Thu Dec 19 16:39:31 CST 2013

node1-> ssh node2 date

Thu Dec 19 16:39:35 CST 2013

node1-> ssh node1-priv date

Thu Dec 19 16:39:45 CST 2013

node1-> ssh node2-priv date

Thu Dec 19 16:39:49 CST 2013

node1-> ssh node1.oracleonlinux.cn date

Thu Dec 19 16:40:16 CST 2013

node1-> ssh node2.oracleonlinux.cn date

Thu Dec 19 16:40:20 CST 2013

node1-> ssh node1-priv.oracleonlinux.cn date

Thu Dec 19 16:40:30 CST 2013

node1-> ssh node2-priv.oracleonlinux.cn date

Thu Dec 19 16:40:35 CST 2013

node1-> 

Note

2个节点上以oracle用户可以顺利执行上述命令,而不再提示需要oracle用户的密码,则说明配置成功!

致淘宝卖家及买家的两封信

致其他各家“代售”本人视频淘宝店主的一封感谢信!

各位亲:

你们知道吗?

本系列教程中涉及所有文字、图片、视频、音频、代码、脚本皆为本人原创内容~

不过,本人偷偷小声的告诉你们,这些内容的拥有、复制和使用权,归我,也归你们各位亲啦~

因为,正是有了你们的大力推广和销售,才能得以顺利高效的将本人所学的一丁点儿Oracle数据库知识可以精准的传递给更多更多需要学习Oracle数据库知识的网友们撒~

同时,请允许我替那些已经或者将要通过本系列视频收获Oracle数据库知识网友们,向你们各位日夜坚守在电脑前的各位亲们,说声:“谢谢!”。

各 位亲,本人欢迎你们继续对本系列视频教程使用各种无上限无底限想得到的用的上的用的着的派的上用场的方式去推广和持续捧场,这样一来捏,你们各位亲或许能 挣点儿豆浆油条稀饭钱儿,二来捏更为重要的是,你们可以继续将我的知识传递给更多更多各种迫切需要学习奋斗充电、为求知为求职、为加薪为跳槽的各种日夜奋 战在IT一线的同行们!!!

好了,不跟你们诸位亲多说了,bye…..

 

致各位淘宝买家的一封信!

更亲的各位亲:

你们还不知道吧?

虽然上述的那些亲们曾经不止一次再来一次的打击我幼小的心灵,但是,我不依然活的潇洒过的自在?懒得跟那些“臭”亲们计较,哼…

而且呢,我也知道之前有诸多诸多的你们是从他们那些“臭”亲那里拍下的视频宝贝,然后通过视频内容找到我的网站[http://www.oracleonlinux.cn/]、我的QQ[155166225]、我的Rock Orcle QQ群[280889316]、我的邮箱[3dian14@gmail.com],然后各种视频疑问和问题QQ我,各种脚本需求邮件我,试问,我曾经拒绝过吗?曾经某一段时间,我每天需要回复你们的邮件就有几十封,QQ上提问的就更不必说了,苍天大地啊,偶也Hold不住呀…

    当然呢,更应该感谢的就是你们各位更亲的亲啦,有了你们一如既往的支持和鼓励,才能激发我创作更多更高质量的视频。

    好了,也不跟你们各位亲多说啦,你们要记得哦,近期本店将隆重推出多套Oracle数据库相关视频作品,包括Oracle 11gR2 OCP认证系列Oracle 10g RAC 升级至11gRACOracle性能优化等等系列;还有哦,这些视频将是我扛鼎制作,本店是全网唯一渠道,其他家没有滴哦~

    点击可查看原文链接,或者这个链接进入淘宝店铺

11gR2修改主机名导致CRS-0184以及CRS-4000的错误

crs_stat_error

我们通常都说,在部署Oracle数据库服务器前,要规划好主机名、IP地址等基础信息,一经确定,尤其是部署好Oracle数据库之后,就不要轻易修改主机名或者是IP地址等。而且我们也都知道这个理儿,但可是,可但是,在实际工作当中,你难免不会遇到这种情况。

除了自己前不久曾遭遇到的一则,在Windows Server 2008 R2 X64上跑的一套10.2.0.5.0配置有ASM单实例物理备库因修改主机名的故障。而今又遇到一则类似的故障场景:

一 操作系统版本:CentOS release 5.6 (Final) X86_64平台

二 Oracle版本:Oracle 11gR2 11.2.0.1.0 64位配置ASM的单实例数据库

三 故障现象:修改主机名并重启主机后,导致数据库不可用,准确的说是grid软件的CRS进程都不能启动。如下:

1 检查服务状态:

[shell]
wxwl_iop-> crs_stat -t
CRS-0184: Cannot communicate with the CRS daemon.

wxwl_iop-> [/shell]

2 发现ohasd守护进程都不存在:

[shell]
wxwl_iop-> ps -ef|grep has
root 4869 1 0 Nov14 ? 00:00:02 /bin/sh /etc/init.d/init.ohasd run
grid 27544 26907 0 09:58 pts/2 00:00:00 grep has
wxwl_iop->[/shell]

3 检查Oracle restart是否配置以及尝试手工启动Oracle Restart均报错:

[shell]
wxwl_iop-> crsctl config has
CRS-4014: Oracle High Availability Services autostart was not defined.
Failure at scls_scr_create with code 1
Internal Error Information:
Category: -1
Operation: has_ha_privs
Location: scrcreate5
Other: need ha priv
System Dependent Information: 0

CRS-4000: Command Config failed, or completed with errors.
wxwl_iop-> crsctl start has
Failure at scls_scr_create with code 1
Internal Error Information:
Category: -1
Operation: has_ha_privs
Location: scrcreate5
Other: need ha priv
System Dependent Information: 0

CRS-4000: Command Start failed, or completed with errors.
wxwl_iop-> [/shell]

4 在/etc/oracle/scls_scr路径下,看到只有之前的旧主机名下的Oracle Restart的配置信息,并没有关于新主机名的Oracle Restart的配置信息

[shell]
[root@wxwl_iop scls_scr]# ll
total 4
drwxr-xr-x 4 root oinstall 4096 Nov 7 16:42 localhost
[root@wxwl_iop scls_scr]# pwd
/etc/oracle/scls_scr
[/shell]

四 故障原因:人为修改了数据库服务器主机名,并重启主机,导致Oracle Restart启动报错,进而ASM实例,监听、磁盘组以及数据库实例均无法正常启动。

五 解决步骤:

1 root用户强制删除CRS相关的配置信息:

[shell]
[root@wxwl_iop scls_scr]# /u01/app/11.2.0/grid/crs/install/rootcrs.pl -deconfig -force
2013-11-15 10:00:51: Parsing the host name
2013-11-15 10:00:51: Checking for super user privileges
2013-11-15 10:00:51: User has super user privileges
Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params
Usage: srvctl <command> <object> [<options>]
commands: enable|disable|start|stop|status|add|remove|modify|getenv|setenv|unsetenv|config
objects: database|service|asm|diskgroup|listener|home|ons|eons
For detailed help on each command and object and its options use:
srvctl <command> -h or
srvctl <command> <object> -h
PRKO-2012 : nodeapps object is not supported in Oracle Restart
ADVM/ACFS is not supported on centos-release-5-6.el5.centos.1

ACFS-9201: Not Supported
CRS-4013: This command is not supported in a single-node configuration.
CRS-4000: Command Stop failed, or completed with errors.
You must kill crs processes or reboot the system to properly
cleanup the processes started by Oracle clusterware
Use of uninitialized value in chdir at /usr/lib/perl5/5.8.8/File/Find.pm line 751.
Use of chdir(”) or chdir(undef) as chdir() is deprecated at /usr/lib/perl5/5.8.8/File/Find.pm line 751.
error: package cvuqdisk is not installed
Successfully deconfigured Oracle clusterware stack on this node
[root@wxwl_iop scls_scr]# [/shell]

2 root用户重新配置Oracle Restart:

[shell]
[root@wxwl_iop scls_scr]# /u01/app/11.2.0/grid/crs/install/roothas.pl
2013-11-15 10:02:36: Checking for super user privileges
2013-11-15 10:02:36: User has super user privileges
2013-11-15 10:02:36: Parsing the host name
Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params
LOCAL ADD MODE
Creating OCR keys for user ‘grid’, privgrp ‘oinstall’..
Operation successful.
CRS-4664: Node wxwl_iop successfully pinned.
Adding daemon to inittab
CRS-4123: Oracle High Availability Services has been started.
ohasd is starting
ADVM/ACFS is not supported on centos-release-5-6.el5.centos.1

wxwl_iop 2013/11/15 10:02:49 /u01/app/11.2.0/grid/cdata/wxwl_iop/backup_20131115_100249.olr
Successfully configured Oracle Grid Infrastructure for a Standalone Server
[root@wxwl_iop scls_scr]#[/shell]

重新配置Oracle Restart之后,在/etc/oracle/scls_scr路径下,看到之前的旧主机名下的Oracle Restart的配置信息自动消除,而出现新的关于新主机名的Oracle Restart的配置信息。

[shell]
[root@wxwl_iop scls_scr]# ll
total 4
drwxr-xr-x 4 root oinstall 4096 Nov 15 10:02 wxwl_iop
[root@wxwl_iop scls_scr]#
[/shell]

且此时,grid用户可顺利通过执行 crs_stat -t查看服务状态:

[shell]
wxwl_iop-> crs_stat -t
Name Type Target State Host
————————————————————
ora.cssd ora.cssd.type OFFLINE OFFLINE
ora.diskmon ora….on.type OFFLINE OFFLINE
wxwl_iop-> [/shell]

3 通过srvctl命令手工添加Listener、ASM、oracle instance到Oracle Restart管理

grid用户添加Listener、ASM服务到Oracle Restart

[shell]
wxwl_iop-> srvctl add listener
wxwl_iop-> crs_stat -t
Name Type Target State Host
————————————————————
ora….ER.lsnr ora….er.type OFFLINE OFFLINE
ora.cssd ora.cssd.type OFFLINE OFFLINE
ora.diskmon ora….on.type OFFLINE OFFLINE
wxwl_iop-> srvctl add asm -l listener -d data,fra
wxwl_iop-> crs_stat -t
Name Type Target State Host
————————————————————
ora….ER.lsnr ora….er.type OFFLINE OFFLINE
ora.asm ora.asm.type OFFLINE OFFLINE
ora.cssd ora.cssd.type OFFLINE OFFLINE
ora.diskmon ora….on.type OFFLINE OFFLINE
wxwl_iop-> [/shell]

oracle用户添加数据库到Oracle Restart
grid 用户添加出错:

[shell]
wxwl_iop-> srvctl add database -d iopdb -o /u01/app/oracle/product/11.2.0/db_1
PRCD-1025 : Failed to create database iopdb
PRKH-1014 : Current user grid is not the same as oracle owner oracle of oracle home /u01/app/oracle/product/11.2.0/db_1.
wxwl_iop->
[/shell]

需要以oracle用户添加:

[shell]
wxwl_iop-> srvctl add database -d normaldb -o /u01/app/oracle/product/11.2.0/db_1 -n normaldb -a ‘data,fra’
wxwl_iop->
[/shell]

最后,对于配置了Oracle Restart环境下的数据库,分别以grid用户通过srvctl命令来启动listener、ASM实例,以oracle用户通过srvctl命令来启动数据库。

启示:对于已经配置好Oracle数据库的服务器,真的不要轻易修改主机名或者IP地址,尤其是RAC环境或者是11gR2开始的配置有Oracle Restart的standalone Server环境。当然,在安装和配置数据库之前,务必要做好充足的前期规划。当然,如果非要修改的话,也要配合DBA一起来重新配置。

附:关于文章提及为什么要在/etc/oracle/scls_scr路径下,查看是否存在关于主机名相关的Oracle Restart配置信息,将在下一篇中分享O(∩_∩)O~

Grid软件安装过程中orainstRoot.sh和root.sh脚本到底做了什么?

在Linux平台上,从Oracle 11gR2开始,不论是单实例的库,还是RAC库,如果需要用到ASM时,通常都需要单独安装Grid Infrastructure软件。而在Linux平台上以图形界面【OUI Oracle Universal Installer】安装Oracle 11gR2 Grid软件过程中,会提示以root用户执行orainstRoot.sh和root.sh脚本【如下图一:单实例安装,图二:RAC安装】。

Linux平台安装单实例时,grid软件需要执行的脚本

图一:Linux平台安装单实例时,grid软件需要执行的脚本

Linux平台安装RAC时,grid软件需要执行的脚本

图二:Linux平台安装RAC时,grid软件需要执行的脚本

那么这两个脚本分别做了什么,有什么作用呢?本文简单记录:

一 /u01/app/oraInventory/orainstRoot.sh脚本的作用

1 添加grid用户及oinstall组对Oracle Central Inventory 目录的读写权限;

Oracle Central Inventory 目录默认情况下,位于$ORACLE_BASE的上一级目录下,如下图三:

Oracle Central Inventory

图三:Oracle Central Inventory的路径

2 删除其它用户组对该目录的读、写、执行权限;

[shell]11gOCM-> pwd
/u01/app
11gOCM> ls
total 20
drwxrwxr-x. 3 grid oinstall 4096 Oct 28 10:38 11.2.0
drwxr-xr-x 2 grid oinstall 4096 Oct 30 10:20 acfs
drwxrwxr-x. 8 grid oinstall 4096 Oct 28 10:38 grid
drwxrwxr-x. 8 oracle oinstall 4096 Nov 5 10:57 oracle
drwxrwx—. 6 grid oinstall 4096 Oct 10 11:09 oraInventory
11gOCM->[/shell]

3 创建/etc/oraInst.loc文件。

11gOCM->
cat /etc/oraInst.loc
inventory_loc=/u01/app/oraInventory
inst_group=oinstall
11gOCM->

二 /u01/app/11.2.0/grid/root.sh脚本的作用

1 cp grid用户的$ORACLE_HOME/bin下的oraenv、dbhome、coraenv可执行程序到/usr/local/bin路径下;

11gOCM-> pwd
/u01/app/11.2.0/grid/bin
11gOCM-> ll oraenv dbhome coraenv 
-rwxr-xr-x. 1 grid oinstall 5778 Jan  1  2000 coraenv
-rwxr-xr-x. 1 grid oinstall 2415 Jan  1  2000 dbhome
-rwxr-xr-x. 1 grid oinstall 6183 Jan  1  2000 oraenv
11gOCM-> ll /usr/local/bin/
total 232
-rwxr-xr-x. 1 grid root   5778 Oct 10 10:54 coraenv
-rwxr-xr-x. 1 grid root   2415 Oct 10 10:54 dbhome
-rwxr-xr-x. 1 grid root   6183 Oct 10 10:54 oraenv
-rwxr-xr-x  1 root root 214001 Oct 10 16:39 rlwrap
11gOCM->

2 创建/etc/oratab文件;

 
11gOCM-> cat /etc/oratab 
#Backup file is  /u01/app/11.2.0/grid/srvm/admin/oratab.bak.11gocm line added by Agent
#

# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by either Database Configuration Assistant while creating
# a database or ASM Configuration Assistant while creating ASM instance.

# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
+ASM:/u01/app/11.2.0/grid:N
orcl:/u01/app/oracle/product/11.2.0/db_1:N              # line added by Agent
11gOCM->

3 创建grid用户的OCR keys文件;

4 启动ohasd守护进程,并且将ohasd守护进程的启动文件写入到/etc/inittab文件中,以便于ohasd守护进程随着操作系统的启动而启动。如果是Oracle Enterprise Linux 6及以上版本的操作系统的话,则将该配置信息写入到/etc/init/oracle-ohasd.conf的独立配置文件中。

11gOCM-> cat /etc/init/oracle-ohasd.conf 
# Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. 
#
# Oracle OHASD startup

start on runlevel [35]
stop  on runlevel [!35]
respawn
exec /etc/init.d/init.ohasd run >/dev/null 2>&1

这是Oracle Enterprise Linux 6及以上版本的操作系统上的变化,在以前版本的操作系统下,由/etc/inittab文件来控制的条目均转移到/etc/init下单个文件来控制。

Oracle Grid Infrastructure包含哪些组件及其新特性?

Oracle 从11gR2开始,推出Grid Infrastructure[我个人习惯称之为Grid软件],那么Grid Infrastructure究竟有哪些优势,又包含哪些组件呢

首先,Grid Infrastructure包含下述组件

ASM:Automatic Storage Management;

ACFS:ASM Cluster File System;

ACFS snapshot;

Oracle Clusterware;

Oracle Restart。

其次,Grid Infrastructure 又有什么新特性呢?

探其优势,简单总结,从其包含的组件可知,如果在RAC环境下,无需单独安装clusterware软件,只需安装grid即可。如果在单实例环境下,数据库的存储如果想用ASM的话,那么就必须得先安装grid软件,并创建ASM磁盘组之后,方可安装oracle软件,在创建数据库的时候,存储才可以选择放在ASM磁盘组上。

另:对于非RAC架构下的Standalone 数据库,其Oracle Restart可以接管包括数据库服务、数据库实例、ASM实例、ASM磁盘组、数据库监听等组件的故障处理。举例来说,假设数据库在运行过程中,如果监听进程意外终止、或者数据库意外crash掉,那么Oracle Restart将接管并重启这些服务。

最后,11gR2的ASM同之前的ASM相比,又有什么增强呢?

如下图:

grid_asm

从上,看到在11gR2之前[包含11gR1及10g],ASM位于操作系统层面之上,ASM为数据库访问存储设备提供驱动,然后为上层的数据库提供存储,最后数据库供最上层的应用系统访问。

而从11gR2开始,看到ASM依然位于OS层面之上,和ASM同层的多出来个ADVM[ASM Dynamic Volume Manager]。往上,位于同层的除了database之外,还有ACFS[ASM Cluster File System]和ASM为第三方文件系统提供支持。

补充,简单描述ASM disk,ASM diskgroup,ADVM,ACFS的关系?

一块儿物理硬盘或物理硬盘的一个分区或存储设备上的LUN或一个LVM均可以被创建成一块ASM disk,一块或多块儿ASM磁盘在逻辑上可以被用来创建成一个ASM磁盘组。

有了ASM diskgroup之后,可以通过图形界面工具[ASMCA、OEM]或者命令行工具[ASMCMD、SQL*PLUS]在磁盘组上创建出一个或多个ASM Dynamic Volume 。ADVM上的卷设备文件对于操作系统而言被作为块设备来识别,其位于/dev/asm/<volume name>-nnn。

使用mkfs命令就可以在ADVM上创建ACFS类型的文件系统了[命令如:mkfs -t acfs -n advm-volume-name /dev/asm/<volume name>-nnn],最后类似于在操作系统上挂载其它设备一样,可以将/dev/asm/<volume name>-nnn直接挂在到操作系统上使用了。

索引扫描路径之3:Index Skip Scan

Index_Skip_Scan

在前面的两篇中,分别描述了Index Unique ScanIndex Range Scan,今天来描述Index Skip Scan。

 所谓的Index Skip Scan就是指,查询的WHERE条件中“SKIP”【跳过,没带上】了复合索引的前导列,只是指定了复合索引的其它列,这样CBO选择Index Skip Scan的路径来访问数据的方式。

如果复合索引的前导列唯一值越少(选择性低),非前导列索引唯一值越多(选择性高),则Index Skip Scan的性能越优。

事实上,在处理的过程中,Oracle将该复合索引上分为若干个logical subindexes(逻辑子索引),逻辑子索引的具体个数取决于前导列的唯一值值个数,即前导列有几个重复值就分为几个逻辑子索引。

Index Skip Scan适用的场景:

1 Index一定是一个复合索引(索引类型可以是UNIQUE的唯一索引,也可以是NONUIQUE的非唯一索引);
2 且复合索引的前导列重复值很多(即唯一值少),非前导列的重复值很少(唯一值多);
3 WHERE限制条件中,并没有带上该符合索引的前导列,仅仅是使用非前导列来过滤数据;

测试与验证:

1 创建测试表:

SQL> conn hr/hr
Connected.
SQL> create table skip_t as select object_id,object_name,object_type from all_objects;

Table created.

SQL> select count(*) from skip_t;

  COUNT(*)
----------
     55683

SQL> select count(distinct object_type) from skip_t;

COUNT(DISTINCTOBJECT_TYPE)
--------------------------
                        25

SQL> select count(distinct object_id) from skip_t;

COUNT(DISTINCTOBJECT_ID)
------------------------
                   55683

SQL> select count(distinct object_name) from skip_t;

COUNT(DISTINCTOBJECT_NAME)
--------------------------
                     30902

SQL>

从上,看到skip_t表数据情况:有55683条记录,且OBJECT_ID字段均唯一,无重复值。OBJECT_TYPE唯一值只有25个。
2 接下来,在OBJECT_TYPE和OBJECT_ID字段上创建复合索引,并收集统计信息:

SQL> create index idx_skip_t on skip_t(object_type,object_id);

Index created.

SQL> exec dbms_stats.gather_table_stats(ownname=>user,tabname=>'skip_t',cascade=>true);

PL/SQL procedure successfully completed.

SQL>

3 “Skip”掉复合索引前导列的情况,即让CBO按照预期的选择Index Skip Scan的路径来访问数据:

SQL> set autotrace trace
SQL> select object_type,object_id from skip_t where object_id=30000;

Execution Plan
----------------------------------------------------------
Plan hash value: 2119292092

-------------------------------------------------------------------------------
| Id  | Operation        | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |            |     1 |    15 |    26   (0)| 00:00:01 |
|*  1 |  INDEX SKIP SCAN | IDX_SKIP_T |     1 |    15 |    26   (0)| 00:00:01 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("OBJECT_ID"=30000)
       filter("OBJECT_ID"=30000)

Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
         14  consistent gets
          0  physical reads
          0  redo size
        611  bytes sent via SQL*Net to client
        524  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> select object_type,object_name from skip_t where object_id=30000;

Execution Plan
----------------------------------------------------------
Plan hash value: 1237951313

------------------------------------------------------------------------------------------
| Id  | Operation                   | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |            |     1 |    40 |    27   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| SKIP_T     |     1 |    40 |    27   (0)| 00:00:01 |
|*  2 |   INDEX SKIP SCAN           | IDX_SKIP_T |     1 |       |    26   (0)| 00:00:01 |
------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("OBJECT_ID"=30000)
       filter("OBJECT_ID"=30000)

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         15  consistent gets
          0  physical reads
          0  redo size
        640  bytes sent via SQL*Net to client
        524  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL>

4 使用索引前导列的情况:

SQL> select object_type,object_id from skip_t where object_type='TABLE';

136 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 3840590361

-------------------------------------------------------------------------------
| Id  | Operation        | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |            |  2227 | 33405 |     9   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_SKIP_T |  2227 | 33405 |     9   (0)| 00:00:01 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("OBJECT_TYPE"='TABLE')

Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
         12  consistent gets
          0  physical reads
          0  redo size
       3592  bytes sent via SQL*Net to client
        623  bytes received via SQL*Net from client
         11  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        136  rows processed

SQL> select object_type,object_name from skip_t where object_type='TABLE';

136 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 1483414757

------------------------------------------------------------------------------------------
| Id  | Operation                   | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |            |  2227 | 80172 |    43   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| SKIP_T     |  2227 | 80172 |    43   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IDX_SKIP_T |  2227 |       |     9   (0)| 00:00:01 |
------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("OBJECT_TYPE"='TABLE')

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         40  consistent gets
          0  physical reads
          0  redo size
       6671  bytes sent via SQL*Net to client
        623  bytes received via SQL*Net from client
         11  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        136  rows processed

SQL>