ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 单机安装Oracle RAC

单机安装Oracle RAC

原创 Linux操作系统 作者:mugen 时间:2019-05-20 13:21:06 0 删除 编辑

单机安装Oracle RAC
2004-7-6晚

目录结构


环境
RAC概述
第一章 安装OCM
第二章 配置RAC,并且启动
第三章 安装Oracle软件
第四章 准备创建数据库
第五章 配置监听与TNSNAMES.ORA
第六章 启动数据库
第七章 无缝的实现切换


环境:

本文的试验环境:

Windows2000 advance server
Vmware: 800M MEM + 10G HD
Red Hat Advance Server 3.0 + Oracle 9i Realease 2 ( 9.2.0.4 )


RAC概述:
RAC起源于版本8的OPS(Oracle parallel Server),OPS/RAC 最原始的设计初衷就是系统与应用的高可用性。OPS/RAC通过不同的节点使用一个(一般是一个)或多个oracle instances 与一个database 连接。RAC对早期的OPS做了众多的改进,特别是在节点的通信与管理上。RAC在工作期间,每个节点可以单独的被使用并且被应用程序负载均衡。如果发生意外,如一个节点的失败,可以实现节点的失败切换(failover),保证数据库24*7的高可用性。
RAC的数据库要求建立在共享磁盘设备上,对于OPS,只支持RAW设备,RAC已经可以支持文件系统(单机模拟)、OCFS、RAW、与NFS等文件系统或者设备。因为RAC是多个实例对应一个数据库,每个节点都有自己的日志,因此在备份与恢复方面,将需要一些特殊的处理。
但是,RAC并不提供容灾的功能,如共享磁盘设备的损坏,自然灾害等不可避免的损失,将导致RAC的不可使用,所以,RAC一般与其它的容灾组件配合使用,如RAC+DATA GUARD。
取代以前版本的分布式锁管理(DLM),全局缓冲服务(GCS)与全局锁服务(GES)将负责RAC的管理工作。GCS的同步层允许每个实例单独的访问数据库,通过数据库的核心层管理实例级别的一致性与锁资源。所有的以上任务将被一组特殊的后台进程来完成:
LMON (Lock Monitor Process),锁监控进程
负责监控整个RAC的全局资源,管理实例与进程的过期以及全局缓冲服务与全局锁服务的恢复工作,LMON提供一个众所周知的聚族组服务(CGS)。
LMSn(The Global Cache Service Processes),全局缓冲服务进程
LMSn可以处理远程节点的全局缓冲服务的信息,LMSn也负责控制到远程节点的信息流,RAC可以提供10个这样的服务进程LMS0-LMS9,其进程的多少取决于实例之间的通信量。LMSn负责处理远程节点的全局缓冲服务获得的中断请求,保证多个实例的读一致性请求。LMSn创建块的一致性的读信息并送到远程节点的实例。
LMD(The Global Enqueue Service Daemon),全局资源服务
LMD资源代理进程,负责管理全局缓冲服务资源的管理,可以负责远程节点资源的请求与死锁的检测。

安装wmware上的RHEL 3.0这里不详细的说明
把下载了的Oracle 9204 的三个文件ftp 到redhat上面去。
按照Oracle的安装指南,设置好oracle的环境,目录,oracle用户,环境变量等等。
注意,我选的是比较高版本的linux 和oracle,否则又是要打这个补丁,那个补丁,很麻烦。
但是,在安装Oracle之前,需要以root登录,打上 3006854号补丁。
文件名称是p3006854_9204_linux.zip。这个是我安装过程中唯一打过的补丁。

su - root
unzip p3006854_9204_linux.zip

cd 3006854
./rhel3_pre_install.sh

如果安装报告以下错误:
-bash: ./rhel3_pre_install.sh Permission denied
修改下权限
chmod +x *.sh

下面开始进行RAC的安装

一. 安装 OCM( Oracle Cluster Manager)

首先需要生成一个Quorum Disk File,因为我们是单机,所以需要用命令来生成一个

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

这个文件至少需要4+(4*number_of_node)KB,我们给它1M,足够了。

把oracle安装的原文件解压缩,这个时候,就可以运行安装ocm了

./runInstaller

在产品选择画面,选择 Oracle Cluster Manager,
出现Public Node Information 的时候,填好本机的hostname,也就是hostname 命令返回的值。因为是单机,只要填写第一个,同样,在Private Node Information中,也填写hostname。
在出现Quorum Disk Information选项的时候,填写刚才生成的文件/u02/rac/RacFile

二配置RAC,并且启动

我们需要启动oracm服务
首先我们要启动hangcheck_timer
加载hangcheck-timer
insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

确认模块已经加载:
lsmod | grep hang

为了在系统启动自动加载,我们在/etc/rc.local文件加入
/sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

下面准备启动ocm的脚本
在ORACLE_HOME目录下面的oracm目录下面有admin目录
下面有个文件cmcfg.ora.tmp

cp cmcfg.ora.tmp cmcft.ora

并且修改成

HeartBeat=15000
ClusterName=Oracle Cluster Manager, version 9i
PollInterval=1000
MissCount=210
PrivateNodeNames=hp-linux
PublicNodeNames=hp-linux
ServicePort=9888
CmDiskFile=/u02/rac/RacFile
KernelModuleName=hangcheck-timer
下面要以root来执行脚本
su
cd $ORACLE_HOME/oracm/bin
./ocmstart.sh


现在就已经完成ocm的启动了

三.安装oracle 软件

这个没有什么好说的,把oracle 安装好,我选择了不创建数据库.

四.准备创建数据库

