免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1060 | 回复: 0
打印 上一主题 下一主题

rac2 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-23 08:06 |只看该作者 |倒序浏览

将以下内容添加到.bashrc文件里。   
    export LD_ASSUME_KERNEL=2.4.1
    export ORACLE_BASE=/oracle/ora9
    export ORACLE_HOME=/oracle/ora9/product/9.2
    export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
    export ORACLE_OWNER=oracle
    export ORACLE_SID=rac9i1
    export ORACLE_TERM=vt100
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:
/usr/local/lib:$LD_LIBRARY_PATH

    以上步骤必须在两个节点上分别完成。

    注意: 红色部分,在节点linux1上ORACLE_SID=rac9i1,而在节点linux2上则为ORACLE_SID=rac9i2。而蓝色部分,很多资料上只是说LD_LIBRARY_PATH=$ORACLE_HOME/lib即可。但是经过笔者测试,只写这些是不够的,在下面srvconfig –init时会报错。必须按照上面蓝色部分的内容进行配置。  



9.为共享设备划分裸设备
    通常,对于RAC,我们都会使用裸设备来存放数据文件等需要共享的数据库文件。这就需要我们对共享存储划分出若干的裸设备,每个裸设备对应一个文件。  
    9.1 磁盘分区  
    我们要对共享存储进行分区,该步骤只需要在其中一个节点上完成即可。笔者划分了3个主分区(primary)和一个包含11个分区的扩展分区(extend)。注意,linux上最多只能划分15个分区。超过的部分,linux是无法识别的。对每个分区的规划如下所示:  
    分区名尺寸存放的文件
    /dev/sdb110M用于存放Cluster Manager Quorum文件
    /dev/sdb2350M回滚段表空间1:Undotbs1
    /dev/sdb3350M回滚段表空间1:Undotbs2
    /dev/sdb5500M系统表空间:system
    /dev/sdb610MSpfile
    /dev/sdb7300M临时表空间:temp
    /dev/sdb8300M用户表空间:user和indx,也可以不设置该分区
    /dev/sdb910M控制文件:control file
    /dev/sdb1010M控制文件:control file
    /dev/sdb1120M第一个节点的第一组联机日志文件
    /dev/sdb1220M第一个节点的第二组联机日志文件
    /dev/sdb1320M第二个节点的第一组联机日志文件
    /dev/sdb1420M第二个节点的第二组联机日志文件
    /dev/sdb15100MSrvconfig模块所需要的Shared Configuration文件

    规划好以后,我们可以开始实际创建这些分区了。进入linux,执行如下命令进入分区界面。  
    [root @linux1 /root]# fdisk /dev/sdb
  
    首先输入n,然后输入p,再输入1,回车接受缺省值,再输入+10M,这样我们就创建了/dev/sdb1。同样的方法,我们可以创建sdb2和sdb3。再次输入n,然后输入e,回车接受缺省值,再回车接受缺省值,这样,我们就创建了扩展分区sdb4,同时把剩下的空间全都给了sdb4。接下来,我们输入n,然后回车接受缺省值,再输入+500M,这样,我们就创建了sdb5。同样的方法,我们可以把剩下的所有分区都创建出来。
[email=DL@bitsCN_com][/email]

    创建完毕以后,输入p,显示我们刚才所创建的所有分区,确认无误以后,输入w,从而保存我们所创建的分区,并更新分区表。
