一步一步在Linux上安装Oracle 11gR2 RAC (4)

2.1配置ASM磁盘

在上一步2.13节中,我们已经对RAC双节点已经配置好了共享磁盘,接下来需要将这些共享磁盘格式化、然后用asmlib将其配置为ASM磁盘,用于将来存放OCRVoting Disk和数据库用。

注意:只需在其中1个节点上格式化就可以,接下来我们选择在node1节点上格式化。

这里我们以asmlib软件来创建ASM磁盘,而不使用raw disk,而且从11gR2开始,OUI的图形界面已经不再支持raw disk

2.14.1 格式化共享磁盘

① 以root用户分别在两个节点上执行fdisk命令,查看现有硬盘分区信息:

node1

[root@node1 ~]# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1        2163    17374266   83  Linux

/dev/sda2            2164        2609     3582495   82  Linux swap / Solaris


Disk /dev/sdb: 524 MB, 524288000 bytes

64 heads, 32 sectors/track, 500 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes


Disk /dev/sdb doesn't contain a valid partition table


Disk /dev/sdc: 524 MB, 524288000 bytes

64 heads, 32 sectors/track, 500 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes


Disk /dev/sdc doesn't contain a valid partition table


Disk /dev/sdd: 3221 MB, 3221225472 bytes

255 heads, 63 sectors/track, 391 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sdd doesn't contain a valid partition table


Disk /dev/sde: 3221 MB, 3221225472 bytes

255 heads, 63 sectors/track, 391 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sde doesn't contain a valid partition table

[root@node1 ~]# 

node2

[root@node2 ~]# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1        2163    17374266   83  Linux

/dev/sda2            2164        2609     3582495   82  Linux swap / Solaris


Disk /dev/sdb: 524 MB, 524288000 bytes

64 heads, 32 sectors/track, 500 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes


Disk /dev/sdb doesn't contain a valid partition table


Disk /dev/sdc: 524 MB, 524288000 bytes

64 heads, 32 sectors/track, 500 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes


Disk /dev/sdc doesn't contain a valid partition table


Disk /dev/sdd: 3221 MB, 3221225472 bytes

255 heads, 63 sectors/track, 391 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sdd doesn't contain a valid partition table


Disk /dev/sde: 3221 MB, 3221225472 bytes

255 heads, 63 sectors/track, 391 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sde doesn't contain a valid partition table

[root@node2 ~]# 

从上,我们可以看到目前两个节点上的分区信息一致:其中/dev/sda是用于存放操作系统的,/dev/sdb/dev/sdc/dev/sdd/dev/sde4块盘都没有分区信息,这是我们在上一步2.13节中配置的4块共享磁盘。

② root用户在node1上格式化/dev/sdb/dev/sdc/dev/sdd/dev/sde4块盘

[root@node1 ~]# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable.


Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)


Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-500, default 1): 

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-500, default 500): 

Using default value 500


Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.

[root@node1 ~]# 

说明:fdisk /dev/sdb表示要对/dev/sdb磁盘进行格式化,其中,输入的命令分别表示:

n表示新建1个分区;

p表示分区类型选择为primary partition 主分区;

1表示分区编号从1开始;

起始、终止柱面选择默认值,即1500

w表示将新建的分区信息写入硬盘分区表。

 

③ 重复上述步骤②,以root用户在node1上分别格式化其余3块磁盘:

④ 格式化完毕之后,在node1node2节点上分别看到下述信息:

node1

[root@node1 ~]# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1        2163    17374266   83  Linux

/dev/sda2            2164        2609     3582495   82  Linux swap / Solaris


Disk /dev/sdb: 524 MB, 524288000 bytes

64 heads, 32 sectors/track, 500 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         500      511984   83  Linux


Disk /dev/sdc: 524 MB, 524288000 bytes

64 heads, 32 sectors/track, 500 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1         500      511984   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

[root@node1 ~]#  

node2

[root@node2 ~]# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1        2163    17374266   83  Linux

/dev/sda2            2164        2609     3582495   82  Linux swap / Solaris


Disk /dev/sdb: 524 MB, 524288000 bytes

64 heads, 32 sectors/track, 500 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         500      511984   83  Linux


Disk /dev/sdc: 524 MB, 524288000 bytes

64 heads, 32 sectors/track, 500 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1         500      511984   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

[root@node2 ~]#  

至此,格式化共享磁盘完毕。

    

2.14.2 在两个节点上安装ASM RPM软件包

在安装ASM软件包时,要注意选择的软件包要与操作系统平台、内核版本选择一致。ASM软件包可以到Oracle官网下载。

node1安装:

[root@node1 ~]# rpm -qa|grep asm

用上述命令,并未发现节点1上安装任何asm软件包。

[root@node1 ~]# cd asm_rpm/

[root@node1 asm_rpm]# ll

total 136

-rw-r–r– 1 root root 25977 Apr 26 11:19 oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm

-rw-r–r– 1 root root 14176 Apr 26 11:19 oracleasmlib-2.0.4-1.el5.x86_64.rpm

-rw-r–r– 1 root root 89027 Apr 26 11:19 oracleasm-support-2.1.3-1.el5.x86_64.rpm

[root@node1 asm_rpm]# rpm -ivh oracleasm-support-2.1.3-1.el5.x86_64.rpm 

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

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

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

[root@node1 asm_rpm]# 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]# rpm -ivh oracleasmlib-2.0.4-1.el5.x86_64.rpm 

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

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

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

[root@node1 asm_rpm]# rpm -qa|grep asm

oracleasm-2.6.18-194.el5-2.0.5-1.el5

oracleasm-support-2.1.3-1.el5

oracleasmlib-2.0.4-1.el5

[root@node1 asm_rpm]# 

node2 安装:

[root@node2 asm_rpm]# ll

total 136

-rw-r–r– 1 root root 25977 Apr 26 11:20 oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm

-rw-r–r– 1 root root 14176 Apr 26 11:20 oracleasmlib-2.0.4-1.el5.x86_64.rpm

-rw-r–r– 1 root root 89027 Apr 26 11:20 oracleasm-support-2.1.3-1.el5.x86_64.rpm

[root@node2 asm_rpm]# rpm -qa|grep asm

[root@node2 asm_rpm]# rpm -ivh oracleasm-support-2.1.3-1.el5.x86_64.rpm 

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

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

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

[root@node2 asm_rpm]# 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@node2 asm_rpm]# rpm -ivh oracleasmlib-2.0.4-1.el5.x86_64.rpm 

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

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

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

[root@node2 asm_rpm]# rpm -qa|grep asm

oracleasmlib-2.0.4-1.el5

oracleasm-support-2.1.3-1.el5

oracleasm-2.6.18-194.el5-2.0.5-1.el5

[root@node2 asm_rpm]# 

说明:安装上述3ASM RPM软件包时要先安装oracleasm-support-2.1.3-1.el5软件包,其次安装oracleasm-2.6.18-194.el5-2.0.5-1.el5软件包,最后安装oracleasmlib-2.0.4-1.el5软件包。

安装完毕后,执行 rpm -qa|grep asm确认是否安装成功。

2.14.3 配置ASM driver服务

node1上以root用户进行配置。在安装完上述步骤2.14.2节中的3ASM RPM软件包之后,可以通过执行/usr/sbin/oracleasm命令来进行配置,也可以通过执行/etc/init.d/oracleasm命令来进行配置,后者命令是Oracle 10g中进行ASM配置的命令,Oracle推荐执行前者命令,不过后者命令保留使用。

① 查看ASM服务状态:

[root@node1 ~]# /usr/sbin/oracleasm status

Checking if ASM is loaded: no

Checking if /dev/oracleasm is mounted: no

[root@node1 ~]# 

看到,默认情况下ASM服务并未开启。具体命令和相关参数可以直接执行下述命令来获取:

[root@node1 ~]# /usr/sbin/oracleasm -h

Usage: oracleasm [–exec-path=<exec_path>] <command> [ <args> ]

       oracleasm –exec-path

       oracleasm -h

       oracleasm -V


The basic oracleasm commands are:

    configure        Configure the Oracle Linux ASMLib driver

    init             Load and initialize the ASMLib driver

    exit             Stop the ASMLib driver

    scandisks        Scan the system for Oracle ASMLib disks

    status           Display the status of the Oracle ASMLib driver

    listdisks        List known Oracle ASMLib disks

    querydisk        Determine if a disk belongs to Oracle ASMlib

    createdisk       Allocate a device for Oracle ASMLib use

    deletedisk       Return a device to the operating system

    renamedisk       Change the label of an Oracle ASMlib disk

    update-driver    Download the latest ASMLib driver

[root@node1 ~]#

② 配置ASM服务:

[root@node1 ~]# /usr/sbin/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@node1 ~]# /usr/sbin/oracleasm status

Checking if ASM is loaded: no

Checking if /dev/oracleasm is mounted: no

[root@node1 ~]# /usr/sbin/oracleasm init

Loading module "oracleasm": oracleasm

Mounting ASMlib driver filesystem: /dev/oracleasm

[root@node1 ~]# /usr/sbin/oracleasm configure

ORACLEASM_ENABLED=true

ORACLEASM_UID=grid

ORACLEASM_GID=asmadmin

ORACLEASM_SCANBOOT=true

ORACLEASM_SCANORDER=""

ORACLEASM_SCANEXCLUDE=""

[root@node1 ~]# 

说明/usr/sbin/oracleasm configure -i命令进行配置时,用户配置为grid,组为asmadmin,启动ASM library driver驱动服务,并且将其配置为随着操作系统的启动而自动启动。

配置完成后,记得执行 /usr/sbin/oracleasm init命令来加载oracleasm内核模块。

③ 在node2上执行上述步骤②,完成ASM服务配置。

2.14.4 配置ASM磁盘

我们安装ASM RPM软件包,配置ASM 驱动服务的最终目的是要创建ASM磁盘,为将来安装grid软件、创建Oracle数据库提供存储。

说明:只需在一个节点上创建ASM磁盘即可!创建完之后,在其它节点上执行/usr/sbin/oracleasm scandisks之后,就可看到ASM磁盘。

接下来,开始创建ASM磁盘:

① 执行/usr/sbin/oracleasm createdisk来创建ASM磁盘

[root@node1 ~]# /usr/sbin/oracleasm listdisks

[root@node1 ~]# /usr/sbin/oracleasm createdisk -h

Usage: oracleasm-createdisk [-l <manager>] [-v] <label> <device>

[root@node1 ~]# /usr/sbin/oracleasm createdisk VOL1 /dev/sdb1

Writing disk header: done

Instantiating disk: done

[root@node1 ~]# /usr/sbin/oracleasm createdisk VOL2 /dev/sdc1

Writing disk header: done

Instantiating disk: done

[root@node1 ~]# /usr/sbin/oracleasm createdisk VOL3 /dev/sdd1

Writing disk header: done

Instantiating disk: done

[root@node1 ~]# /usr/sbin/oracleasm createdisk VOL4 /dev/sde1

Writing disk header: done

Instantiating disk: done

[root@node1 ~]# /usr/sbin/oracleasm listdisks

VOL1

VOL2

VOL3

VOL4

[root@node1 ~]# 

    从上看到,创建出来4ASM磁盘。此时,node2上还看不到刚创建的ASM磁盘。

② node2 执行/usr/sbin/oracleasm scandisks扫描磁盘

[root@node2 ~]# /usr/sbin/oracleasm listdisks

[root@node2 ~]# /usr/sbin/oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks…

Scanning system for ASM disks…

Instantiating disk "VOL1"

Instantiating disk "VOL2"

Instantiating disk "VOL3"

Instantiating disk "VOL4"

[root@node2 ~]# /usr/sbin/oracleasm listdisks

