六:Oracle数据库建库以及配置:
建库和部分,其实和单击dbca建库,并无太大区别,俺是一个比较
懒的人,喜欢先用dbca把走到创建的时候,保存为脚本,然后去手工建
库.
记得在填写servcie name和sid的前缀,我都是设置的为rac,这样
的话,1号机上的sid是rac1,2号机上的sid是rac2.
保存了脚本以后,我们就该修改脚本了,因为那个脚本是无法启动
数据库的.
首先要检查下,脚本中的裸设备的大小,千万不要和你创建的裸设
备大小一样,否则会报内部错误的.应该比创建的裸设备稍微小那么一
点点.
要修改的脚本,这些脚本的路径在这里:
/opt/oracle/admin/rac/scripts,主要是init.ora,要屏蔽两个参数,一个是
remote_listener=LISTENERS_RAC,另外一个是
remote_login_passwordfile=exclusive,另外对于监听要作一些重新的配
置,增加如下的内容:
rac1.local_listener=LISTENER_rac1
rac2.local_listener=LISTENER_rac2
rac1.remote_listener=LISTENERS_rac
rac2.remote_listener=LISTENERS_rac
老规矩,我把我整个init.ora文件全部贴出来:
################################################################
##############
# Copyright (c) 1991, 2001, 2002 by Oracle Corporation
################################################################
##############
###########################################
# Cache and I/O
###########################################
db_block_size=8192
db_cache_size=25165824
db_file_multiblock_read_count=16
###########################################
# Cluster Database
###########################################
cluster_database_instances=2
#remote_listener=LISTENERS_RAC
###########################################
# Cursors and Library Cache
###########################################
open_cursors=300
###########################################
# Database Identification
###########################################
db_domain=""
db_name=rac
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=/opt/oracle/admin/rac/bdump
core_dump_dest=/opt/oracle/admin/rac/cdump
timed_statistics=TRUE
user_dump_dest=/opt/oracle/admin/rac/udump
###########################################
# File Configuration
###########################################
control_files=("/dev/raw/raw8", "/dev/raw/raw9")
###########################################
# Miscellaneous
###########################################
compatible=9.2.0.0.0
###########################################
# Optimizer
###########################################
hash_join_enabled=TRUE
query_rewrite_enabled=FALSE
star_transformation_enabled=FALSE
###########################################
# Pools
###########################################
java_pool_size=33554432
large_pool_size=8388608
shared_pool_size=83886080
###########################################
# Processes and Sessions
###########################################
processes=150
###########################################
# Redo Log and Recovery
###########################################
fast_start_mttr_target=300
###########################################
# Security and Auditing
###########################################
#remote_login_passwordfile=exclusive
###########################################
# Sort, Hash Joins, Bitmap Indexes
###########################################
pga_aggregate_target=25165824
sort_area_size=524288
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_retention=10800
undo_tablespace=UNDOTBS1
cluster_database=true
rac2.instance_name=rac2
rac1.instance_name=rac1
rac1.instance_number=1
rac2.instance_number=2
rac2.thread=2
rac1.thread=1
rac1.undo_tablespace=UNDOTBS1
rac2.undo_tablespace=UNDOTBS2
rac1.local_listener=LISTENER_rac1
rac2.local_listener=LISTENER_rac2
rac1.remote_listener=LISTENERS_rac
rac2.remote_listener=LISTENERS_rac
记得两个机器上都要修改,否则在2号机上无法启动instance,呵
呵.
修改好了以后,直接执行文件rac1.sh.
手工创建数据库以后,这个时候,2号机的数据库是没有办法起来
的,因为undotbs还没有给2号机创建(图形界面肯能不用手工改),但是
既然是手工,那就继续改了.
在1号机中的sqlplus中,执行如下语句:
SQL>create undo tablespace undotbs2 datafile '/dev/raw/raw3'
size 330m;
创建好了以后,就可以去用2号机上的init.ora文件启动数据库了,
如果有2号机启动不了的问题,那咋们再研究研究了.
启动2号机的数据库以后,记得要为2号机的instance创建一个
spfile,1号机的在建库的时候就自己创建了,执行如下命令创建:
SQL> create spfile='/dev/raw/raw5' FROM
pfile='/opt/oracle/admin/rac/scripts/init.ora';
可以看的出来,俺把两个instance的spfile都创建到一个裸设备了,
这样就共享了吗.
这个作完以后,数据库就创建好了,不过别急,你的RAC现在应该
不能进行failover,或者说是不能正确的进行failover.
接下来,该配置网络了.
七:Oracle网络配置:
7.1Oracle网络配置
网络的配置,主要要配置5个文件,它们是:
1号机的listener.ora,tnsnames.ora,2号机的listener.ora,tnsnames.ora
以及客户端的tnsnames.ora文件.
我开始的时候,就是因为1号机的tnsnames.ora文件配置错误,导
致整个RAC中,2号机可向1号机failover,1号机无法向2号机failover,
请教了biti以后,才解决这个问题.这个部分,啥都不说了,俺贴出这5个
文件,供大家参考,并指出那里需要注意.
RAC1上的listener.ora配置:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
)
)
)
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)
)
)
RAC1上的tnsnames.ora配置:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
)
)
)
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)
)
)
[root@RAC1 admin]#
[root@RAC1 admin]# more tnsnames.ora
LISTENERS_rac =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC2)(PORT = 1521))
)
)
LISTENER_rac1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
)
)
rac1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac1)
)
)
rac2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC2)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac2)
)
)
rac =
(DESCRIPTION =
(LOAD_BALANCE = yes)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = rac)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
RAC2上的listener.ora配置:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC2)(PORT = 1521))
)
)
)
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 = rac2)
)
)
RAC2上的tnsnames.ora配置:
LISTENERS_rac =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC2)(PORT = 1521))
)
)
LISTENER_rac2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC2)(PORT = 1521))
)
)
rac1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac1)
)
)
rac2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC2)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac2)
)
)
rac =
(DESCRIPTION =
(LOAD_BALANCE = yes)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC2)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = rac)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
注意两个机器的tnsnames.ora配置中粗体部分,这两个host一定
要颠倒过来,否则,你作不了failover可和我没关系哟..这个部分郁闷
了我会,最后是找biti才发现的.
最后的配置,自然是客户端的tnsnames.ora配置了:
RAC =
(DESCRIPTION =
(load_balance=on)
(failover=on)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = RAC2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = rac)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
到这里基本上完成了,如果你的客户端不认识RAC1和RAC2的
话,那么需要修改windows客户端的一个文件,路径
为:c:\windows\system32\drivers\etc,文件名字为hosts,我的配置如下:
127.0.0.1 localhost
172.19.74.241 RAC1
172.19.74.242 RAC2
到了这里,可以测试下RAC的failover了,具体咋测,俺就不写了,
方法比较多.
八:配置cluster database
8.1配置cluster database
因为我们使用的是手工建库,所以并为向系统中注册cluster
database的信息,为了可以使用srvctl来管理cluster database,需要手工
向系统注册,在oracle用户下,依次执行以下命令
srvctl add database -d <db_name> -o $ORACLE_HOME
srvctl add instance -d <db_name> -i <instance_name> -n
<node1>
srvctl add instance -d <db_name> -i <instance_name> -n
<node2>
srvctl config database -d <db_name>
例如,我的是这么执行的:
$ srvctl add database -d rac -o $ORACLE_HOME
$ srvctl add instance -d rac -i rac1 -n RAC1
$ srvctl add instance -d rac -i rac2 -n RAC1
$ srvctl config database -d rac
如果你不执行上面的步骤,则你在执行srvctl config database
-d rac的时候,会报出如下的错误:
PRKR-1007 : getting of cluster database rac configuration failed,
PRKR-1001 : cluster database rac does not exist
PRKO-2005 : Application error: Failure in getting Cluster Database
Configuration for: rac
至此,整个配置全部完成,可以开始享受RAC带来的乐趣了.
[此贴子已经被作者于2007-1-31 9:08:34编辑过]