[email=DL@bitsCN_com][/email]
    9.2 挂载裸设备  
    该步骤需要在两个节点分别进行。对裸设备的规划如下:

    裸设备文件名挂载的分区存放的文件
    /dev/raw/raw1/dev/sdb1Cluster Manager Quorum
    /dev/raw/raw2/dev/sdb2Undotbs1
    /dev/raw/raw3/dev/sdb3Undotbs2
    /dev/raw/raw4/dev/sdb5system
    /dev/raw/raw5/dev/sdb6Spfile
    /dev/raw/raw6/dev/sdb7temp
    /dev/raw/raw7/dev/sdb8user和indx
    /dev/raw/raw8/dev/sdb9control file
    /dev/raw/raw9/dev/sdb10control file
    /dev/raw/raw10/dev/sdb11Log1-thread1
    /dev/raw/raw11/dev/sdb12Log2-thread1
    /dev/raw/raw12/dev/sdb13Log3-thread2
    /dev/raw/raw13/dev/sdb14Log4-thread2
    /dev/raw/raw14/dev/sdb15Shared Configuration  
    确定了裸设备的规划以后,将以下内容添加到/etc/rc.local文件。
    raw /dev/raw/raw1 /dev/sdb1# Cluster Manager Quorum
    raw /dev/raw/raw2 /dev/sdb2#undotbs1
    raw /dev/raw/raw3 /dev/sdb3#undotbs2
    raw /dev/raw/raw4 /dev/sdb5#sys01
    raw /dev/raw/raw5 /dev/sdb6#spfile
    raw /dev/raw/raw6 /dev/sdb7#temp01
    raw /dev/raw/raw7 /dev/sdb8#user01&indx01
    raw /dev/raw/raw8 /dev/sdb9#ctl1
    raw /dev/raw/raw9 /dev/sdb10#ctl2
    raw /dev/raw/raw10 /dev/sdb11#log1-thread1
    raw /dev/raw/raw11 /dev/sdb12#log2-thread1
    raw /dev/raw/raw12 /dev/sdb13#log3-thread2
    raw /dev/raw/raw13 /dev/sdb14#log4-thread2
    raw /dev/raw/raw14 /dev/sdb15#share configuration file  
    检查无误后,修改/dev/raw1、/dev/raw/raw2一直到/dev/raw/raw15这15个裸设备文件的宿主为oracle。


    [root @linux1 /root]# chown oracle.dba /dev/raw/raw1
    [root @linux1 /root]# chown oracle.dba /dev/raw/raw2
    。。。。。。。
    [root @linux1 /root]# chown oracle.dba /dev/raw/raw15
  
    分别重新启动两个节点。启动完毕以后,运行如下命令确定裸设备的配置情况。


    [root @linux1 /root]# raw -aq
  
    10.检查安装oracle所需要的linux模块以及补丁

    在两个节点上分别确定以下这些rpm包是否都存在。

    make-3.79
    binutils-2.11
    openmotif-2.2.2-16
    setarch-1.3-1 compat-gcc-c++-7.3-2.96.122
    compat-libstdc++-7.3-2.96.122
    compat-gcc-7.3-2.96.122
    compat-db-4.0.14-5
    compat-libstdc++-devel-7.3-2.96.122

    如果没有,则从AS3的安装介质上找到这些包并加以安装。安装好上面这些模块以后,需要打补丁,补丁号为:3006854。可以到oracle官方网站下载该补丁,发送到两个节点上以后,执行:
    [root @linux1 /root]# sh rhel3_pre_install.sh

11.安装Oracle Cluster Manager  
    11.1 生成OCM管理文件  
    该OCM管理文件必须位于共享存储上,按照我们的规划,应该放在/dev/raw/raw1上。该步骤只需要在其中一个节点上执行即可。
[email=DL@bitsCN_com][/email]

    [root @linux1 /root]# su - oracle
    [oracle@linux1 oracle]$ dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=1024

    11.2 安装OCM

    [oracle@linux1 oracle]$ su - root
    [root @linux1 /root]# mv /usr/bin/gcc /usr/bin/gcc323
    [root @linux1 /root]# ln -s /usr/bin/gcc296 /usr/bin/gcc
    [root @linux1 /root]# mv /usr/bin/g++ /usr/bin/g++323
    [root @linux1 /root]# ln -s /usr/bin/g++296 /usr/bin/g++
  
    检验一下gcc和g++的版本。  
    [root@linux1 root]# gcc -v
    Reading specs from /usr/lib/gcc-lib/i386-redhat-linux7/2.96/specs
    gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-122)
    [root@linux1 root]# g++ -v
    Reading specs from /usr/lib/gcc-lib/i386-redhat-linux7/2.96/specs
    gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-122)
  
    将下载下来的oracle安装介质(笔者下载的是ship_9204_linux_disk1.cpio.gz、ship_9204_linux_disk2.cpio.gz和ship_9204_linux_disk3.cpio.gz)拷贝到其中一个节点上。可以通过ftp拷贝也可以通过samba服务来拷贝。笔者个人倾向samba,很方便。拷贝完毕以后,使用如下命令解压。

    [root @linux1 /setup]# gunzip ship_9204_linux_disk1.cpio.gz
    [root @linux1 /setup]# gunzip ship_9204_linux_disk2.cpio.gz
    [root @linux1 /setup]# gunzip ship_9204_linux_disk3.cpio.gz
    [root @linux1 /setup]# cpio -idmv
    解压完毕,在当前目录下有三个目录:Disk1、Disk2、Disk3。修改宿主信息。