在创建数据库之前,要启动公共服务进程.
以oracle用户身份运行
gsdctl start
我选择了dbca来创建数据库,它能找到节点.如果找不到节点,说明ocm安装失败,或者启动失败

五.配置监听和服务名

我是使用netca 创建了两个监听,一个是rac1,一个是rac2
listerer.ora的内容

# LISTENER.ORA.HP-LINUX Network Configuration File: /opt/oracle/product/9.2.0/network/admin/listener.ora.hp-linux
# Generated by Oracle configuration tools.

SID_LIST_RAC2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(PROGRAM = extproc)
)
)

SID_LIST_RAC1 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp-linux)(PORT = 1521))
)
)
)

RAC2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp-linux)(PORT = 1523))
)
)
)

RAC1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp-linux)(PORT = 1522))
)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(PROGRAM = extproc)
)
(SID_DESC =
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(SID_NAME = rac1)
)
)

tnsnames.ora的内容
# TNSNAMES.ORA Network Configuration File: /opt/oracle/product/9.2.0/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENERS_RAC =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp-linux)(PORT = 1521))
)

LISTENER_RAC1 =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp-linux)(PORT = 1521))


RAC1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp-linux)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac1)
)
)

INST1_HTTP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp-linux)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = MODOSE)
(PRESENTATION = http://HRService)
)
)

RAC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp-linux)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
)
)

RAC2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp-linux)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac2)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

六.启动数据库
安装完成后,应该就可以启动第一个实例了.
我的初试化参数文件的内容是这样的

*.aq_tm_processes=1
*.background_dump_dest='/opt/oracle/admin/rac/bdump'
*.cluster_database_instances=2
*.cluster_database=true
*.compatible='9.2.0.0.0'
*.REMOTE_LOGIN_PASSWORDFILE = NONE
*.control_files='/opt/oracle/oradata/rac/control01.ctl','/opt/oracle/oradata/rac/control02.ctl','/opt/oracle/oradata/rac/control03.ctl'
*.core_dump_dest='/opt/oracle/admin/rac/cdump'
*.db_block_size=8192
*.db_cache_size=33554432
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='rac'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=racXDB)'
*.fast_start_mttr_target=300
*.hash_join_enabled=TRUE
rac1.instance_name='rac1'
rac2.instance_name='rac2'
rac1.instance_number=1
rac2.instance_number=2
rac1.thread=1
rac2.thread=2
*.service_names='rac'
*.java_pool_size=83886080
*.job_queue_processes=10
*.large_pool_size=16777216
rac1.local_listener='LISTENER_RAC1'
*.open_cursors=300
*.pga_aggregate_target=25165824
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_listener='LISTENERS_RAC'
*.remote_login_passwordfile='exclusive'
*.shared_pool_size=83886080
*.sort_area_size=524288
*.star_transformation_enabled='FALSE'
rac1.thread=1
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
rac1.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/opt/oracle/admin/rac/udump'
rac1.local_listener=rac1
rac2.local_listener=rac2

export Oracle_SID=rac1
sqlplus /nolog
connect / as sysdba
Startup pfile=/opt/initracpfile.ora
就可以启动第一个实例了
启动完成之后,为需要为第二个实例准备创建redo log,undo 表空间。
在第一个节点上
SQL>shutdown immediate
SQL>startup mount pfile=/opt/initracpfile.ora
SQL> alter database add logfile thread 2
2 group 4 ('/opt/oracle/oradata/rac/redo04.log') size 10240K,
3 group 5 ('/opt/oracle/oradata/rac/redo05.log') size 10240K,
4 group 6 ('/opt/oracle/oradata/rac/redo06.log') size 10240k;
SQL>alter database open;
SQL> alter database enable public thread 2;
SQL> create undo tablespace undotbs2 datafile
2 '/opt/oracle/oradata/rac/undotbs2_01.dbf' size 200m;
Tablespace created.


SQL> select instance_name,instance_number from v$instance;

INSTANCE_NAME INSTANCE_NUMBER
---------------- ---------------
rac1 1


然后开另外一个终端
export Oracle_sid=rac2
sqlplus /nolog
connect / as sysdba;
startup pfile=/opt/initracpfile.ora

SQL> select instance_name,instance_number from v$instance;

INSTANCE_NAME INSTANCE_NUMBER
---------------- ---------------
rac2 2
就可以启动第二个实例了

七.无缝的实现切换.

在客户端,配置好服务名,注意这个服务名跟一般的服务名不太一样
我的客户端的tnsnames.ora文件是这样的

RAC.SZITOWN.NET.CN =
(DESCRIPTION =
(load_balance=on)
(failover=on)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.98.188.100)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.98.188.100)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME = rac)
(failover_mode=(type=select)(method=basic)
)
)
)

现在连接到Rac
sqlplus /nolog
connect system/system@rac


Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Real Application Clusters option
JServer Release 9.2.0.4.0 - Production

SQL> select instance_name from v$instance;

INSTANCE_NAME
--------------------------------
rac1

这个时候,我在rac的服务器上,把 rac1 shutdown


SQL> select instance_name from v$instance;

INSTANCE_NAME
--------------------------------
rac2

SQL>

可见,现在在没有断开客户端连接的情况下,rac自动的进行了Failover,无缝的切换到了rac2 的实例上面去.这对于用户来说都是透明的.

如果有不对的地方,欢迎大家提出宝贵的意见.
谢谢.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9408/viewspace-102135/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 深圳的好朋友
下一篇: 修改数据库的SID
请登录后发表评论 登录
全部评论

注册时间:2002-04-05

  • 博文量
    464
  • 访问量
    355385