一步一步在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配置信息如下:

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

一步一步在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 11g Administrator’s Guide笔记2:如何手工创建、删除11gR2数据库?

在前一篇文章中提到阅读Oracle 11gR2 Administrator‘s Guide(文档编号E25494-01)时,简单描述了DDL_LOCK_TIMEOUT参数。在Oracle 11gR2 Administrator‘s Guide文档的chapter 2 Creating and Configuring an Oracle Database章节时,提到手工建库,本文简单记录一下,如何在OEL 5.5 X86_64位环境下,手工创建及删除11.2.0.1.0的数据库,将文件放到文件系统上存放。当然,利用DBCA来建库、删库比较简单,就不再赘述了。具体操作步骤如下:

1 前提条件,操作系统上已经安装好Oracle 11gR2 的软件,其中环境变量ORACLE_BASE=/u01/app/oracleORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

[root@OCM11g ~]# su - oracle
OCM11g-> env | grep ORA
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
OCM11g->

2 确认环境变量,本例中选择ORACLE_SID=manualdb,ORACLE_HOME选用原有的/u01/app/oracle/product/11.2.0/db_1

OCM11g-> id
uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)
OCM11g-> uname -rm
2.6.18-194.el5 x86_64
OCM11g-> export ORACLE_SID=manualdb
OCM11g-> env | grep ORA
ORACLE_SID=manualdb
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
OCM11g->

3 创建初始化参数文件,这里将参数文件放到系统默认的路径下,即$ORACLE_HOME/dbs,命名为initmanualdb.ora,其内容如下:

OCM11g-> cat /u01/app/oracle/product/11.2.0/db_1/dbs/initmanualdb.ora 
db_name=manualdb
memory_target=600m
OCM11g->

简单起见,我们只在初始化参数文件中指定了db_name,memory_target这两个参数。我们知道,启动数据库实例的最少参数只需要一个db_name即可,这里选择db_name=manualdb,附加一个memory_target=600m,这个是11g的新参数,用于控制SGA+PGA的总大小。当然,也可以在参数文件中指定control_files,如果该参数被忽略的话,那么Oracle会自动在$ORACLE_HOME/dbs路径下创建一个名为cntrl$ORACLE_SID.dbf的控制文件。

4 准备将来存放数据文件、日志文件的路径。这两类文件的路径如下:

datafile:

OCM11g-> mkdir -p /u02/manualdb/oradata

online log:

OCM11g-> mkdir -p /u02/manualdb/onlinelog
OCM11g-> ll /u02/manualdb/
total 8
drwxr-xr-x 2 oracle oinstall 4096 Mar 30 10:56 onlinelog
drwxr-xr-x 2 oracle oinstall 4096 Mar 30 10:56 oradata
OCM11g->

5 启动manualdb实例到NOMOUNT状态,其实,在该环境下,我们的控制文件尚未生成,实例至多也只能加载到NOMOUNT状态:

OCM11g-> id
uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)
OCM11g-> env | grep ORA
ORACLE_SID=manualdb
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
OCM11g-> sqlplus 

SQL*Plus: Release 11.2.0.1.0 Production on Fri Mar 30 10:59:32 2012

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

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  626327552 bytes
Fixed Size                  2215944 bytes
Variable Size             373297144 bytes
Database Buffers          243269632 bytes
Redo Buffers                7544832 bytes
ORA-00205: error in identifying control file, check alert log for more info

SQL>

上述报错ORA-00205提示控制文件找不到,正是我们所预见的,因为当前控制文件还未生成,所以数据库没法MOUNT,说明数据库是NOMOUNT状态。这时,也可以看到相关的后台进程已经启动:

SQL> !
OCM11g-> ps -ef | grep ora_|grep -v grep
oracle   14885     1  0 11:02 ?        00:00:00 ora_pmon_manualdb
oracle   14887     1  0 11:02 ?        00:00:00 ora_vktm_manualdb
oracle   14891     1  0 11:02 ?        00:00:00 ora_gen0_manualdb
oracle   14893     1  0 11:02 ?        00:00:00 ora_diag_manualdb
oracle   14895     1  0 11:02 ?        00:00:00 ora_dbrm_manualdb
oracle   14897     1  0 11:02 ?        00:00:00 ora_psp0_manualdb
oracle   14899     1  0 11:02 ?        00:00:00 ora_dia0_manualdb
oracle   14903     1  6 11:02 ?        00:00:27 ora_mman_manualdb
oracle   14905     1  0 11:02 ?        00:00:01 ora_dbw0_manualdb
oracle   14907     1  0 11:02 ?        00:00:00 ora_lgwr_manualdb
oracle   14909     1  0 11:02 ?        00:00:00 ora_ckpt_manualdb
oracle   14911     1  0 11:02 ?        00:00:00 ora_smon_manualdb
oracle   14913     1  0 11:03 ?        00:00:00 ora_reco_manualdb
oracle   14915     1  0 11:03 ?        00:00:00 ora_mmon_manualdb
oracle   14917     1  0 11:03 ?        00:00:00 ora_mmnl_manualdb
OCM11g->

6 执行下述CREATE DATABASE的命令,开始手工创建Oracle 数据库:

SQL> conn / as sysdba;
Connected.
SQL> select open_mode from v$database;
select open_mode from v$database
                      *
ERROR at line 1:
ORA-01507: database not mounted

SQL> CREATE DATABASE manualdb
  2     USER SYS IDENTIFIED BY oracle
  3     USER SYSTEM IDENTIFIED BY oracle
  4     LOGFILE GROUP 1 ('/u02/manualdb/onlinelog/redo01a.log') SIZE 50M BLOCKSIZE 512,
  5             GROUP 2 ('/u02/manualdb/onlinelog/redo02a.log') SIZE 50M BLOCKSIZE 512
  6     MAXLOGFILES 5
  7     MAXLOGMEMBERS 5
  8     MAXLOGHISTORY 1
  9     MAXDATAFILES 100
 10     CHARACTER SET AL32UTF8
 11     NATIONAL CHARACTER SET AL16UTF16
 12     EXTENT MANAGEMENT LOCAL
 13     DATAFILE '/u02/manualdb/oradata/system01.dbf' SIZE 300M REUSE
   SYSAUX DATAFILE '/u02/manualdb/oradata/sysaux01.dbf' SIZE 300M REUSE
   DEFAULT TABLESPACE users
      DATAFILE '/u02/manualdb/oradata/users01.dbf'
 17        SIZE 5M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
 18     DEFAULT TEMPORARY TABLESPACE tempts1
 19        TEMPFILE '/u02/manualdb/oradata/temp01.dbf'
 20        SIZE 20M REUSE
 21     UNDO TABLESPACE undotbs
 22        DATAFILE '/u02/manualdb/oradata/undotbs01.dbf'
 23        SIZE 20M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

Database created.

SQL> select name,open_mode from v$database;

NAME      OPEN_MODE
--------- --------------------
MANUALDB  READ WRITE

SQL>

7 创建数据字典视图,分别执行下述脚本来完成:

SQL> @?/rdbms/admin/catalog.sql
......
......
SQL> @?/rdbms/admin/catproc.sql
......
......
SQL> @?/sqlplus/admin/pupbld.sql
......
......

上述3个脚本的说明见下表:

The Scripts and descriptions

Script

Description

CATALOG.SQL

Creates the views of the data dictionary tables,

the dynamic performance views,and public synonyms

for many of the views.Grants PUBLIC access to the synonyms.

CATPROC.SQL

Runs all scripts required for or used with PL/SQL.

PUPBLD.SQL

Required for SQL*Plus. Enables SQL*Plus to disable

commands by user.

8 至此,我们完成了手工创建Oracle 数据库。

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

5 rows selected.

SQL> select name,open_mode from v$database;