[email=DL@bitsCN_com][/email]

   [root @linux1 /setup]# chown –R oracle.dba Disk1
    [root @linux1 /setup]# chown –R oracle.dba Disk2
    [root @linux1 /setup]# chown –R oracle.dba Disk3
  
     设置xhost +  
    [root @linux1 /setup]# xhost +
  
    开始安装OCM  
    [root @linux1 /setup]# su - oracle
    [oracle@linux1 oracle]$ /oracle/setup/Disk1/runInstall.sh
  
    在界面上,选择安装oracle cluster manager。点击next,会要求你输入public node,这时你分两行输入linux1和linux2。点击next,会要求你输入private node,这时你分两行输入linux1-prv和linux2-prv。点击next,会要求输入Quorum文件,这时输入/dev/raw/raw1。点击next开始安装cluster manager软件。这个软件很小,安装很快就会结束。

    11.3 配置OCM


    [oracle@linux1 oracle]$ cd $ORACLE_HOME/oracm/admin
    [oracle@linux1 admin]$ cp cmcfg.ora.tmp cmcfg.ora
    [oracle@linux1 admin]$ vi cmcfg.ora
  
    将该文件内容修改为如下内容:  
    HeartBeat=15000
    ClusterName=Oracle Cluster Manager, version 9i
    PollInterval=1000
    MissCount=20
    PrivateNodeNames=linux1-prv linux2-prv
    PublicNodeNames=linux1 linux2
    ServicePort=9998
    HostName=linux1
    CmDiskFile=/dev/raw/raw1

    11.4 启动OCM  
   [oracle@linux1 oracle]$ rm $ORACLE_HOME/oracm/log/*.ts
[oracle@linux1 oracle]$ cd $ORACLE_HOME/oracm/bin
[oracle@linux1 bin]$ ./ocmstart.sh
[oracle@linux1 bin]$ ps –ef|grep oracm
  
     如果没有发现oracm进程,则检查$ORACLE_HOME/oracm/log/下的cm.log文件,查看错误消息。
12.安装Oracle软件
    [oracle@linux1 oracle]$ /oracle/setup/Disk1/runInstall.sh
  
    安装过程比较简单,也没有出现任何错误。注意选择只安装oracle软件,不要安装数据库。  
    13.初始化Shared Configuration文件

    Oracle软件安装完毕以后,开始设置Shared Configuration文件。
[email=DL@bitsCN_com][/email]

    [oracle@linux1 oracle]$ su - root
    [root @linux1 /root]# mkdir -p /var/opt/oracle
    [root @linux1 /root]# touch /var/opt/oracle/srvConfig.loc
    [root @linux1 /root]# chown oracle:dba /var/opt/oracle/srvConfig.loc
    [root @linux1 /root]# chmod 755 /var/opt/oracle/srvConfig.loc

[email=www@bitscn@com][/email]

    在srvConfig.loc文件中添加Shared Configuration文件所在的路径。而笔者的Shared Configuration文件位于共享存储上,对应/dev/raw/raw14。
[email=DL@bitsCN_com][/email]

    [root @linux1 /root]# echo “srvconfig_loc=/dev/raw/raw14” >> /var/opt/oracle/srvConfig.loc
  
    创建该Shared Configuration文件。

   [root @linux1 /root]# su - oracle
[oracle@linux1 oracle]$ dd if=/dev/zero of=/dev/raw/raw14 bs=1024 count=102400
  
     初始化该Shared Configuration文件  
    [oracle@linux1 oracle]$ srvconfig -init
  
    笔者一开始执行报错,结果把环境变量$LD_LIBRARY_PATH在.bashrc中设置为如下值后,再启动就不会报错了:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH。  
    14.创建数据库
    使用dbca创建数据库还是很简单的。不过,笔者还是走了些弯路。主要是undotbs1不能太小,笔者一开始设置为240M,结果建库时总是报错。后来加大到350M后,成功建库。启动dbca前,要先在两个节点上分别启动gsd进程。

    [oracle@linux1 oracle]$ $ORACLE_HOME/bin/gsdctl start
    然后启动dbca。  
    [oracle@linux1 oracle]$ dbca
  
    选择创建cluster database,点击next,把所有可以不选的组件都不选,点击next后,在初始化参数设置的地方,修改spfile的路径为:/dev/raw/raw5。然后点击next,直到最后界面,笔者把表空间indx、users、tools都删除了,为了建库干净。然后按照前面的规划,分别把裸设备文件名填写到对应的文件上去。注意,每个文件都不要设定autoextend on。最后选择生成脚本,点击finish。

    当脚本生成完毕时,先别急着点ok。进入脚本所在目录,检查一下init.ora.xxxxxxxxxxxxx文件(这里xxxxxxxxxxxxx为随即序列号)。着重检查最后几行,不知为何,自动生成的init.ora文件会有点问题。比如,笔者这里生成的init.ora.7232006164055内容为:

    rac9i1.instance_name=rac9i
    rac9i2.instance_name=rac9i2
    rac9i1.instance_number=1
    rac9i2.instance_number=2
    rac9i2.local_listener=LISTENER_RAC9I
    rac9i1.local_listener=LISTENER_RAC9I1
    rac9i2.thread=2
    rac9i1.thread=1
    rac9i2.undo_tablespace=UNDOTBS2
    rac9i1.undo_tablespace=UNDOTBS1
[email=DL@bitsCN_com][/email]

    笔者用红色标示出来的地方是有问题的,按照这样的初始化参数建立起来的RAC数据库,第二个节点没有办法通过负载均衡来访问。同时,最好把local_listener和remote_listener修改掉。最后修改后的这块内容为:

    rac9i1.instance_name=rac9i1
    rac9i2.instance_name=rac9i2
    rac9i1.instance_number=1
    rac9i2.instance_number=2
    rac9i2.local_listener='(address=(protocol=tcp)(host=linux2)(port=1521))'
    rac9i2.remote_listener='(address=(protocol=tcp)(host=linux1)(port=1521))'
    rac9i1.local_listener='(address=(protocol=tcp)(host=linux1)(port=1521))'
    rac9i1.remote_listener='(address=(protocol=tcp)(host=linux2)(port=1521))'
    rac9i2.thread=2
    rac9i1.thread=1
    rac9i2.undo_tablespace=UNDOTBS2
    rac9i1.undo_tablespace=UNDOTBS1
   
    修改完这些内容以后,回到原来的dbca界面,点击ok,就开始数据库的正式安装了。当然,也可以在dbca创建好数据库以后再修改这些内容也是可以的。创建完数据库以后,第二个节点的实例也会自动启动。这时,整个RAC数据库环境就已经搭建完毕了。  


15.验证并测试RAC数据库
    在服务器端,执行如下语句。观察是否有两个实例在运行。


    SQL> select INSTANCE_NUMBER, STATUS,HOST_NAME from gv$instance;
    INSTANCE_NUMBER STATUSHOST_NAME
    --------------- ------------ ------------------
    1OPENlinux1
    2OPENlinux2
  
    15.1 测试负载均衡  
    在客户端上修改tnsnames.ora文件,添加如下内容:
    rac =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = linux2)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = linux1)(PORT = 1521))
    )
    (CONNECT_DATA =
    (service_name = rac9i)
    (failover_mode=(type=select)(method=basic))
    )
    (LOAD_BALANCE=ON)
    (FAILOVER=ON)
    )  
    然后,为了能识别主机名linux1和linux2,笔者还修改了C:\WINDOWS\system32\drivers\etc目录下的hosts文件,添加如下内容:  
    134.251.114.140linux1
    134.251.114.141linux2
[email=DL@bitsCN_com][/email]

    最后,在命令窗口执行tnsping rac来检验是否能够连通。检测无误以后,开始测试。分两种方法,第一种方法是开两个命令行窗口,在一个窗口中分别输入如下的命令,然后再在另外一个窗口也输入如下的命令。


    D:\>sqlplus /nolog
    SQL> connect
[email=sys/hanson@rac]sys/hanson@rac[/email]
as sysdba
    SQL> select instance_name from v$instance;
    SQL> exit

[email=DL@bitsCN_com][/email]

    但是,从结果看起来,并没有实现负载均衡。两个窗口出现的都是rac9i1。而不是笔者想象中的一个窗口是rac9i1,另一个窗口是rac9i2。笔者又开了一个命令行窗口,再次重复执行上面的命令,仍然显示rac9i1。  
    换第二种测试方法,建立一个test.sql文件,内容如下:  
    connect
[email=test/test@rac]test/test@rac[/email]
;
    select instance_name from v$instance;
    exit

[email=DL@bitsCN_com][/email]

    然后,打开一个命令行窗口,反复执行如下命令:
[email=DL@bitsCN_com][/email]
    D:\>sqlplus /nolog @c:\test.sql
  
    这时,显示出来的实例名确实是负载均衡了,rac9i1和rac9i2交替出现。笔者认为,这样的负载均衡意义似乎不是很大。

    15.2 测试failover  
    实现failover,需要在客户端的tnsnames.ora文件的CONNECT_DATA节点里添加如下行:  
    (failover_mode=(type=select)(method=basic))  
    进入命令行窗口。

    D:\>sqlplus /nolog
    SQL> connect
[email=sys/hanson@rac]sys/hanson@rac[/email]
as sysdba
    SQL> select instance_name from v$instance;
    INSTANCE_NAME
    ---------------
    rac9i1

[email=www@bitscn@com][/email]

    这时,进入linux1节点,shutdown实例以后,再次回到上面的命令行窗口,再次执行如下语句:  
   SQL> select instance_name from v$instance;
    INSTANCE_NAME
    ---------------
    rac9i2
  
     从结果可以看到,确实自动切换到了rac9i2实例上。说明failover起作用了。




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/44757/showart_482472.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP