分享
 
 
 

在RHEL 3 的单机上安装oracle9i RAC

王朝oracle·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

在RHEL 3 的单机上安装oracle9i RAC

这两天闲来无事,想起不久前看到文章说可以在单机上安装Oracle9i Rac,就到处找资料,想自己装来玩玩.将过程和心得贴出来,与大家分享.

安装过程中参考的文章:

http://chinaunix.net/jh/19/119236.html

在建立数据库以后,启动第二个实例时,参考了作者的做法,在此对作者表示感谢!

安装过程中参考的官方安装文档,RAC_1030.pdf.英文的,而且不是单机,但有很大的参考价值,因此当附件传上来.

安装开始前,请先参考在<RHEL3上安装Oracle9.2.0>.

http://www.itpub.net/showthread.php?threadid=171693

补丁包和环境变量的设置,请看此文.

1.安装 Oracle Cluster Manager 9.2.0

安装环境和变量的设置请看上文中的1-5节.

注意:

如果以前没有打过补丁3006845,则需要打.如果已经打过了,则不需要再打.

首先生成一个Quorum Disk File.在多节点RAC中,需要是一个裸设备或是在OCFS文件系统上. 但因为我们是单机,因此可以随便指定一个文件.用命令来生成:

 $ dd if=/dev/zero of=/u02/rac/RacFile bs=1024 count=1024

我看metalink上的文章说这个文件至少要4+(4*number_of_node)KB,我给了1M,足够了.

然后到Disk1下运行runInstaller.出现产品选择界面时,选择 'Oracle Cluster Manager 9.2.0.1.0'

出现'Public Node Information'时,填入本机的hostname. 就是hostname命令返回的值,注意,不要将后面的域也填进去了! 不能包含'.'字符.

因为是单机,所以只填一个

出现'Private Node Information'时,也填本机hostname.

出现watchdog 参数时,接受缺省值.在升级到9.2.0.4后,不会用watchdog.

出现Quorum Disk Information选项时,填刚才生成的文件名/u02/rac/RacFile

然后就可以安装了.

装完以后,退出安装界面,不要安装数据库软件.

2.打补丁到 OCM 9.2.0.4

需要先打OCM的补丁.我第一次装的时候,先装了数据库软件,然后升级OCM,然后打数据库的补丁.但打数据库的补丁时,因为没有出现选择节点的画面,让我误认为OCM升级失败,只得将软件全部删掉重新装.

但先打OCM的补丁,打数据库软件的补丁时,也没有出现选择节点的画面,我硬着头皮装下去,结果能正确将补丁打上.不知道在多节点集群环境中,是不是也不出现选择节点的画面.

将补丁包解开,运行runInstaller,打补丁 OCM 9.2.0.4 .

过程跟安装OCM 9.2.0.1类似.

3.配置RAC,并启动

OCM9.2.0.4使用hangcheck-timer来代替watchdog,因此手工修改配置文件和启动文件.

先检查模块是否已经安装,看这个文件是否存在:

/lib/modules/2.4.21-4.EL/kernel/drivers/char/hangcheck-timer.o

如果不存在,则需要安装.

因为我的系统中,有这个文件,我就没有去找这个文件到底在哪个包中,所以,我也不知道该装哪个包!

配置内核模块,使用hangcheck-timer代替watchdog:

# lsmod │ grep watchdog

应该没有输出.否则使用

# rmmod 命令去掉这个模块.

然后加载hangcheck-timer模块

# insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

Using /lib/modules/2.4.21-4.EL/kernel/drivers/char/hangcheck-timer.o

确认模块已经加载:

# lsmod │ grep hang

hangcheck-timer 2648 0 (unused)

使系统一启动就加载这个模块,需要在/etc/rc.local文件最后加入一行:

/sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

修改配置文件和启动文件:

 $ORACLE_HOME/oracm/bin/ocmstart.sh

启动命令行.将所有有关watchdog的行全部注释掉.将这几行注释为以下的样子:

# watchdogd's default log file

# WATCHDOGD_LOG_FILE= $ORACLE_HOME/oracm/log/wdd.log

# watchdogd's default backup file

# WATCHDOGD_BAK_FILE= $ORACLE_HOME/oracm/log/wdd.log.bak

# Get arguments

# watchdogd_args=`grep '^watchdogd'  $OCMARGS_FILE │\

# sed -e 's+^watchdogd *++'`

# Check watchdogd's existance

# if watchdogd status │ grep 'Watchdog daemon active' >/dev/null

# then

# echo 'ocmstart.sh: Error: watchdogd is already running'

# exit 1

# fi

# Backup the old watchdogd log

# if test -r  $WATCHDOGD_LOG_FILE

# then

# mv  $WATCHDOGD_LOG_FILE  $WATCHDOGD_BAK_FILE

# fi

# Startup watchdogd

# echo watchdogd  $watchdogd_args

# watchdogd  $watchdogd_args

 $ORACLE_HOME/oracm/admin/ocmargs.ora

参数文件,去掉或注释掉下面这行:

watchdogd

 $ORACLE_HOME/oracm/admin/cmcfg.ora

配置文件.将cmcfg.ora.tmp拷贝为cmcfg.ora文件,并修改成以下样子:

HeartBeat=15000

ClusterName=Oracle Cluster Manager, version 9i

PollInterval=1000

MissCount=210

PrivateNodeNames=hostname

PublicNodeNames=hostname

ServicePort=9998

HostName=ao-040

CmDiskFile=/u02/rac/RacFile

KernelModuleName=hangcheck-timer

其中,PrivateNodeNames和PublicNodeNames要跟你安装OCM时填入的hostname相同.

CmDiskFile要跟你先前生成的Quorum Disk File一样.

最后一行确认使用hangcheck-timer模块.

启动OCM:

官方文档中,创建了一个启动脚本,因为是用来玩,就省略了这一步.用命令行来启动:

 $ su

# cd  $ORACLE_HOME/oracm/bin

# ./ocmstart.sh

oracm </dev/null 2>&1 >/u01/app/oracle/product/9.2.0.4.0/oracm/log/cm.out &

如果启动太频繁,可能会报错:

ocmstart.sh: Error: Restart is too frequent

ocmstart.sh: Info: Check the system configuration and fix the problem.

ocmstart.sh: Info: After you fixed the problem, remove the timestamp file

ocmstart.sh: Info: "/u01/app/oracle/product/9.2.0.4.0/oracm/log/ocmstart.ts"

这时,用

# killall oracm

# ps -ef │ grep oracm

来确认OCM没有启动.再将/u01/app/oracle/product/9.2.0.4.0/oracm/log/ocmstart.ts文件删除了就可以启动了.

# rm -f /u01/app/oracle/product/9.2.0.4.0/oracm/log/ocmstart.ts

# ./ocmstart.sh

oracm </dev/null 2>&1 >/u01/app/oracle/product/9.2.0.4.0/oracm/log/cm.out &

--------------------------------------------------------------------------------

vipcui 回复于:2004-06-02 12:58:10

4.安装Enterprise Server 9.2.0

配置好OCM,并启动后,就可以开始安装数据库软件了.

首先装9.2.0

首先需要生成一个共享配置文件,用于多实例间和多监听器间的通信.

文档中说要是裸设备或在共享文件系统上.因为是单机,因此可以在任意位置生成.

 $ dd if=/dev/zero of=/u02/rac/SrvConfigFile bs=1024 count=10240

文档中没有说此文件需要多大,我设置了10M.

如果前面没有出错,并且ORACM软件启动正确,则运行runInstaller后,欢迎画面后会出现选择节点的画面.因为是单机安装,因此只有一个节点出现,选择了之后,就可以按照正常的步骤进行.

在选择产品的时候,建议选择自定义(Customer),可以确保Cluster Manager安装好,并且不创建数据库.

安装完,进行配置时,因为要打补丁,我直接将窗口关闭了.免得它配完以后,要启动HTTP.

另外,需要注意的是,运行root.sh前,按照文档说明,生成一个配置文件.

# mkdir -p /var/opt/oracle

# touch /var/opt/oracle/srvConfig.loc

然后再运行root.sh,会报错,不管,在9.2.0.4中修正了.

请参看

http://www.itpub.net/showthread.php?threadid=171693

5.数据库软件打补丁到Enterprise Server 9.2.0.4

注意,打补丁时,要确保ORACM在运行,并且没有关联到此安装目录的实例,监听器,HTTP server在运行.因为我刚才直接将9201装完以后的配置画面关掉了,因此我的PC上没有.如果你的PC上有的话,记得关闭.忘了也没有关系,Installer会报告写文件错误,那时再关闭也可以.

打补丁情况跟非RAC情况一样.

先装Installer,然后再打Server的补丁.

注意:

因为Oracle Cluster Manager已经打过补丁了,不要再打这个补丁.

另外,我在打Server补丁时,没有出现选择节点的画面!直接install就可以了.

在Oracle提供的官方安装文档中,说会出现节点选择画面,但那个文档是RHAS2.1的,并且是多节点的普通RAC,我不知道是因为操作系统版本不对没有出现此画面,还是因为我只有一个节点而没有出现此画面.或者就是Oracle的文档错误.希望有条件做试验或已经做过试验的人告诉我原因! 先表示谢意!

我在打补丁过程中,没有报错误,也就没有打补丁3119415.

6.准备创建数据库

首先创建一个配置文件srvConfig.loc

因为先前已经用touch生成了这个文件,因此需要的只是更改权限和属主.

# chmod 755 /var/opt/oracle/srvConfig.loc

# chown oracle:dba /var/opt/oracle/srvConfig.loc

并在其中添加以下内容:

srvconfig_loc=<your_config_file_name>

其中<your_config_file_name>就是先前用dd生成的共享配置文件.

我的文件内容如下:

srvconfig_loc=/u02/rac/SrvConfigFile

初始化共享配置文件.以oracle身份运行:

 $ srvconfig -init

启动公共服务进程(Global Services Deamon).以oracle身份运行:

 $ gsdctl start

Successfully started GSD on local node

然后就可以开始创建数据库了.

7.在服务器端配置listener.ora和tnsnames.ora

修改lisnter.ora和tnsnames.ora文件,以增加listener.

这一部分,RAC环境和非RAC环境没有区别,可以参考oracle的文档.

可以一个listener给三个instance服务,也可以启动三个listener给三个instance服务.

我启动了三个listener.

Listener.ora

LSNR1 =

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1521)))

LSNR2 =

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1522)))

LSNR3 =

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1523)))

tnsnames.ora

lsnr1=(DEscriptION=

(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1521)))

lsnr2=(DEscriptION=

(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1522)))

lsnr3=(DEscriptION=

(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1523)))

将your_ip_or_name替换为你的IP地址或者hostname.

Rac.test.com替换为你init.ora文件中设置的db_name.db_domain

启动三个listener.

 $ lsnrctl start lsnr1

 $ lsnrctl start lsnr2

 $ lsnrctl start lsnr3

8.创建数据库

可以运行dbca用图形界面来创建,也可以用命令行来创建.

因为以前没有创建过集群下的数据库,因此我用图形界面来创建脚本,修改后用命令行来创建.

先确认ORACM和GSD已经启动:

 $ ps -ef │ grep oracm

root 3056 1 0 10:50 pts/1 00:00:00 oracm

root 3057 3056 0 10:50 pts/1 00:00:00 oracm

root 3059 3057 0 10:50 pts/1 00:00:00 oracm

root 3060 3057 0 10:50 pts/1 00:00:00 oracm

root 3061 3057 0 10:50 pts/1 00:00:00 oracm

root 3062 3057 0 10:50 pts/1 00:00:00 oracm

root 3063 3057 0 10:50 pts/1 00:00:00 oracm

root 3064 3057 0 10:50 pts/1 00:00:00 oracm

root 3065 3057 0 10:50 pts/1 00:00:00 oracm

root 3338 3057 0 11:36 pts/1 00:00:00 oracm

root 3362 3057 0 11:36 pts/1 00:00:00 oracm

oracle 3482 2932 0 11:38 pts/1 00:00:00 grep oracm

 $ gsdctl stat

GSD is running on the local node

然后运行dbca启动数据库配置助手.

在欢迎画面中,选择Oracle cluster database, 然后一路继续就可以了.

在最后的总结画面上,可以选择创建数据库,也可以选择创建脚本.我选择了创建脚本.

手工修改脚本为自己想要的样子,然后跟非集群环境一样手工创建数据库.数据文件使用本地管理,不用数据字典管理.并创建缺省的撤消表空间(undo tablespace)和临时表空间.

注意:

根据我的经验,SGA太小,在创建数据字典的时候会失败,因此SGA可以大一些.但因为是集群,需要启动多个instance,所以在数据字典创建完以后,即catalog.sql,catproc.sql,catclust.sql运行完以后,需要将SGA改小一点.

修改init.ora文件,并拷贝到 $ORACLE_HOME/dbs下,改名字为initrac.ora.

我是一个instance对应一个listener.也可以一个listener响应多个instnce.

其余参数可以自己根据自己的情况进行设置,以下是cluster的参数:

undo_management=AUTO

undo_retention=10800

cluster_database=true

cluster_database_instances=5

rac1.instance_name=rac1

rac1.instance_number=1

rac1.local_listener=lsnr1

rac1.thread=1

rac1.undo_tablespace=UNDOTBS1

rac2.instance_name=rac2

rac2.instance_number=2

rac2.local_listener=lsnr2

rac2.thread=2

rac2.undo_tablespace=UNDOTBS2

rac3.instance_name=rac3

rac3.instance_number=3

rac3.local_listener=lsnr3

rac3.thread=3

rac3.undo_tablespace=UNDOTBS3

如果要多个instance都由一个listener来响应,则改以下两行:

rac2.local_listener=lsnr1

rac3.local_listener=lsnr1

注意:

尽管数据库名字叫rac,但启动的实例名字不能叫rac.我将ORACLE_SID分别设置成了rac1,rac2,rac3.

然后启动第一个实例,创建数据库:

 $ export ORACLE_SID=rac1

 $ sqlplus /nolog

SQL*Plus: Release 9.2.0.4.0 - Production on Fri Nov 21 13:43:22 2003

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> conn / as sysdba;

Connected to an idle instance.

SQL> startup pfile=/u01/app/oracle/product/9.2.0.4.0/dbs/initrac.ora;

ORACLE instance started.

Total System Global Area 38867968 bytes

Fixed Size 451584 bytes

Variable Size 33554432 bytes

Database Buffers 4194304 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL>

创建数据库的命令:

CREATE DATABASE rac

MAXINSTANCES 32

MAXLOGHISTORY 100

MAXLOGFILES 192

MAXLOGMEMBERS 3

MAXDATAFILES 1024

DATAFILE '/u02/oradata/rac/rac/system01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE 1000M

EXTENT MANAGEMENT LOCAL

DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u02/oradata/rac/rac/temp01.dbf' SIZE 40M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE 1000M

UNDO TABLESPACE "UNDOTBS1" DATAFILE '/u02/oradata/rac/rac/undotbs01.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 1000M

CHARACTER SET ZHS16GBK

LOGFILE GROUP 1 ('/u02/oradata/rac/rac/redo01.log') SIZE 10M REUSE,

GROUP 2 ('/u02/oradata/rac/rac/redo02.log') SIZE 10M REUSE,

GROUP 3 ('/u02/oradata/rac/rac/redo03.log') SIZE 10M REUSE;

然后创建数据字典.

以sysdba身份运行:

SQL> @?/rdbms/admin/catalog.sql;

SQL> @?/rdbms/admin/catproc.sql;

SQL> @?/rdbms/admin/catclust.sql;

以system身份运行:

SQL> @?/sqlplus/admin/pupbld.sql;

9.创建并启动多个instance

在启动多个instance前,需要为每个instance增加一个undo tablespace, 并增加一组 redo logfile.

SQL>CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/u02/oradata/rac/rac/undotbs02.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 1000M;

SQL>CREATE UNDO TABLESPACE UNDOTBS3 DATAFILE '/u02/oradata/rac/rac/undotbs03.dbf' SIZE 50M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 1000M;

SQL> ALTER DATABASE ADD LOGFILE THREAD 2 '/u02/oradata/rac/rac/redo2_1.log' SIZE 10M;

SQL> ALTER DATABASE ADD LOGFILE THREAD 2 '/u02/oradata/rac/rac/redo2_2.log' SIZE 10M;

SQL> ALTER DATABASE ADD LOGFILE THREAD 3 '/u02/oradata/rac/rac/redo3_1.log' SIZE 10M;

SQL> ALTER DATABASE ADD LOGFILE THREAD 3 '/u02/oradata/rac/rac/redo3_1.log' SIZE 10M;

SQL>

然后就可以启动多个instance了.

 $ export ORACLE_SID=rac2

 $ sqlplus /nolog

SQL*Plus: Release 9.2.0.4.0 - Production on Fri Nov 21 15:11:16 2003

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> conn / as sysdba;

Connected to an idle instance.

SQL> startup pfile=/u01/app/oracle/product/9.2.0.4.0/dbs/initrac.ora

ORACLE instance started.

Total System Global Area 38867968 bytes

Fixed Size 451584 bytes

Variable Size 33554432 bytes

Database Buffers 4194304 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL>

然后再启动rac3.

注意:

如果SGA配置太大,启动多个instance可能会死机.

在出现Database mounted.后,到Database opened.可能会要一段时间,请耐心等待.

可以用以下语句查询,确认多个instance已经启动.

SQL> select inst_id, instance_number inst_no, instance_name inst_name,

2 parallel, status, database_status db_stat, active_state stat, host_name

3 from gv $instance;

10.配置客户端

在客户端的tnsnames.ora配置文件中添加以下行:

rac=(DEscriptION=

(ADDRESS_LIST=

(LOAD_BALANCE=ON)

(FAILOVER=ON)

(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1522))

(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1523))

(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1521)))

(CONNECT_DATA=

(FAILOVER_MODE=

(TYPE=select)(METHOD=basic))

(SERVICE_NAME=rac.test.com)))

然后就可以在客户端使用rac连接串来连接数据库了.

连接时,因为设置了load_balance=on,因此会随机选择一个来连接.查看连接到哪个实例:

SQL> select instance_name from v $instance;

INSTANCE_NAME

----------------

rac3

如果在服务器端将rac3停掉,可以用shutdown immediate;或者shutdown abort;

再运行此语句,则:

SQL> /

INSTANCE_NAME

----------------

rac1

客户端在监测到instance down了以后,重新连接,这次连到了rac1.

注意:

在非RAC环境下,如果用户设置了failover=on,则instance down时,用户未commit的数据自动回滚了.在RAC下,需要用户执行rollback. 如果不rollback 而执行SQL语句,则oracle会报错:

ERROR at line 1:

ORA-25402: transaction must roll back

11.结语

到现在,单节点上多instance的RAC就配置好了.

希望能对大家有所帮助.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有