NAME      OPEN_MODE
--------- --------------------
MANUALDB  READ WRITE

1 row selected.

SQL> select name from v$datafile
  2  union
  3  select name from v$controlfile
  4  union
  5  select member from v$logfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/product/11.2.0/db_1/dbs/cntrlmanualdb.dbf
/u02/manualdb/onlinelog/redo01a.log
/u02/manualdb/onlinelog/redo02a.log
/u02/manualdb/oradata/sysaux01.dbf
/u02/manualdb/oradata/system01.dbf
/u02/manualdb/oradata/undotbs01.dbf
/u02/manualdb/oradata/users01.dbf

7 rows selected.

SQL>

9 最后,如果该数据库不需要的话。我们可以执行手工删除数据库,当然必须要将数据库启动到MOUNT RESTRICT状态来删除

如何确认实例是否是RESTRICTED MODE:

SQL> select instance_name,status,startup_time,logins from v$instance;

INSTANCE_NAME   STATUS       STARTUP_TIME        LOGINS
--------------- ------------ ------------------- ----------
manualdb        MOUNTED      2012/03/30 13:38:52 ALLOWED

1 row selected.

SQL> alter system enable restricted session;

System altered.

SQL> select instance_name,status,startup_time,logins from v$instance;

INSTANCE_NAME   STATUS       STARTUP_TIME        LOGINS
--------------- ------------ ------------------- ----------
manualdb        MOUNTED      2012/03/30 13:38:52 RESTRICTED

1 row selected.

SQL> alter system disable restricted session;

System altered.

SQL> select instance_name,status,startup_time,logins from v$instance;

INSTANCE_NAME   STATUS       STARTUP_TIME        LOGINS
--------------- ------------ ------------------- ----------
manualdb        MOUNTED      2012/03/30 13:38:52 ALLOWED

1 row selected.

SQL>

通过查看V$INSTANCE动态性能视图的LOGINS字段,如果该值为ALLOWED,说明实例是正常启动,并未进入RESTRICTED MODE,普通用户可以正常访问;如果该值为RESTRICTED说明是RESTRICTED MODE,即需要具有RESTRICTED SESSION系统权限的用户方可访问;

手工删除数据库:

SQL> select instance_name,status,startup_time,logins from v$instance;

INSTANCE_NAME   STATUS       STARTUP_TIME        LOGINS
--------------- ------------ ------------------- ----------
manualdb        MOUNTED      2012/03/30 13:38:52 ALLOWED

1 row selected.

SQL> drop database;
drop database
*
ERROR at line 1:
ORA-12719: operation requires database is in RESTRICTED mode

SQL> alter system enable restricted session;

System altered.

SQL> select instance_name,status,startup_time,logins from v$instance;

INSTANCE_NAME   STATUS       STARTUP_TIME        LOGINS
--------------- ------------ ------------------- ----------
manualdb        MOUNTED      2012/03/30 13:38:52 RESTRICTED

1 row selected.

SQL> drop database;

Database dropped.

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>

此时,Oracle自动删除该数据库的所有数据文件、联机重做日志文件、控制文件以及初始化参数文件。从alert日志文件里可以看到下述信息:

Fri Mar 30 13:45:33 2012
drop database
Deleted file /u02/manualdb/oradata/system01.dbf
Deleted file /u02/manualdb/oradata/sysaux01.dbf
Deleted file /u02/manualdb/oradata/undotbs01.dbf
Deleted file /u02/manualdb/oradata/users01.dbf
Deleted file /u02/manualdb/onlinelog/redo01a.log
Deleted file /u02/manualdb/onlinelog/redo02a.log
Deleted file /u02/manualdb/oradata/temp01.dbf
Deleted file /u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_manualdb.f

10 简单总结,可见手工创建、删除数据库也很简单。当然,在第6步中执行手工建库的命令中还有诸多其它选项,比如选择OMF,这时,只要在参数文件中指定DB_CREATE_FILE_DEST参数,那么建库的命令将更加简单。