VOL1

VOL2

VOL3

VOL4

[root@node2 ~]# 

③ 如何确定ASM磁盘同物理磁盘之间的对应关系?

[root@node1 ~]# /usr/sbin/oracleasm querydisk /dev/sd*

Device "/dev/sda" is not marked as an ASM disk

Device "/dev/sda1" is not marked as an ASM disk

Device "/dev/sda2" is not marked as an ASM disk

Device "/dev/sdb" is not marked as an ASM disk

Device "/dev/sdb1" is marked an ASM disk with the label "VOL1"

Device "/dev/sdc" is not marked as an ASM disk

Device "/dev/sdc1" is marked an ASM disk with the label "VOL2"

Device "/dev/sdd" is not marked as an ASM disk

Device "/dev/sdd1" is marked an ASM disk with the label "VOL3"

Device "/dev/sde" is not marked as an ASM disk

Device "/dev/sde1" is marked an ASM disk with the label "VOL4"

[root@node1 ~]#

至此,ASM磁盘准备工作已经完成!

2.15 解压安装介质

在获取开篇1.2节中提到的安装介质如下:

[root@node1 ~]# ls -l

total 3401724

-rw——- 1 root root       1376 Apr 20 14:05 anaconda-ks.cfg

drwxr-xr-x 2 root root       4096 Apr 26 11:19 asm_rpm

-rw-r–r– 1 root root      51217 Apr 20 14:05 install.log

-rw-r–r– 1 root root       4077 Apr 20 14:05 install.log.syslog

-rw-r–r– 1 root root 1358454646 Apr 20 16:22 p10404530_112030_Linux-x86-64_1of7.zip

-rw-r–r– 1 root root 1142195302 Apr 20 16:29 p10404530_112030_Linux-x86-64_2of7.zip

-rw-r–r– 1 root root  979195792 Apr 20 17:07 p10404530_112030_Linux-x86-64_3of7.zip

drwxr-xr-x 2 root root       4096 Apr 24 10:17 shell

[root@node1 ~]# 

其中:

p10404530_112030_Linux-x86-64_1of7.zip

p10404530_112030_Linux-x86-64_2of7.zip

Oracle软件的安装介质。

p10404530_112030_Linux-x86-64_3of7.zipGRID软件的安装介质。

注意:这里的3个软件包均是来源于MetaLink网站,其版本均是目前Oracle 11g的最新版本,11.2.0.3.0。如果没有MetaLink账号的话,也可以从oracle官方网站免费获取11.2.0.1.0的版本软件来进行安装和配置。

我们通过下述命令来解压上述3个压缩软件包:

[root@node1 ~]# unzip p10404530_112030_Linux-x86-64_1of7.zip 

[root@node1 ~]# unzip p10404530_112030_Linux-x86-64_2of7.zip

[root@node1 ~]# unzip p10404530_112030_Linux-x86-64_3of7.zip  

解压之后,信息如下:

[root@node1 ~]# ls -l

total 3401724

-rw——- 1 root root       1376 Apr 20 14:05 anaconda-ks.cfg

drwxr-xr-x 2 root root       4096 Apr 26 11:19 asm_rpm

drwxr-xr-x 8 root root       4096 Sep 22  2011 database

drwxr-xr-x 8 root root       4096 Sep 22  2011 grid

-rw-r–r– 1 root root      51217 Apr 20 14:05 install.log

-rw-r–r– 1 root root       4077 Apr 20 14:05 install.log.syslog

-rw-r–r– 1 root root 1358454646 Apr 20 16:22 p10404530_112030_Linux-x86-64_1of7.zip

-rw-r–r– 1 root root 1142195302 Apr 20 16:29 p10404530_112030_Linux-x86-64_2of7.zip

-rw-r–r– 1 root root  979195792 Apr 20 17:07 p10404530_112030_Linux-x86-64_3of7.zip

drwxr-xr-x 2 root root       4096 Apr 24 10:17 shell

[root@node1 ~]# du -sh database/

2.5G    database/

[root@node1 ~]# du -sh grid/

1.1G    grid/

[root@node1 ~]# 

可以看到,数据库的安装文件2.5G大小,GRID软件的安装1.1GB

为便于将来安装软件,分别将其moveoracle用户和grid用户的家目录:

[root@node1 ~]# mv database/ /home/oracle/

[root@node1 ~]# mv grid/ /home/grid/

[root@node1 ~]# 

2.16 安装前预检查配置信息

在安装 GRID之前,建议先利用CVU(Cluster Verification Utility)检查 CRS的安装前环境。

① 使用 CVU 检查CRS的安装前环境:

[root@node1 ~]# su – grid

node1-> pwd

/home/grid

node1-> ls

Desktop  grid

node1-> cd grid/

node1-> ll

total 72

drwxr-xr-x  9 root root  4096 Sep 22  2011 doc

drwxr-xr-x  4 root root  4096 Sep 22  2011 install

-rwxr-xr-x  1 root root 28122 Sep 22  2011 readme.html

drwxr-xr-x  2 root root  4096 Sep 22  2011 response

drwxr-xr-x  2 root root  4096 Sep 22  2011 rpm

-rwxr-xr-x  1 root root  4878 Sep 22  2011 runcluvfy.sh

-rwxr-xr-x  1 root root  3227 Sep 22  2011 runInstaller

drwxr-xr-x  2 root root  4096 Sep 22  2011 sshsetup

drwxr-xr-x 14 root root  4096 Sep 22  2011 stage

-rwxr-xr-x  1 root root  4326 Sep  2  2011 welcome.html

node1-> ./runcluvfy.sh stage -pre crsinst -n node1,node2 -fixup -verbose


Performing pre-checks for cluster services setup 


Checking node reachability…


Check: Node reachability from node "node1"

  Destination Node                      Reachable?              

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

  node1                                 yes                     

  node2                                 yes                     

Result: Node reachability check passed from node "node1"



Checking user equivalence…


Check: User equivalence for user "grid"

  Node Name                             Status                  

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

  node2                                 passed                  

  node1                                 passed                  

Result: User equivalence check passed for user "grid"


Checking node connectivity…


Checking hosts config file…

  Node Name                             Status                  

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

  node2                                 passed                  

  node1                                 passed                  


Verification of the hosts config file successful



Interface information for node "node2"

 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU   

 —— ————— ————— ————— ————— —————– ——

 eth0   172.16.0.192    172.16.0.0      0.0.0.0         172.16.15.254   00:0C:29:00:42:89 1500  

 eth1   192.168.94.12   192.168.94.0    0.0.0.0         172.16.15.254   00:0C:29:00:42:93 1500  



Interface information for node "node1"

 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU   

 —— ————— ————— ————— ————— —————– ——

 eth0   172.16.0.191    172.16.0.0      0.0.0.0         172.16.15.254   00:0C:29:A2:AE:1F 1500  

 eth1   192.168.94.11   192.168.94.0    0.0.0.0         172.16.15.254   00:0C:29:A2:AE:29 1500  



Check: Node connectivity of subnet "172.16.0.0"

  Source                          Destination                     Connected?      

  ——————————  ——————————  —————-

  node2[172.16.0.192]             node1[172.16.0.191]             yes             

Result: Node connectivity passed for subnet "172.16.0.0" with node(s) node2,node1



Check: TCP connectivity of subnet "172.16.0.0"

  Source                          Destination                     Connected?      

  ——————————  ——————————  —————-

  node1:172.16.0.191              node2:172.16.0.192              passed          

Result: TCP connectivity check passed for subnet "172.16.0.0"



Check: Node connectivity of subnet "192.168.94.0"

  Source                          Destination                     Connected?      

  ——————————  ——————————  —————-

  node2[192.168.94.12]            node1[192.168.94.11]            yes             

Result: Node connectivity passed for subnet "192.168.94.0" with node(s) node2,node1



Check: TCP connectivity of subnet "192.168.94.0"

  Source                          Destination                     Connected?      

  ——————————  ——————————  —————-

  node1:192.168.94.11             node2:192.168.94.12             passed          

Result: TCP connectivity check passed for subnet "192.168.94.0"



Interfaces found on subnet "172.16.0.0" that are likely candidates for VIP are:

node2 eth0:172.16.0.192

node1 eth0:172.16.0.191


Interfaces found on subnet "192.168.94.0" that are likely candidates for a private interconnect are:

node2 eth1:192.168.94.12

node1 eth1:192.168.94.11

Checking subnet mask consistency…

Subnet mask consistency check passed for subnet "172.16.0.0".

Subnet mask consistency check passed for subnet "192.168.94.0".

Subnet mask consistency check passed.


Result: Node connectivity check passed


Checking multicast communication…


Checking subnet "172.16.0.0" for multicast communication with multicast group "230.0.1.0"…

Check of subnet "172.16.0.0" for multicast communication with multicast group "230.0.1.0" passed.


Checking subnet "192.168.94.0" for multicast communication with multicast group "230.0.1.0"…

Check of subnet "192.168.94.0" for multicast communication with multicast group "230.0.1.0" passed.


Check of multicast communication passed.


Checking ASMLib configuration.

  Node Name                             Status                  

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

  node2                                 passed                  

  node1                                 passed                  

Result: Check for ASMLib configuration passed.


Check: Total memory 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         1.9641GB (2059516.0KB)    1.5GB (1572864.0KB)       passed    

  node1         1.9641GB (2059516.0KB)    1.5GB (1572864.0KB)       passed    

Result: Total memory check passed


Check: Available memory 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         1.8744GB (1965456.0KB)    50MB (51200.0KB)          passed    

  node1         1.7501GB (1835088.0KB)    50MB (51200.0KB)          passed    

Result: Available memory check passed


Check: Swap space 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         3.4165GB (3582484.0KB)    2.9462GB (3089274.0KB)    passed    

  node1         3.4165GB (3582484.0KB)    2.9462GB (3089274.0KB)    passed    

Result: Swap space check passed


Check: Free disk space for "node2:/tmp" 

  Path              Node Name     Mount point   Available     Required      Status      

  —————-  ————  ————  ————  ————  ————

  /tmp              node2         /             13.0361GB     1GB           passed      

Result: Free disk space check passed for "node2:/tmp"


Check: Free disk space for "node1:/tmp" 

  Path              Node Name     Mount point   Available     Required      Status      

  —————-  ————  ————  ————  ————  ————

  /tmp              node1         /             5.874GB       1GB           passed      

Result: Free disk space check passed for "node1:/tmp"


Check: User existence for "grid" 

  Node Name     Status                    Comment                 

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

  node2         passed                    exists(1100)            

  node1         passed                    exists(1100)            


Checking for multiple users with UID value 1100

Result: Check for multiple users with UID value 1100 passed 

Result: User existence check passed for "grid"


Check: Group existence for "oinstall" 

  Node Name     Status                    Comment                 

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

  node2         passed                    exists                  

  node1         passed                    exists                  

Result: Group existence check passed for "oinstall"


Check: Group existence for "dba" 

  Node Name     Status                    Comment                 

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

  node2         passed                    exists                  

  node1         passed                    exists                  

Result: Group existence check passed for "dba"


Check: Membership of user "grid" in group "oinstall" [as Primary]

  Node Name         User Exists   Group Exists  User in Group  Primary       Status      

  —————-  ————  ————  ————  ————  ————

  node2             yes           yes           yes           yes           passed      

  node1             yes           yes           yes           yes           passed      

Result: Membership check for user "grid" in group "oinstall" [as Primary] passed


Check: Membership of user "grid" in group "dba" 

  Node Name         User Exists   Group Exists  User in Group  Status          

  —————-  ————  ————  ————  —————-

  node2             yes           yes           no            failed          

  node1             yes           yes           no            failed          

Result: Membership check for user "grid" in group "dba" failed


Check: Run level 

  Node Name     run level                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         5                         3,5                       passed    

  node1         5                         3,5                       passed    

Result: Run level check passed


Check: Hard limits for "maximum open file descriptors" 

  Node Name         Type          Available     Required      Status          

  —————-  ————  ————  ————  —————-

  node2             hard          65536         65536         passed          

  node1             hard          65536         65536         passed          

Result: Hard limits check passed for "maximum open file descriptors"


Check: Soft limits for "maximum open file descriptors" 

  Node Name         Type          Available     Required      Status          

  —————-  ————  ————  ————  —————-

  node2             soft          1024          1024          passed          

  node1             soft          1024          1024          passed          

Result: Soft limits check passed for "maximum open file descriptors"


Check: Hard limits for "maximum user processes" 

  Node Name         Type          Available     Required      Status          

  —————-  ————  ————  ————  —————-

  node2             hard          16384         16384         passed          

  node1             hard          16384         16384         passed          

Result: Hard limits check passed for "maximum user processes"


Check: Soft limits for "maximum user processes" 

  Node Name         Type          Available     Required      Status          

  —————-  ————  ————  ————  —————-

  node2             soft          2047          2047          passed          

  node1             soft          2047          2047          passed          

Result: Soft limits check passed for "maximum user processes"


Check: System architecture 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         x86_64                    x86_64                    passed    

  node1         x86_64                    x86_64                    passed    

Result: System architecture check passed


Check: Kernel version 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         2.6.18-194.el5            2.6.18                    passed    

  node1         2.6.18-194.el5            2.6.18                    passed    

Result: Kernel version check passed


Check: Kernel parameter for "semmsl" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             250           250           250           passed          

  node1             250           250           250           passed          

Result: Kernel parameter check passed for "semmsl"


Check: Kernel parameter for "semmns" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             32000         32000         32000         passed          

  node1             32000         32000         32000         passed          

Result: Kernel parameter check passed for "semmns"


Check: Kernel parameter for "semopm" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             100           100           100           passed          

  node1             100           100           100           passed          

Result: Kernel parameter check passed for "semopm"


Check: Kernel parameter for "semmni" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             128           128           128           passed          

  node1             128           128           128           passed          

Result: Kernel parameter check passed for "semmni"


Check: Kernel parameter for "shmmax" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             1054472192    1054472192    1054472192    passed          

  node1             1054472192    1054472192    1054472192    passed          

Result: Kernel parameter check passed for "shmmax"


Check: Kernel parameter for "shmmni" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             4096          4096          4096          passed          

  node1             4096          4096          4096          passed          

Result: Kernel parameter check passed for "shmmni"


Check: Kernel parameter for "shmall" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             2097152       2097152       2097152       passed          

  node1             2097152       2097152       2097152       passed          

Result: Kernel parameter check passed for "shmall"


Check: Kernel parameter for "file-max" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             6815744       6815744       6815744       passed          

  node1             6815744       6815744       6815744       passed          

Result: Kernel parameter check passed for "file-max"


Check: Kernel parameter for "ip_local_port_range" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             between 9000.0 & 65500.0  between 9000.0 & 65500.0  between 9000.0 & 65500.0  passed

  node1             between 9000.0 & 65500.0  between 9000.0 & 65500.0  between 9000.0 & 65500.0  passed

Result: Kernel parameter check passed for "ip_local_port_range"


Check: Kernel parameter for "rmem_default" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             262144        262144        262144        passed          

  node1             262144        262144        262144        passed          

Result: Kernel parameter check passed for "rmem_default"


Check: Kernel parameter for "rmem_max" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             4194304       4194304       4194304       passed          

  node1             4194304       4194304       4194304       passed          

Result: Kernel parameter check passed for "rmem_max"


Check: Kernel parameter for "wmem_default" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             262144        262144        262144        passed          

  node1             262144        262144        262144        passed          

Result: Kernel parameter check passed for "wmem_default"


Check: Kernel parameter for "wmem_max" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             1048586       1048586       1048576       passed          

  node1             1048586       1048586       1048576       passed          

Result: Kernel parameter check passed for "wmem_max"


Check: Kernel parameter for "aio-max-nr" 

  Node Name         Current       Configured    Required      Status        Comment     

  —————-  ————  ————  ————  ————  ————

  node2             1048576       1048576       1048576       passed          

  node1             1048576       1048576       1048576       passed          

Result: Kernel parameter check passed for "aio-max-nr"


Check: Package existence for "make" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         make-3.81-3.el5           make-3.81                 passed    

  node1         make-3.81-3.el5           make-3.81                 passed    

Result: Package existence check passed for "make"


Check: Package existence for "binutils" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         binutils-2.17.50.0.6-14.el5  binutils-2.17.50.0.6      passed    

  node1         binutils-2.17.50.0.6-14.el5  binutils-2.17.50.0.6      passed    

Result: Package existence check passed for "binutils"


Check: Package existence for "gcc(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         gcc(x86_64)-4.1.2-48.el5  gcc(x86_64)-4.1.2         passed    

  node1         gcc(x86_64)-4.1.2-48.el5  gcc(x86_64)-4.1.2         passed    

Result: Package existence check passed for "gcc(x86_64)"


Check: Package existence for "libaio(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         libaio(x86_64)-0.3.106-5  libaio(x86_64)-0.3.106    passed    

  node1         libaio(x86_64)-0.3.106-5  libaio(x86_64)-0.3.106    passed    

Result: Package existence check passed for "libaio(x86_64)"


Check: Package existence for "glibc(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         glibc(x86_64)-2.5-49      glibc(x86_64)-2.5-24      passed    

  node1         glibc(x86_64)-2.5-49      glibc(x86_64)-2.5-24      passed    

Result: Package existence check passed for "glibc(x86_64)"


Check: Package existence for "compat-libstdc++-33(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         compat-libstdc++-33(x86_64)-3.2.3-61  compat-libstdc++-33(x86_64)-3.2.3  passed    

  node1         compat-libstdc++-33(x86_64)-3.2.3-61  compat-libstdc++-33(x86_64)-3.2.3  passed    

Result: Package existence check passed for "compat-libstdc++-33(x86_64)"


Check: Package existence for "elfutils-libelf(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         elfutils-libelf(x86_64)-0.137-3.el5  elfutils-libelf(x86_64)-0.125  passed    

  node1         elfutils-libelf(x86_64)-0.137-3.el5  elfutils-libelf(x86_64)-0.125  passed    

Result: Package existence check passed for "elfutils-libelf(x86_64)"


Check: Package existence for "elfutils-libelf-devel" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         elfutils-libelf-devel-0.137-3.el5  elfutils-libelf-devel-0.125  passed    

  node1         elfutils-libelf-devel-0.137-3.el5  elfutils-libelf-devel-0.125  passed    

Result: Package existence check passed for "elfutils-libelf-devel"


Check: Package existence for "glibc-common" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         glibc-common-2.5-49       glibc-common-2.5          passed    

  node1         glibc-common-2.5-49       glibc-common-2.5          passed    

Result: Package existence check passed for "glibc-common"


Check: Package existence for "glibc-devel(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         glibc-devel(x86_64)-2.5-49  glibc-devel(x86_64)-2.5   passed    

  node1         glibc-devel(x86_64)-2.5-49  glibc-devel(x86_64)-2.5   passed    

Result: Package existence check passed for "glibc-devel(x86_64)"


Check: Package existence for "glibc-headers" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         glibc-headers-2.5-49      glibc-headers-2.5         passed    

  node1         glibc-headers-2.5-49      glibc-headers-2.5         passed    

Result: Package existence check passed for "glibc-headers"


Check: Package existence for "gcc-c++(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         gcc-c++(x86_64)-4.1.2-48.el5  gcc-c++(x86_64)-4.1.2     passed    

  node1         gcc-c++(x86_64)-4.1.2-48.el5  gcc-c++(x86_64)-4.1.2     passed    

Result: Package existence check passed for "gcc-c++(x86_64)"


Check: Package existence for "libaio-devel(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         libaio-devel(x86_64)-0.3.106-5  libaio-devel(x86_64)-0.3.106  passed    

  node1         libaio-devel(x86_64)-0.3.106-5  libaio-devel(x86_64)-0.3.106  passed    

Result: Package existence check passed for "libaio-devel(x86_64)"


Check: Package existence for "libgcc(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         libgcc(x86_64)-4.1.2-48.el5  libgcc(x86_64)-4.1.2      passed    

  node1         libgcc(x86_64)-4.1.2-48.el5  libgcc(x86_64)-4.1.2      passed    

Result: Package existence check passed for "libgcc(x86_64)"


Check: Package existence for "libstdc++(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         libstdc++(x86_64)-4.1.2-48.el5  libstdc++(x86_64)-4.1.2   passed    

  node1         libstdc++(x86_64)-4.1.2-48.el5  libstdc++(x86_64)-4.1.2   passed    

Result: Package existence check passed for "libstdc++(x86_64)"


Check: Package existence for "libstdc++-devel(x86_64)" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         libstdc++-devel(x86_64)-4.1.2-48.el5  libstdc++-devel(x86_64)-4.1.2  passed    

  node1         libstdc++-devel(x86_64)-4.1.2-48.el5  libstdc++-devel(x86_64)-4.1.2  passed    

Result: Package existence check passed for "libstdc++-devel(x86_64)"


Check: Package existence for "sysstat" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         sysstat-7.0.2-3.el5       sysstat-7.0.2             passed    

  node1         sysstat-7.0.2-3.el5       sysstat-7.0.2             passed    

Result: Package existence check passed for "sysstat"


Check: Package existence for "ksh" 

  Node Name     Available                 Required                  Status    

  ————  ————————  ————————  ———-

  node2         ksh-20100202-1.el5        ksh-20060214              passed    

  node1         ksh-20100202-1.el5        ksh-20060214              passed    

Result: Package existence check passed for "ksh"


Checking for multiple users with UID value 0

Result: Check for multiple users with UID value 0 passed 


Check: Current group ID 

Result: Current group ID check passed


Starting check for consistency of primary group of root user

  Node Name                             Status                  

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

  node2                                 passed                  

  node1                                 passed                  


Check for consistency of root user's primary group passed


Starting Clock synchronization checks using Network Time Protocol(NTP)…


NTP Configuration file check started…

Network Time Protocol(NTP) configuration file not found on any of the nodes. Oracle Cluster Time 

Synchronization Service(CTSS) can be used instead of NTP for time synchronization on the cluster nodes

No NTP Daemons or Services were found to be running


Result: Clock synchronization check using Network Time Protocol(NTP) passed


Checking Core file name pattern consistency…

Core file name pattern consistency check passed.


Checking to make sure user "grid" is not in "root" group

  Node Name     Status                    Comment                 

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

  node2         passed                    does not exist          

  node1         passed                    does not exist          

Result: User "grid" is not part of "root" group. Check passed


Check default user file creation mask

  Node Name     Available                 Required                  Comment   

  ————  ————————  ————————  ———-

  node2         0022                      0022                      passed    

  node1         0022                      0022                      passed    

Result: Default user file creation mask check passed

Checking consistency of file "/etc/resolv.conf" across nodes


Checking the file "/etc/resolv.conf" to make sure only one of domain and search entries is defined

File "/etc/resolv.conf" does not have both domain and search entries defined

Checking if domain entry in file "/etc/resolv.conf" is consistent across the nodes…

domain entry in file "/etc/resolv.conf" is consistent across nodes

Checking if search entry in file "/etc/resolv.conf" is consistent across the nodes…

search entry in file "/etc/resolv.conf" is consistent across nodes

Checking file "/etc/resolv.conf" to make sure that only one search entry is defined

All nodes have one search entry defined in file "/etc/resolv.conf"

Checking all nodes to make sure that search entry is "localdomain" as found on node "node2"

All nodes of the cluster have same value for 'search'

Checking DNS response time for an unreachable node

  Node Name                             Status                  

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

  node2                                 passed                  

  node1                                 passed                  

The DNS response time for an unreachable node is within acceptable limit on all nodes


File "/etc/resolv.conf" is consistent across nodes


Check: Time zone consistency 

Result: Time zone consistency check passed

Fixup information has been generated for following node(s):

node2,node1

Please run the following script on each node as "root" user to execute the fixups:

'/tmp/CVU_11.2.0.3.0_grid/runfixup.sh'


Pre-check for cluster services setup was unsuccessful on all the nodes. 

node1->

从上面的预检查结果中,可以看到不成功,其实错误的原因是grid用户不属于dba组!不过,Oracle自动给我们提供的修复的脚本,根据上述提示,分别以root用户在两个节点上执行/tmp/CVU_11.2.0.3.0_grid/runfixup.sh脚本来修复。

node1

[root@node1 ~]# id grid

uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper)

[root@node1 ~]# 

看到,grid的确不属于dba组。执行脚本,进行修复:

[root@node1 ~]# sh /tmp/CVU_11.2.0.3.0_grid/runfixup.sh 

Response file being used is :/tmp/CVU_11.2.0.3.0_grid/fixup.response

Enable file being used is :/tmp/CVU_11.2.0.3.0_grid/fixup.enable

Log file location: /tmp/CVU_11.2.0.3.0_grid/orarun.log

uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper)

[root@node1 ~]# id grid

uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper),1300(dba)

[root@node1 ~]# 

同样,在node2上执行上述脚本:

[root@node2 ~]# sh /tmp/CVU_11.2.0.3.0_grid/runfixup.sh 

Response file being used is :/tmp/CVU_11.2.0.3.0_grid/fixup.response

Enable file being used is :/tmp/CVU_11.2.0.3.0_grid/fixup.enable

Log file location: /tmp/CVU_11.2.0.3.0_grid/orarun.log

uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper)

[root@node2 ~]# id grid

uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper),1300(dba)

[root@node2 ~]# 

执行完修复脚本后,重新执行预检查:

node1-> ./runcluvfy.sh stage -pre crsinst -n node1,node2 -fixup -verbose

Checking the file "/etc/resolv.conf" to make sure only one of domain and search entries is defined

File "/etc/resolv.conf" does not have both domain and search entries defined

Checking if domain entry in file "/etc/resolv.conf" is consistent across the nodes…

domain entry in file "/etc/resolv.conf" is consistent across nodes

Checking if search entry in file "/etc/resolv.conf" is consistent across the nodes…

search entry in file "/etc/resolv.conf" is consistent across nodes

Checking file "/etc/resolv.conf" to make sure that only one search entry is defined

All nodes have one search entry defined in file "/etc/resolv.conf"

Checking all nodes to make sure that search entry is "localdomain" as found on node "node2"

All nodes of the cluster have same value for 'search'

Checking DNS response time for an unreachable node

  Node Name                             Status                  

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

  node2                                 passed                  

  node1                                 passed                  

The DNS response time for an unreachable node is within acceptable limit on all nodes


File "/etc/resolv.conf" is consistent across nodes


Check: Time zone consistency 

Result: Time zone consistency check passed


Pre-check for cluster services setup was successful

node1->

 

直到此步骤,我们的安装环境已经完全准备OK!!!

一步一步在Linux上安装Oracle 11gR2 RAC (3)

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

配置11gR2 RAC需要安装Oracle Grid Infrastructure软件、Oracle数据库软件,其中Grid软件等同于Oracle 10gClusterware集群件。Oracle建议以不同的用户分别安装Grid Infrastructure软件、Oracle数据库软件,我们这里以grid用户安装Grid Infrastructureoracle用户安装Oracle数据库软件。并且gridoracle用户需要属于不同的用户组。在配置RAC时,还要求这两个用户在RAC的不同节点上uidgid要一致。用户、组的对应信息见下表:

Group Name

Group ID

Group Info

Oracle User(1100)

Grid User(1101)

oinstall

1000

Inventory Group

Y

Y

dba

1300

OSDBA Group

Y

oper

1301

OSOPER Group

Y

asmadmin

1200

OSASM 

Y

asmdba

1201

OSDBA for ASM

Y

Y

asmoper

1202

OSOPER for ASM 

Y

(Figure 2.4用户、组配置信息表)

我们可以通过执行下述shell脚本的1preusers.sh来完成用户、组的创建,脚本的具体内容可见本文档附录

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ll

total 24

-rwxr–r– 1 root root 3544 Apr 24 09:40 1preusers.sh

-rwxr–r– 1 root root  678 Apr 24 09:40 2predir.sh

-rwxr–r– 1 root root  858 Apr 24 09:40 3prelimits.sh

-rwxr–r– 1 root root  465 Apr 24 09:40 4prelogin.sh

-rwxr–r– 1 root root  651 Apr 24 09:40 5preprofile.sh

-rwxr–r– 1 root root 1132 Apr 24 09:40 6presysctl.sh

[root@node1 shell]# ./1preusers.sh 

Now create 6 groups named ‘oinstall’,’dba’,’asmadmin’,’asmdba’,’asmoper’,’oper’

Plus 2 users named ‘oracle’,’grid’,Also setting the Environment

Changing password for user grid.

passwd: all authentication tokens updated successfully.

Changing password for user oracle.

passwd: all authentication tokens updated successfully.

The Groups and users has been created

The Environment for grid,oracle also has been set successfully

[root@node1 shell]# id grid

uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper)

[root@node1 shell]# id oracle

uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)

[root@node1 shell]#    

说明:在节点node2上执行该脚本时,需要将grid用户环境变量ORACLE_SID修改为+ASM2oracle用户环境变量ORACLE_SID修改为devdb2,ORACLE_HOSTNAME环境变量修改为node2.localdomain

2.5 建路径、改权限

关于gridoracle用户的环境变量配置信息,见下述表格。

Environment Variable

Grid User

Oracle User

ORACLE_BASE

/u01/app/grid

/u01/app/oracle

ORACLE_HOME

/u01/app/11.2.0/grid

/u01/app/oracle/product/11.2.0/db_1

ORACLE_SID [node1]

+ASM1

devdb1

ORACLE_SID [node2]

+ASM2

devdb2

(Figure 2.5环境变量配置信息表)

通过执行上述2.4节中脚本2predir.sh来完成相关路径、权限的配置。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./2predir.sh 

Now create the necessary directory for oracle,grid users and change the authention to oracle,grid users…

The necessary directory for oracle,grid users and change the authention to oracle,grid users has been 

finished

[root@node1 shell]# cd /u01/app/

[root@node1 app]# ll

total 12

drwxrwxr-x 3 grid   oinstall 4096 Apr 24 10:06 11.2.0

drwxrwxr-x 2 grid   oinstall 4096 Apr 24 10:06 grid

drwxrwxr-x 2 oracle oinstall 4096 Apr 24 10:06 oracle

[root@node1 app]# 

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

   通过执行上述2.4节中脚本3prelimits.sh完成。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./3prelimits.sh 

Now modify the /etc/security/limits.conf,but backup it named /etc/security/limits.conf.bak before

Modifing the /etc/security/limits.conf has been succeed.

[root@node1 shell]# 

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

   通过执行上述2.4节中脚本4prelogin.sh完成。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./4prelogin.sh 

Now modify the /etc/pam.d/login,but with a backup named /etc/pam.d/login.bak

Modifing the /etc/pam.d/login has been succeed.

[root@node1 shell]#

2.8 修改/etc/profile文件

   通过执行上述2.4节中脚本5preprofile.sh完成。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./5preprofile.sh 

Now modify the  /etc/profile,but with a backup named  /etc/profile.bak

Modifing the /etc/profile has been succeed.

[root@node1 shell]# 

2.9修改内核配置文件

   通过执行上述2.4节中脚本6presysctl.sh完成。脚本的具体内容可见本文档附录。

[root@node1 shell]# pwd

/root/shell

[root@node1 shell]# ./6presysctl.sh 

Now modify the /etc/sysctl.conf,but with a backup named /etc/sysctl.bak

Modifing the /etc/sysctl.conf has been succeed.

Now make the changes take effect…..

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 536870912

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

net.ipv4.tcp_wmem = 262144 262144 262144

net.ipv4.tcp_rmem = 4194304 4194304 4194304

[root@node1 shell]# 

2.10 停止ntp服务,11gR2新增的检查项

[root@node1 ~]# service ntpd status

ntpd is stopped

[root@node1 ~]# chkconfig ntpd off

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

ntp/      ntp.conf  

[root@node1 ~]# cp /etc/ntp.conf /etc/ntp.conf.bak

[root@node1 ~]# rm -rf /etc/ntp.conf

[root@node1 ~]

2.11 节点2准备工作

    我们已经在node1完成基本准备配置工作,在node2上重复上述2.22.10节中准备工作,以完成节点2的准备工作。

    说明:2.3节配置SCAN IP已在节点2上完成,可忽略。2.4节中需要修改对应的环境变量。

2.12 配置oraclegrid 用户SSH对等性

   虽然在安装软件的过程中,oracle会自动配置SSH对等性,建议在安装软件之前手工配置。

   配置oracle用户对等性:

   node1:

[root@node1 ~]# su – oracle

node1-> env | grep ORA

ORACLE_UNQNAME=devdb

ORACLE_SID=devdb1

ORACLE_BASE=/u01/app/oracle

ORACLE_HOSTNAME=node1.localdomain

ORACLE_TERM=xterm

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

node1-> pwd

/home/oracle

node1-> mkdir ~/.ssh

node1-> chmod 700 ~/.ssh

node1-> ls -al

total 44

drwx—— 4 oracle oinstall 4096 Apr 24 10:47 .

drwxr-xr-x 4 root   root     4096 Apr 24 09:41 ..

-rw——- 1 oracle oinstall    5 Apr 24 10:43 .bash_history

-rw-r–r– 1 oracle oinstall   33 Apr 24 09:41 .bash_logout

-rw-r–r– 1 oracle oinstall  823 Apr 24 09:41 .bash_profile

-rw-r–r– 1 oracle oinstall  124 Apr 24 09:41 .bashrc

-rw-r–r– 1 oracle oinstall  515 Apr 24 09:41 .emacs

drwxr-xr-x 4 oracle oinstall 4096 Apr 24 09:41 .mozilla

drwx—— 2 oracle oinstall 4096 Apr 24 10:47 .ssh

-rw-r–r– 1 oracle oinstall  658 Apr 24 09:41 .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:

4a:bd:22:4c:cc:6a:33:ae:5a:de:7d:7c:8b:77:9e:81 oracle@node1.localdomain

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:

8b:50:73:41:03:ad:1c:59:25:aa:40:1c:c9:5e:03:99 oracle@node1.localdomain

node1-> 

node2:

[root@node2 ~]# su – oracle

node2-> env|grep ORA

ORACLE_UNQNAME=devdb

ORACLE_SID=devdb2

ORACLE_BASE=/u01/app/oracle

ORACLE_HOSTNAME=node2.localdomain

ORACLE_TERM=xterm

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

node2-> pwd

/home/oracle

node2-> ls -al

total 40

drwx—— 3 oracle oinstall 4096 Apr 24 10:45 .

drwxr-xr-x 4 root   root     4096 Apr 24 10:44 ..

-rw——- 1 oracle oinstall   10 Apr 24 10:49 .bash_history

-rw-r–r– 1 oracle oinstall   33 Apr 24 10:44 .bash_logout

-rw-r–r– 1 oracle oinstall  823 Apr 24 10:44 .bash_profile

-rw-r–r– 1 oracle oinstall  124 Apr 24 10:44 .bashrc

-rw-r–r– 1 oracle oinstall  515 Apr 24 10:44 .emacs

drwxr-xr-x 4 oracle oinstall 4096 Apr 24 10:44 .mozilla

-rw-r–r– 1 oracle oinstall  658 Apr 24 10:44 .zshrc

node2-> mkdir ~/.ssh

node2-> chmod 770 ~/.ssh/

node2-> ls -al

total 44

drwx—— 4 oracle oinstall 4096 Apr 24 10:49 .

drwxr-xr-x 4 root   root     4096 Apr 24 10:44 ..

-rw——- 1 oracle oinstall   10 Apr 24 10:49 .bash_history

-rw-r–r– 1 oracle oinstall   33 Apr 24 10:44 .bash_logout

-rw-r–r– 1 oracle oinstall  823 Apr 24 10:44 .bash_profile

-rw-r–r– 1 oracle oinstall  124 Apr 24 10:44 .bashrc

-rw-r–r– 1 oracle oinstall  515 Apr 24 10:44 .emacs

drwxr-xr-x 4 oracle oinstall 4096 Apr 24 10:44 .mozilla

drwxrwx— 2 oracle oinstall 4096 Apr 24 10:49 .ssh

-rw-r–r– 1 oracle oinstall  658 Apr 24 10:44 .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:

a0:64:81:a6:12:b2:18:4e:01:c3:bd:9d:f6:bb:55:b0 oracle@node2.localdomain

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:

85:56:69:73:74:a3:ef:5b:88:d7:6d:ef:90:03:b6:72 oracle@node2.localdomain

node2-> 

【补充说明:在网友的细心发现下,在node2上配置SSH对等性时,权限需要改成700而不是770!

大大,发现个问题
node2的:
chmod 770 ~/.ssh 需改成
chmod 700 ~/.ssh 么。
770的话node2 一直要口令啊。】

 

返回节点1

node1-> id

uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)

node1-> pwd

/home/oracle

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.192)’ can’t be established.

RSA key fingerprint is a7:6b:2c:2d:fb:c3:ff:33:af:92:cd:7b:99:3b:cf:3a.

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

Warning: Permanently added ‘node2,172.16.0.192’ (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% 2040     2.0KB/s   00:00  

node1-> 

验证oracle SSH对等性:

node1node2两个节点上分别执行下述命令,第一次执行时需要口令验证:

node1-> id

uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)

node1-> ssh node1 date

The authenticity of host ‘node1 (172.16.0.191)’ can’t be established.

RSA key fingerprint is 16:c2:67:cd:73:dd:b7:8b:f4:07:ef:e0:fb:36:34:3e.

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

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

Tue Apr 24 11:28:15 CST 2012

node1-> ssh node2 date

Tue Apr 24 11:28:18 CST 2012

node1-> ssh node1-priv date

The authenticity of host ‘node1-priv (192.168.94.11)’ can’t be established.

RSA key fingerprint is 16:c2:67:cd:73:dd:b7:8b:f4:07:ef:e0:fb:36:34:3e.

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

Warning: Permanently added ‘node1-priv,192.168.94.11’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:25 CST 2012

node1-> ssh node2-priv date

The authenticity of host ‘node2-priv (192.168.94.12)’ can’t be established.

RSA key fingerprint is a7:6b:2c:2d:fb:c3:ff:33:af:92:cd:7b:99:3b:cf:3a.

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

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

Tue Apr 24 11:28:30 CST 2012

node1-> ssh node1.localdomain date

The authenticity of host ‘node1.localdomain (172.16.0.191)’ can’t be established.

RSA key fingerprint is 16:c2:67:cd:73:dd:b7:8b:f4:07:ef:e0:fb:36:34:3e.

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

Warning: Permanently added ‘node1.localdomain’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:39 CST 2012

node1-> ssh node2.localdomain date

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

RSA key fingerprint is a7:6b:2c:2d:fb:c3:ff:33:af:92:cd:7b:99:3b:cf:3a.

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

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

Tue Apr 24 11:28:46 CST 2012

node1-> ssh node2-priv.localdomain date

The authenticity of host ‘node2-priv.localdomain (192.168.94.12)’ can’t be established.

RSA key fingerprint is a7:6b:2c:2d:fb:c3:ff:33:af:92:cd:7b:99:3b:cf:3a.

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

Warning: Permanently added ‘node2-priv.localdomain’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:52 CST 2012

node1-> ssh node1-priv.localdomain date

The authenticity of host ‘node1-priv.localdomain (192.168.94.11)’ can’t be established.

RSA key fingerprint is 16:c2:67:cd:73:dd:b7:8b:f4:07:ef:e0:fb:36:34:3e.

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

Warning: Permanently added ‘node1-priv.localdomain’ (RSA) to the list of known hosts.

Tue Apr 24 11:28:59 CST 2012

第二次执行时不再提示输入口令,并且可以成功执行命令,则表示oracle用户SSH对等性配置成功

node1

node1-> ssh node1 date

Tue Apr 24 11:29:02 CST 2012

node1-> ssh node2 date

Tue Apr 24 11:29:07 CST 2012

node1-> ssh node1-priv date

Tue Apr 24 11:29:13 CST 2012

node1-> ssh node2-priv date

Tue Apr 24 11:29:18 CST 2012

node1-> ssh node2-priv.localdomain date

Tue Apr 24 11:29:27 CST 2012

node1-> ssh node1-priv.localdomain date

Tue Apr 24 11:29:33 CST 2012

node1-> 

node2

node2-> id

uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)

node2-> pwd

/home/oracle

node2-> ssh node1 date

Tue Apr 24 11:32:06 CST 2012

node2-> ssh node2 date

Tue Apr 24 11:32:09 CST 2012

node2-> ssh node1-priv date

Tue Apr 24 11:32:14 CST 2012

node2-> ssh node2-priv date

Tue Apr 24 11:32:17 CST 2012

node2-> ssh node1.localdomain date

Tue Apr 24 11:32:26 CST 2012

node2-> ssh node2.localdomain date

Tue Apr 24 11:32:29 CST 2012

node2-> ssh node1-priv.localdomain date

Tue Apr 24 11:32:39 CST 2012

node2-> ssh node2-priv.localdomain date

Tue Apr 24 11:32:43 CST 2012

node2->

至此,Oracle用户SSH对等性配置完成!重复上述步骤,以grid用户配置其对等性。

2.13 配置共享磁盘

在任意节点上先创建共享磁盘,然后在另外的节点上选择添加已有磁盘。这里选择先在node2节点机器上创建共享磁盘,然后在node1上添加。共创建4块硬盘,其中2500M的硬盘,将来用于配置GRIDDG磁盘组,专门存放OCRVoting Disk13G的磁盘,用于配置DATA磁盘组,存放数据库;13G的磁盘,用于配置FLASH磁盘组,用于闪回区;

node2上创建共享硬盘详细步骤:

① 先关闭节点2 11gnode2,然后选择11gnode2,右键选择编辑设置,Edit settings

② 在编辑虚拟机对话框下,选择添加,Add,选择硬盘,Next

③ 选择创建新硬盘,Next

④ 磁盘大小选择500M,选中支持集群属性,指定磁盘的存放位置,Next

⑤ 驱动器设备选择SCSI 1:0,模式选择独立,Next

⑥ 弹出对话框中,Finish

 虚拟机属性中,选择刚才新添加的SCSI controller 1驱动器,配置其为Physical模式,用于支持共享,因为这块新添加的硬盘将来要被node1node2两个节点访问:

⑧ 重复执行上述③⑥步骤,添加第二块500M硬盘,将其驱动器设备选择SCSI 1:1

⑨ 如法炮制,添加另外两块3G硬盘,驱动器设备分别选择SCSI 2:0SCSI 2:1,同样需要配置新添加的SCSI controller 2驱动器模式为Physical模式,用于支持共享。最后,添加完4块共享硬盘的node2配置信息如下:

node1上添加已有共享硬盘详细步骤:

① 先关闭节点1 11gnode1,然后选择11gnode1,右键选择编辑设置,Edit settings,操作界面同node2上创建共享硬盘步骤①:

② 在编辑虚拟机对话框下,选择添加,Add,选择硬盘,Next,操作界面同node2上创建共享硬盘步骤②:

③ 选择已有虚拟硬盘,Next

④ 选择指定的存储设备,注意要选择在node2节点中创建的第1块硬盘:

⑤ 驱动器设备选择SCSI 1:0,模式选择独立,Next,操作界面同node2上创建共享硬盘步骤⑤:

⑥ 同样选择新添加的SCSI controller 1驱动器,配置其为Physical模式,用于支持共享,操作界面同node2上创建共享硬盘步骤7

 如法炮制,添加剩余的3块硬盘,注意,驱动器编号要依次选择SCSI 1:1SCSI 2:0SCSI 2:1。同时要将新添加的SCSI controller 2驱动器模式为Physical模式,用于支持共享。最后,添加完4块共享硬盘的node1配置信息如下:

至此,完成在两个节点上对共享硬盘的添加配置。

Oracle OCP考试1z0-007系列4:学会使用分组函数

继上篇文章,Oracle OCP考试1z0-007系列3:学会使用单行函数后,本篇是系列4,学会使用分组函数。 本篇是1z0-007课程的第四章,主要内容:

     1  了解在SQL语句中可以使用的分组函数;

     2  学会在SELECT语句中使用GROUP BY从句;

     3  学会使用HAVING从句来过滤数据。

本篇内容相对比较难,具体文档和讲义如下:

解决一则row cache lock引起的性能故障

     收到紧急邮件:说某客户生产系统在今天早上9:30左右,生产环境整个系统操作响应很慢,查询一票单子可能要耗时半分钟,有时候登录界面也卡住很久才响应

       这是一套10.2.0.5.0的双节点RAC数据库,平时系统运行较为正常,现在突然变慢。好了,对于我这个优化菜鸟来讲,还是从AWR报告入手。下面给出分析步骤和解决办法:

1   从报告头中看到,在数据库出现性能问题的一个小时内,DB Time达到240分钟,(DB Time)/Elapsed=3.93,说明数据库应该是存在问题的。

  Snap Id Snap Time Sessions Cursors/Session
Begin Snap: 10638 05-6月 -12 09:00:00 54 5.8
End Snap: 10639 05-6月 -12 10:01:03 102 5.8
Elapsed:   61.04 (mins)    
DB Time:   240.11 (mins)    

2   从报告的Load Profile节,看到用户的每秒调用高达680次,说明肯定存在问题了。

Load Profile

  Per Second Per Transaction
Redo size: 12,939.46 6,115.60
Logical reads: 67,323.18 31,819.06
Block changes: 53.22 25.15
Physical reads: 1.02 0.48
Physical writes: 4.72 2.23
User calls: 679.70 321.25
Parses: 90.49 42.77
Hard parses: 0.35 0.16
Sorts: 1.94 0.92
Logons: 0.08 0.04
Executes: 316.75 149.71
Transactions: 2.12  

3   继续分析报告,从Top 5中看到排在第一的等待事件是row cache lock,并且该等待事件的平均等待达到2128ms。 

ROW CACHE LOCK等待事件是一个共享池相关的等待事件,是由于对于字典缓冲的访问造成的。通常直接的解决办可以通过调大共享池来解决,但是,并非在所有场景下都凑效。

 

Top 5 Timed Events

Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class
row cache lock 2,736 5,822 2,128 40.4 Concurrency
CPU time   4,305   29.9  
gc cr block busy 2,293 2,633 1,148 18.3 Cluster
gc buffer busy 1,569 1,096 698 7.6 Cluster
enq: TX – row lock contention 2,029 998 492 6.9 Application

 

4    继续分析,发现基于时间的统计信息中,加载序列sequence的耗时排在了第二位。

Time Model Statistics

  • Total time in database user-calls (DB Time): 14406.5s
  • Statistics including the word "background" measure background process time, and so do not contribute to the DB time statistic
  • Ordered by % or DB time desc, Statistic name

 

Statistic Name Time (s) % of DB Time
sql execute elapsed time 14,188.01 98.48
sequence load elapsed time 6,900.83 47.90
DB CPU 4,304.59 29.88
PL/SQL execution elapsed time 20.64 0.14
parse time elapsed 10.25 0.07
hard parse elapsed time 6.00 0.04
PL/SQL compilation elapsed time 1.17 0.01
hard parse (sharing criteria) elapsed time 1.07 0.01
repeated bind elapsed time 0.80 0.01
hard parse (bind mismatch) elapsed time 0.64 0.00
connection management call elapsed time 0.31 0.00
failed parse elapsed time 0.00 0.00
DB time 14,406.50  
background elapsed time 2,115.75  
background cpu time 20.52  

5     看到最耗时的竟然是一条再简单不过的SQL语句,SELECT SEQ_NEWID.NEXTVAL FROM DUAL,取序列的值,竟然会如此的耗时?

SQL ordered by Elapsed Time

  • Resources reported for PL/SQL code includes the resources used by all SQL statements called by the code.
  • % Total DB Time is the Elapsed Time of the SQL statement divided into the Total Database Time multiplied by 100
  • Total DB Time (s): 14,406
  • Captured SQL account for 223.8% of Total

 

Elapsed Time (s) CPU Time (s) Executions Elap per Exec (s) % Total DB Time SQL Id SQL Module SQL Text
6,910 0 281 24.59 47.96 1gd7ancd2px8m FC.EdiService.Import.exe SELECT SEQ_NEWID.NEXTVAL FROM …

6    再看字典缓冲区的统计信息:取序列值一共287次,就失败了43.9%,看来的确是取序列值的地方出现问题,也就解释了为什么上一步骤中的分许出的那条SQL会如此耗时,因为差不多有一半的情况下都没有取到序列的值。

Dictionary Cache Stats

  • "Pct Misses" should be very low (< 2% in most cases)
  • "Final Usage" is the number of cache entries being used

 

Cache Get Requests Pct Miss Scan Reqs Pct Miss Mod Reqs Final Usage
dc_awr_control 65 1.54 0   1 1
dc_database_links 304 0.00 0   0 1
dc_global_oids 155 0.00 0   0 24
dc_histogram_data 74,704 0.25 0   0 5,612
dc_histogram_defs 71,400 0.26 0   0 4,945
dc_object_ids 29,398 0.01 0   0 1,136
dc_objects 3,912 0.23 0   0 860
dc_profiles 150 0.00 0   0 1
dc_rollback_segments 17,789 0.10 0   0 56
dc_segments 8,927 0.06 0   4 896
dc_sequences 287 43.90 0   279 3
dc_tablespace_quotas 2 50.00 0   0 2
dc_tablespaces 8,954 0.00 0   0 25
dc_usernames 1,082 0.00 0   0 8
dc_users 13,991 0.00 0   0 31
outstanding_alerts 326 77.91 0   23 54

7   到此,解决问题的基本思路已经出来了,通过将序列缓存到内存中,基本可以解决问题。通过查看生产系统上的该序列的信息,发现创建序列的语句如下:

-- Create sequence 
create sequence SEQ_NEWID
minvalue 1000
maxvalue 9999
start with 1000
increment by 1
nocache;

8   调整序列,使之cache到内存中,alter sequence SEQ_NEWID cache 3000;

9   附带,刚在生产系统上把序列cache到内存,另一同事就把RAC数据库给重启了,据他判断说是存储系统出了问题。可是,怎么会是存储出了问题呢?如果,能重现这次的性能问题该多好啊,只是没有如果!

      在处理这个问题的时候,参照了老白的文章:白鳝说WAIT EVENT之ROW CACHE LOCK

Oracle OCP考试1z0-007系列3:学会使用单行函数

        继上篇文章,Oracle OCP考试1z0-007系列2:学会使用WHERE和ORDER BY从句后,本篇是系列3,学会使用单行函数。 本篇是1z0-007课程的第三章,主要内容:

     1 了解在SQL语句中可以使用的函数分类;

     2  学会在SELECT语句中使用日期、字符、数值函数;

     3 了解Oracle中的转换函数。

本篇内容比较重要,具体文档和讲义如下:

一步一步在Linux上安装Oracle 11gR2 RAC (2)

2.2 配置 /etc/hosts文件
参照Figure 2.1网络配置信息表,修改节点1的/etc/hosts配置文件。
[root@node1 ~]# cp /etc/hosts /etc/hosts.bak
[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
# node1
172.16.0.191            node1.localdomain               node1
172.16.0.193            node1-vip.localdomain           node1-vip
192.168.94.11           node1-priv.localdomain          node1-priv
# node2
172.16.0.192            node2.localdomain               node2
172.16.0.194            node2-vip.localdomain           node2-vip
192.168.94.12           node2-priv.localdomain          node2-priv
# scan-ip
172.16.0.203            scan-cluster.localdomain        scan-cluster
[root@node1 ~]# 
    
2.3 配置DNS服务器,确认SCAN IP可以被解析
从Oracle 11gR2开始,引入SCAN(Single Client Access Name) IP的概念,相当于在客户端和数据库之间增加一层虚拟的网络服务层,即是SCAN IP和SCAP IP Listener。在客户端的tnsnames.ora配置文件中,只需要配置SCAN IP的配置信息即可,客户端通过SCAN IP、SCAN IP Listener来访问数据库。同之前各版本的RAC相比,使用SCAN IP的好处就是,当后台RAC数据库添加、删除节点时,客户端配置信息无需修改。可以通过配置DNS服务器或GNS来配置SCAN,我们这里以DNS为例来进行配置。

2.3.1 配置DNS服务器
这里,选择IP地址为172.16.0.176的服务器来配置DNS服务器。
①安装DNS软件包:
[root@rdd dns_rpm]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:99:DA:22  
          inet addr:172.16.0.176  Bcast:172.16.15.255  Mask:255.255.240.0
          inet6 addr: fe80::20c:29ff:fe99:da22/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10237921 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1394986 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3375785216 (3.1 GiB)  TX bytes:596171214 (568.5 MiB)
[root@rdd dns_rpm]# pwd
/root/dns_rpm
[root@rdd dns_rpm]# ll
total 1112
-rw-r–r– 1 root root 1015531 Apr 23 14:53 bind-9.3.6-4.P1.el5_4.2.x86_64.rpm
-rw-r–r– 1 root root   45360 Apr 23 14:53 bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm
-rw-r–r– 1 root root   62251 Apr 23 14:53 caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm
[root@rdd dns_rpm]# rpm -ivh bind-9.3.6-4.P1.el5_4.2.x86_64.rpm 
warning: bind-9.3.6-4.P1.el5_4.2.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing…                ########################################### [100%]
   1:bind                   ########################################### [100%]
[root@rdd dns_rpm]# rpm -ivh bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm 
warning: bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing…                ########################################### [100%]
   1:bind-chroot            ########################################### [100%]
[root@rdd dns_rpm]# rpm -ivh caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm 
warning: caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing…                ########################################### [100%]
   1:caching-nameserver     ########################################### [100%]
[root@rdd dns_rpm]# 
② 配置/var/named/chroot/etc/named.conf文件
先拷贝生成该文件:
[root@rdd dns_rpm]# cd /var/named/chroot/etc/
[root@rdd etc]# ll
total 16
-rw-r–r– 1 root root   405 Apr 18 07:50 localtime
-rw-r—– 1 root named 1230 Jan 21  2010 named.caching-nameserver.conf
-rw-r—– 1 root named  955 Jan 21  2010 named.rfc1912.zones
-rw-r—– 1 root named  113 Apr 23 14:55 rndc.key
[root@rdd etc]# cp -p named.caching-nameserver.conf named.conf
[root@rdd etc]# 
修改后的该文件内容如下:
[root@rdd etc]# pwd
/var/named/chroot/etc
[root@rdd etc]# cat named.conf 
//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver 
// (as a localhost DNS resolver only). 
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE – use system-config-bind or an editor
// to create named.conf – edits to this file will be lost on 
// caching-nameserver package upgrade.
//
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        // Those options should be used carefully because they disable port
        // randomization
        // query-source    port 53;
        // query-source-v6 port 53;
        allow-query     { any; };
        allow-query-cache { any; };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };
        match-destinations { any; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
};
[root@rdd etc]# 
说明:为简单起见,将该文件中的127.0.0.1、localhost全部修改成any,且修改时,需要注意左右两边留空格。修改部分在上述配置文件中以红色加粗标示。
通过拷贝来生成/var/named/chroot/etc/named.conf文件时,注意加上-p选项,来保证文件的权限问题,否则会导致DNS服务启不来!
③ 配置Zone文件,修改/var/named/chroot/etc/named.rfc1912.zones文件
配置Zone的目的是为了解析SCAN IP,在该文件末尾添加以下反向Zone:
zone "0.16.172.in-addr.arpa." IN {
        type master;
        file "0.16.172.in-addr.arpa";
        allow-update { none; };
};
配置反向Zone之后的该文件内容如下:
[root@rdd etc]# pwd
/var/named/chroot/etc
[root@rdd etc]# ll
total 20
-rw-r–r– 1 root root   405 Apr 18 07:50 localtime
-rw-r—– 1 root named 1230 Jan 21  2010 named.caching-nameserver.conf
-rw-r—– 1 root root  1200 Apr 23 15:03 named.conf
-rw-r—– 1 root named 1085 Apr 23 15:19 named.rfc1912.zones
-rw-r—– 1 root named  113 Apr 23 14:55 rndc.key
[root@rdd etc]# cat named.rfc1912.zones 
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "." IN {
        type hint;
        file "named.ca";
};
zone "localdomain" IN {
        type master;
        file "localdomain.zone";
        allow-update { none; };
};
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.ip6.local";
        allow-update { none; };
};
zone "255.in-addr.arpa" IN {
        type master;
        file "named.broadcast";
        allow-update { none; };
};
zone "0.in-addr.arpa" IN {
        type master;
        file "named.zero";
        allow-update { none; };
};
zone "0.16.172.in-addr.arpa." IN {
        type master;
        file "0.16.172.in-addr.arpa";
        allow-update { none; };
};
[root@rdd etc]# 
说明:正常情况下还应该配置正向Zone文件。这里,我们的RAC双节点node1、node2的域名domain都设置为localdomain,而默认情况下,该配置文件(/var/named/chroot/etc/named.rfc1912.zones)的第15行到第20行中已经自带下述正向Zone文件配置信息,所以无需再添加。
zone "localdomain" IN {
        type master;
        file "localdomain.zone";
        allow-update { none; };
};
④ 配置正、反向解析数据库文件。在/var/named/chroot/var/named路径下进行配置
首先,生成正、反向解析数据库文件。利用/var/named/chroot/var/named/localhost.zone复制生成正向解析的数据库文件,利用/var/named/chroot/var/named/localhost.zone复制生成名为0.16.172.in-addr.arpa的反向解析的数据库文件
[root@rdd etc]# pwd
/var/named/chroot/etc
[root@rdd etc]# cd /var/named/chroot/var/named/
[root@rdd named]# ll
total 36
drwxrwx— 2 named named 4096 Aug 26  2004 data
-rw-r—– 1 root  named  198 Jan 21  2010 localdomain.zone
-rw-r—– 1 root  named  195 Jan 21  2010 localhost.zone
-rw-r—– 1 root  named  427 Jan 21  2010 named.broadcast
-rw-r—– 1 root  named 1892 Jan 21  2010 named.ca
-rw-r—– 1 root  named  424 Jan 21  2010 named.ip6.local
-rw-r—– 1 root  named  426 Jan 21  2010 named.local
-rw-r—– 1 root  named  427 Jan 21  2010 named.zero
drwxrwx— 2 named named 4096 Jul 27  2004 slaves
[root@rdd named]# cp -p named.local 0.16.172.in-addr.arpa
[root@rdd named]# ll
total 40
-rw-r—– 1 root  named   426 Apr 23 16:10 0.16.172.in-addr.arpa
drwxrwx— 2 named named 4096 Aug 26  2004 data
-rw-r—– 1 root  named  198 Jan 21  2010 localdomain.zone
-rw-r—– 1 root  named  195 Jan 21  2010 localhost.zone
-rw-r—– 1 root  named  427 Jan 21  2010 named.broadcast
-rw-r—– 1 root  named 1892 Jan 21  2010 named.ca
-rw-r—– 1 root  named  424 Jan 21  2010 named.ip6.local
-rw-r—– 1 root  named  426 Jan 21  2010 named.local
-rw-r—– 1 root  named  427 Jan 21  2010 named.zero
drwxrwx— 2 named named 4096 Jul 27  2004 slaves
[root@rdd named]# 
说明:在上述步骤③中我们没有配置正向Zone文件,故只需生成反向解析数据库文件,正向解析数据库文件利用默认的localdomain.zone文件。
生成的正、反向解析数据库文件名一定要同上述步骤③中定义的正、反向Zone文件一致,否则DNS出错!
然后,定义正、反向解析数据库文件。
在正向解析数据库文件localdomain.zone末尾添加下述内容:
scan-cluster        IN A            172.16.0.203
添加后内容如下:
[root@rdd named]# pwd
/var/named/chroot/var/named
[root@rdd named]# cat localdomain.zone 
$TTL    86400
@               IN SOA  localhost root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN NS           localhost
localhost       IN A            127.0.0.1
scan-cluster        IN A            172.16.0.203
[root@rdd named]# 
在反向解析数据库文件0.16.172.in-addr.arpa末尾添加下述内容:
203     IN PTR  scan-cluster.localdomain.
添加后内容如下:
[root@rdd named]# pwd
/var/named/chroot/var/named
[root@rdd named]# cat 0.16.172.in-addr.arpa 
$TTL    86400
@       IN      SOA     localhost. root.localhost.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN      NS      localhost.
1       IN      PTR     localhost.
203     IN PTR  scan-cluster.localdomain.
[root@rdd named]# 
2.3.2 测试DNS服务器解析SCAN IP正常
首先,在DNS服务器172.16.0.176上启动DNS服务:
[root@rdd named]# /etc/init.d/named status
rndc: connect failed: 127.0.0.1#953: connection refused
named is stopped
[root@rdd named]# /etc/init.d/named start
Starting named: [  OK  ]
[root@rdd named]# /etc/init.d/named status
number of zones: 7
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running
named (pid  23307) is running…
[root@rdd named]# chkconfig named on
[root@rdd named]#
然后,分别在RAC节点node1、node2的/etc/resolv.conf配置文件中添加下述配置信息:
search localdomain
nameserver 172.16.0.176
添加之后:
[root@node1 ~]# cat /etc/resolv.conf 
search localdomain
nameserver 172.16.0.176
[root@node1 ~]#
最后,测试SCAN IP解析是否成功?
node1测试:
[root@node1 ~]# nslookup 172.16.0.203
Server:         172.16.0.176
Address:        172.16.0.176#53
203.0.16.172.in-addr.arpa       name = scan-cluster.localdomain.
[root@node1 ~]# nslookup scan-cluster.localdomain
Server:         172.16.0.176
Address:        172.16.0.176#53
Name:   scan-cluster.localdomain
Address: 172.16.0.203
[root@node1 ~]# nslookup scan-cluster
Server:         172.16.0.176
Address:        172.16.0.176#53
Name:   scan-cluster.localdomain
Address: 172.16.0.203
[root@node1 ~]# 
node2测试:
[root@node2 ~]# nslookup 172.16.0.203
Server:         172.16.0.176
Address:        172.16.0.176#53
203.0.16.172.in-addr.arpa       name = scan-cluster.localdomain.
[root@node2 ~]# nslookup scan-cluster.localdomain
Server:         172.16.0.176
Address:        172.16.0.176#53
Name:   scan-cluster.localdomain
Address: 172.16.0.203
[root@node2 ~]# nslookup scan-cluster
Server:         172.16.0.176
Address:        172.16.0.176#53
Name:   scan-cluster.localdomain
Address: 172.16.0.203
[root@node2 ~]# 
     
至此,准备工作中的配置SCAN IP通过配置DNS服务器来解析已经成功!

一步一步在Linux上安装Oracle 11gR2 RAC (1)

1 概述和说明
1.1 概述
    本文档用于记录在OEL 5.5 X86_64位系统上安装配置Oracle 11gR2(11.2.0.3.0) RAC的详细步骤。
安装平台选择VMware公司的VMware ESXi Version 4.0的虚拟主机,通过在该虚拟机上配置两台OEL 5.5 X86_64位Linux系统的机器,然后在这两台Linux机器上配置Oracle 11gR2 RAC系统。其中,操作系统选择Oracle公司的OEL 5.5 X86_64位Linux系统,数据库软件采用目前Oracle 11gR2最新版本的11.2.0.3.0。
本文档中假定你已经安装配置好VMware ESXi Version 4.0的虚拟主机,如果没有该环境的话,也可以通过自行安装VMware Server来完成11gR2 RAC的安装配置。
1.2 软件获取
操作系统:  Oracle Enterprise Linux 5
虚拟机软件:VMware Server
其中,Oracle软件可以通过上述连接直接获取版本为11.2.0.1.0的安装介质,或者通过MetaLink官方网站获取最新版本的11.2.0.3.0安装介质,其中patch编号为10404530。
2 安装前准备工作
2.1 配置虚拟机,安装OEL 5.5 X86_64位Linux操作系统
    这里,我们需要在VMware ESXi Version 4.0的虚拟主机上创建两台虚拟机,其中每台机器至少需要配置双网卡,一块网卡作为Public,另一块作为Private,建议IP地址均选择手动配置,而不是DHCP动态分配,且要求指定的IP在网络里是唯一的。主机名也分别要求指定为唯一,避免冲突。主机名、IP地址在前期规划要慎重,一经指定,最好不要轻易改变,避免一些不必要的麻烦。这里列出两台机器前期规划的主机名、IP地址信息:
Hostname
Short Hostname
Type   
IP Address
Interface
node1.localdomain
node1
Public IP
172.16.0.191
eth0
node1-vip.localdomain
node1-vip
Virtual IP
172.16.0.193
eth0:1
node1-priv.localdomain
node1-priv
Private IP
192.168.94.11
eth1
node2.localdomain
node2
Public IP
172.16.0.192
eth0
node2-priv.localdomain
node2-vip
Virtual IP
172.16.0.194
eth0:1
node2-priv.localdomain
node2-priv
Private IP
192.168.94.12
eth1
scan-cluster.localdomain
scan-cluster
SCAN IP
172.16.0.203
eth0

(Figure 2.1网络配置信息表)

其中,每台机器至少需要配置3个IP地址,在安装操作系统的过程中,我们需要配置公网IP和私有IP即可,虚拟IP在安装集群件时分配。Public IPVirtual IPSCAN IP必须配置在同一网段。SCAN IP是Oracle 11g新推出的,在配置11g RAC时需要指定。我们的SCAN IP通过配置DNS服务器来实现,在下文中将给出配置步骤。
2.1.1 登录VMware ESXi Version 4.0虚拟主机,创建新虚拟机
    以root用户登录172.16.0.181的虚拟主机:
    
进入虚拟主机管理界面:
新建虚拟机:
选择Custom,Next进入下一步:
给虚拟机命名为11gnode1,Next:
选择Datastore位置,这里选择第1个名为snap-0f000dba-SQL-Server的存储设备,Next:
虚拟机版本选择version 7,Next:
操作系统类型选择Linux,版本选择Red Hat Enterprise Linux 5(64-bit),Next:
CPU核数选择2,Next:
内存选择2G,Next:
网卡选择2块,一块作为Public,另外一块作为Private,Next:
SCSI驱动器类型选择LSI Logic Parallel,Next:
选择创建新磁盘,Next:
磁盘大小选择20G,Next:
虚拟设备节点选择默认SCSI(0:0),Next:
选中在虚拟机创建之前编辑选项,Continue:
编辑光驱设备,选择ISO文件,找到之前已经准备就绪的OEL 5.5 X86_64位的ISO文件:
选中光驱在启动时连接选项,最后,单击Finish完成。
至此,一台新的虚拟机配置完成。
2.1.2 启动11gnode1虚拟机,安装操作系统
给11gnode1虚拟机加电,进入图形界面安装系统:
回车,进入安装:
Skip,跳过光驱检查:
Next,开始安装Oracle Enterprise Linux:
语言选择—>English,键盘选择–>U.S.English美式键盘,硬盘分区选择最后一个选项Create custom layout,Next:
给硬盘分区,其中SWAP分区选择3500M,剩余空间全部划给根分区/,Next:
网络配置,参照2.1节中IP配置信息,分别配置eth0,eht1两块网卡的IP、及子网掩码、网关、主机名,Next:
时区选择,亚洲/上海,Next:
配置root用户口令,Next:
选择定制软软包,Next:
其中:
Desktop Environments:
           GNOME Desktop Environment
    Applications:  
               Editors
    Development:
               Development Libraries
               Development Tools
               GNOME Software Development
               Legacy Software Development
               X software Development
    Base System : 
               Administration Tools
               Base
               Legacy Software Support
           System Tools
           X Window System
其它的软件包,可以忽略,暂时不装,一来加快操作系统的安装进度,二来其余的软件包对于配置Oracle 11gR2 RAC不需要,如果在将来的安装过程中,系统提示缺失软件包的时候,我们也可以手工从安装光盘中自行安装。Next:
进入格式化文件系统,安装软件包,直到最后:
根据提示,选择Reboot系统:
系统重启之后,Forward:
选择关闭Firewall,Next:
禁用SELinux,Next:
直到最后一步,按照提示,再次重新启动系统,使刚才的配置生效:
重启之后,进入图形界面的登录框:
到此,node1节点机器创建成功。
接下来,完全参照上述创建虚拟机步骤,创建第2个节点,虚拟机命名为11gnode2,在配置网络步骤中,需要注意,将其eth0配置为172.16.0.192,eth1配置为192.168.94.12,主机名为node2.localdomain。
最后,两个节点的机器配置完成!

如何获取Oracle数据库中某表及索引、约束、触发器、对象权限的创建语句?

            在上一篇文章中,我们知道了如何获取Oracle数据库中某个用户下的所有表、索引、约束、触发器的创建脚本?那么对于数据库中特定的某张表而言,又该如何获取建表语句、及索引、约束、外键约束、触发器、对象权限的创建脚本呢?

            在这里,给出一个实现上述功能的脚本:

OCM11g-> cat table_ddl.sql 
-- Be sure the variable 'S' means the Schema name,the 'T' means table name.
-- All these variables should be UPPERCASE.

def S='&1'
def T='&2'
set lines 2000 pages 0 ver off echo off head off feed off
set newpage none
set trimspool on
set long 5000000
col output for a1000 word_wrapped
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',true);
exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'STORAGE',false);
 
spool &T..sql
select dbms_metadata.get_ddl('TABLE','&T','&S') output from dual;
select dbms_metadata.get_dependent_ddl('INDEX','&T','&S') output from dual;
select dbms_metadata.get_dependent_ddl('CONSTRAINT','&T','&S') output from dual;
select dbms_metadata.get_dependent_ddl('REF_CONSTRAINT','&T','&S') output from dual;
select dbms_metadata.get_dependent_ddl('TRIGGER','&T','&S') output from dual;
 
-- Uncomment to generate object level grants
 select dbms_metadata.get_dependent_ddl('OBJECT_GRANT','&T','&S') output from dual;
 
spool off;
OCM11g-> 

            下述是对于HR用户下的EMPLOYEES表的输出结果:

SQL> conn hr/hR
Connected.
SQL> @table_ddl.sql
Enter value for 1: HR
Enter value for 2: EMPLOYEES

  CREATE TABLE "HR"."EMPLOYEES"
   (    "EMPLOYEE_ID" NUMBER(6,0),
        "FIRST_NAME" VARCHAR2(20),
        "LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,
        "EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,
        "PHONE_NUMBER" VARCHAR2(20),
        "HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,
        "JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,
        "SALARY" NUMBER(8,2),
        "COMMISSION_PCT" NUMBER(2,2),
        "MANAGER_ID" NUMBER(6,0),
        "DEPARTMENT_ID" NUMBER(4,0),
         CONSTRAINT "EMP_SALARY_MIN" CHECK (salary > 0) ENABLE,
         CONSTRAINT "EMP_EMAIL_UK" UNIQUE ("EMAIL")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE"  ENABLE,
         CONSTRAINT "EMP_EMP_ID_PK" PRIMARY KEY ("EMPLOYEE_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE"  ENABLE,
         CONSTRAINT "EMP_MANAGER_FK" FOREIGN KEY ("MANAGER_ID")
          REFERENCES "HR"."EMPLOYEES" ("EMPLOYEE_ID") ENABLE,
         CONSTRAINT "EMP_JOB_FK" FOREIGN KEY ("JOB_ID")
          REFERENCES "HR"."JOBS" ("JOB_ID") ENABLE,
         CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY ("DEPARTMENT_ID")
          REFERENCES "HR"."DEPARTMENTS" ("DEPARTMENT_ID") ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING
  TABLESPACE "EXAMPLE" ;



  CREATE UNIQUE INDEX "HR"."EMP_EMAIL_UK" ON "HR"."EMPLOYEES" ("EMAIL")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE UNIQUE INDEX "HR"."EMP_EMP_ID_PK" ON "HR"."EMPLOYEES" ("EMPLOYEE_ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE INDEX "HR"."EMP_DEPARTMENT_IX" ON "HR"."EMPLOYEES" ("DEPARTMENT_ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE INDEX "HR"."EMP_JOB_IX" ON "HR"."EMPLOYEES" ("JOB_ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE INDEX "HR"."EMP_MANAGER_IX" ON "HR"."EMPLOYEES" ("MANAGER_ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;

  CREATE INDEX "HR"."EMP_NAME_IX" ON "HR"."EMPLOYEES" ("LAST_NAME", "FIRST_NAME")
  PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE" ;



  ALTER TABLE "HR"."EMPLOYEES" MODIFY ("EMAIL" CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE);

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_EMAIL_UK" UNIQUE ("EMAIL")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE"  ENABLE;

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_EMP_ID_PK" PRIMARY KEY ("EMPLOYEE_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS
  TABLESPACE "EXAMPLE"  ENABLE;

  ALTER TABLE "HR"."EMPLOYEES" MODIFY ("HIRE_DATE" CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE);

  ALTER TABLE "HR"."EMPLOYEES" MODIFY ("JOB_ID" CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE);

  ALTER TABLE "HR"."EMPLOYEES" MODIFY ("LAST_NAME" CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE);

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_SALARY_MIN" CHECK (salary > 0) ENABLE;



  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY ("DEPARTMENT_ID")
          REFERENCES "HR"."DEPARTMENTS" ("DEPARTMENT_ID") ENABLE;

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_JOB_FK" FOREIGN KEY ("JOB_ID")
          REFERENCES "HR"."JOBS" ("JOB_ID") ENABLE;

  ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_MANAGER_FK" FOREIGN KEY ("MANAGER_ID")
          REFERENCES "HR"."EMPLOYEES" ("EMPLOYEE_ID") ENABLE;



  CREATE OR REPLACE TRIGGER "HR"."SECURE_EMPLOYEES"
  BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
  secure_dml;
END secure_employees;
/
ALTER TRIGGER "HR"."SECURE_EMPLOYEES" DISABLE;

  CREATE OR REPLACE TRIGGER "HR"."UPDATE_JOB_HISTORY"
  AFTER UPDATE OF job_id, department_id ON employees
  FOR EACH ROW
BEGIN
  add_job_history(:old.employee_id, :old.hire_date, sysdate,
                  :old.job_id, :old.department_id);
END;
/
ALTER TRIGGER "HR"."UPDATE_JOB_HISTORY" ENABLE;



  GRANT SELECT, REFERENCES ON "HR"."EMPLOYEES" TO "OE";


SQL> 

如何获取Oracle数据库中某个用户下的所有表、索引、约束、触发器的创建脚本?

在Oracle数据库中,如何快速获取某个用户下的所有表、索引、约束及触发器的创建SQL语句呢?本文给出一个简单的示例脚本,经过测试,除位于回收站下的对象及只读视图的约束语句不能获取,其它对象基本均可获取CREATE语句。

脚本内容如下:

[oracle@oracledg ~]$ cat get_ddl.sql 
-- Be sure the variable 'S' means the Schema name,it should be UPPERCASE.
-- And this script COULDNOT get the constraints CREATE DDL,which CONSTRAINT_TYPE is 'O',cause it's READ ONLY on a view.
-- Author Info:Asher Huang
-- http://OracleOnlinux.cn
-- Mail:3dian14@gmail.com

def S='&Schema'
set serveroutput on
set long 20000
set lines 2000 pages 0 ver off echo off head off feed off
set newpage none
set trimspool on
set long 5000000
spool &S..sql 
DECLARE
  CURSOR C1 IS
    SELECT '&S' AS u_name, table_name AS tab_name FROM user_tables;
  CURSOR C2 IS
    SELECT '&S' AS u_name, index_name AS idx_name FROM user_indexes;
  CURSOR C3 IS
    SELECT '&S' AS u_name, constraint_name AS cons_name FROM user_constraints where constraint_type not in('R','O');
  CURSOR C4 IS
    SELECT '&S' AS u_name, table_name AS tab_name FROM user_constraints where constraint_type in('R');
  CURSOR C5 IS
    SELECT '&S' AS u_name, trigger_name AS trig_name FROM user_triggers;
  V_MSG CLOB;
BEGIN
      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Tables are:');
  FOR x IN C1 LOOP
      select dbms_metadata.get_ddl('TABLE', x.tab_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;

      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Indexes are:');
  FOR x IN C2 LOOP
      select dbms_metadata.get_ddl('INDEX', x.idx_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;

      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Constraints are:');
  FOR x IN C3 LOOP
      select dbms_metadata.get_ddl('CONSTRAINT', x.cons_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;

      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Reference Constraints are:');
  FOR x IN C4 LOOP
      select dbms_metadata.get_dependent_ddl('REF_CONSTRAINT', x.tab_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;

      DBMS_OUTPUT.put_line('The CREATE DDL for schema &S''s Triggers are:');
  FOR x IN C5 LOOP
      select dbms_metadata.get_ddl('TRIGGER', x.trig_name, x.u_name) INTO V_MSG from dual;
      DBMS_OUTPUT.put_line(V_MSG);
  END LOOP;
END;
/
spool off;
[oracle@oracledg ~]$ 

测试获取SCOTT用户的所有表、索引、约束、触发器创建脚本如下:

[oracle@oracledg ~]$ cat SCOTT.sql 
The CREATE DDL for schema SCOTT's Tables are:

  CREATE TABLE "SCOTT"."DEPT" 
   (    "DEPTNO" NUMBER(2,0), 
        "DNAME" VARCHAR2(14), 
        "LOC" VARCHAR2(13), 
         CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"


  CREATE TABLE "SCOTT"."EMP" 
   (    "EMPNO" NUMBER(4,0), 
        "ENAME" VARCHAR2(10), 
        "JOB" VARCHAR2(9), 
        "MGR" NUMBER(4,0), 
        "HIREDATE" DATE, 
        "SAL" NUMBER(7,2), 
        "COMM" NUMBER(7,2), 
        "DEPTNO" NUMBER(2,0), 
         CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"  ENABLE, 
         CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
          REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"


  CREATE TABLE "SCOTT"."BONUS" 
   (    "ENAME" VARCHAR2(10), 
        "JOB" VARCHAR2(9), 
        "SAL" NUMBER, 
        "COMM" NUMBER
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"


  CREATE TABLE "SCOTT"."SALGRADE" 
   (    "GRADE" NUMBER, 
        "LOSAL" NUMBER, 
        "HISAL" NUMBER
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"

The CREATE DDL for schema SCOTT's Indexes are:

  CREATE UNIQUE INDEX "SCOTT"."PK_EMP" ON "SCOTT"."EMP" ("EMPNO") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"


  CREATE UNIQUE INDEX "SCOTT"."PK_DEPT" ON "SCOTT"."DEPT" ("DEPTNO") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"

The CREATE DDL for schema SCOTT's Constraints are:

  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"  ENABLE


  ALTER TABLE "SCOTT"."DEPT" ADD CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"  ENABLE

The CREATE DDL for schema SCOTT's Reference Constraints are:

  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
          REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE

The CREATE DDL for schema SCOTT's Triggers are:
[oracle@oracledg ~]$ 

感谢好人李晨希!!!

啥也不用多说,千言万语浓缩成:感谢!

先看我自己在厦门小鱼网上发的求助帖http://bbs.xmfish.com/read-htm-tid-6978308-fpage-2.html


 

[04-05]SOS:钱包、身份证、银行卡丢失…

各位鱼友:
       你们好!
       本人于昨天晚上(4月4日)大约21:30–21:50分期间,骑自行车载着女朋友,在从莲前嘉盛豪园小区回福满山庄(瑞景城潘宅)的路上,丢失本人钱包,内有现金300元左右,本人身份证一张(4115211982****7019),签发机关:天津市公安局西青分局,银行卡:工商银行一张、建行一张、浦发银行一张,本人厦门社保卡一张
       如有拾到者,请致电18759210738联系失主,或请各位鱼友帮忙转发,必重谢

       恳请管理员不要删帖,同样多谢!!!


下面是同事在新浪微博上发现的好心人http://weibo.com/1690767444/yd61VzGPA


寻失主:今晚在加州商业广场招商莲前支行门口的行人车道上捡到一个 棕色钱包、内含失主身份证、社保卡、地税局发票、若干银行卡、若干人民币及两张女性证件照。失主名为黄伟,天津人。希望失主看到这条微博迅速与我联系。求扩散!@厦门街头巷尾 @厦门商报 @厦门时报 @厦门情报 @厦门卫视 @厦门警方在线

收起|查看大图|向左转|向右转

转发(34)| 收藏| 评论(23)4月4日22:12 来自新浪微博


 

 

感谢这位好心人,待会儿好好答谢这位李晨希好心人。