Linux AS3 ORACLE RAC策略安装手册
作者:Linux AS3 ORACLE RAC策略安装手册
验证 RAC 集群 / 数据库配置
当 DBCA 完成时,您将拥有一个功能完全的、运行的 Oracle RAC 集群。
这一部分提供了可用来验证您的 Oracle9 i RAC 配置的几条命令和 SQL 查询。
--Look for Oracle Cluster Manager--
$ ps -ef | grep oracm | grep -v 'grep'
$ gsdctl stat
GSD is running on the local node
--Using srvctl--
$ srvctl status database -d orcl
Instance orcl1 is running on node rac1als
Instance orcl2 is running on node rac2als
$ srvctl config database -d orcl
rac1als orcl1 /opt/ora9/product/ 9.2
rac2als orcl2 /opt/ora9/product/ 9.2
Query gv$instance
SELECT
inst_id
, instance_number inst_no
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;
INST_ID INST_NO INST_NAME PAR STATUS DB_STATUS STATE HOST
-------- -------- ---------- --- ------- ----------- ------- -------
1 1 orcl1 YES OPEN ACTIVE NORMAL rac1als
2 2 orcl2 YES OPEN ACTIVE NORMAL rac2als
启动和停止集群
这一部分详细介绍了启动和关闭 Oracle9 i RAC 集群中的例程所必需的各种方法和命令。确保您是以 " oracle " UNIX 用户的身份登录的:
# su - oracle
启动集群
启动所有注册的实例:
$ srvctl start database -d orcl
启动 orcl2 实例:
$ srvctl start instance -d orcl -i orcl2
停止集群
关闭所有的注册实例:
$ srvctl stop database -d orcl>
利用 immediate 选项关闭 orcl2 实例:
$ srvctl stop instance -d orcl -i orcl2 -o immediate
利用 abort 选项关闭 orcl2 实例:
$ srvctl stop instance -d orcl -i orcl2 -o abort
透明应用程序故障切换 (TAF)
企业要求它们的企业应用程序有 99.99% 或者甚至 99.999% 的可用性是很常见的。考虑一下要确保全年不超过 0.5 小时的停机时间或者甚至没有停机时间将花费多大的代价。为了回应这些大量的高可用性需求,企业正投资于在一个参与系统出现故障时能够提供自动故障切换的机制。当考虑 Oracle 数据库的可用性时, Oracle9 i RAC 提供了一个拥有高级故障切换机制的优越的解决方案。 Oracle9 i RAC 包含了全部在一个集群配置中工作并负责提供持续的可用性的所需组件 — 当集群中的一个参与系统出现故障时,用户可以自动移植到其它的可用系统上。
Oracle9 i RAC 的一个负责故障切换处理的主要组件是透明应用程序故障切换 (TAF) 选件。所有释放连接的数据库连接(和过程 ) 都被重新连接到了集群中的另一个节点上。故障切换对用户是完全透明的。
这最后一部分提供了关于 Oracle9 i RAC 中的自动故障切换如何工作的一个简短的说明。请注意,关于 Oracle9 i RAC 中的故障切换的完整讨论将自成一文。我这里的目的是提供关于它如何工作的一个简洁的概述和示例。
在继续之前要注意的一个重要事项是 TAF 在 OCI 资料库中自动发生。这意味着您的应用程序(客户机)代码不需要修改就可以使用 TAF 。不过,将需要在 Oracle TNS 文件 tnsnames.ora 上执行某些配置步骤。
Listener.ora 配置 节点2修改HOST=192.168.0.221 SID_NAME=orcl2
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.220)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/ora9/product/9.2)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /opt/ora9/product/9.2)
(SID_NAME = orcl1)
)
)
注意: 切记使用 Java 瘦客户机将不能参与 TAF ,因为它从不读取 tnsnames.ora 文件。
设置 tnsnames.ora 文件
在演示 TAF 之前,我们需要在一个非 RAC 客户机上配置一个 tnsnames.ora 文件(如果您已有一台 Windows 计算机)。确保您安装了 Oracle RDBMS 软件。(实际上,您只需要在客户机上安装 Oracle 软件。)
下面是我为了和新的 Oracle 集群数据库连接而在 Windows 客户机上的 %ORACLE_HOME%/network/admin/tnsnames.ora 文件中放入的项目:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.220)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.221)(PORT = 1521))
(LOAD_BALANCE = on)
(FAILOVER = on)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
(FAILOVER_MODE =
(TYPE = session)
(METHOD = basic)
)
)
)
ORCL2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.221)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl2)
(SERVER = DEDICATED)
)
)
ORCL1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.220)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl1)
(SERVER = DEDICATED)
)
)
注:强烈建议客户端的配置文件tnsnames.ora参照服务器的tnsnames.ora的设置,一定会没有问题,不一定盲目按照以上文档模式生成自己的tnsnames.ora文件,因为各种版本问题可能会导致客户端不能稳定的连接到数据库上,所以要确定客户端的配置和服务器端的配置一样。
强烈建议:
在启动群集数据库的时候,使用标准的群集数据库控制语句控制每个节点的数据库启动和关闭。
例如,节点一的实例名为orcl1,节点2的实例名为orcl2
重启数据库过程如下:
在每一个节点上正常运行cluster manager
在每一个节点上gsdctl start成功
启动第一个节点srvctl start instance –d orcl –i orcl1
启动第二个节点srvctl start instance –d orcl –i orcl1
查看所有节点状态srvctl status database –d orcl
注:3,4步操作,也可以用srvctl start database –d orcl代替
显示
Instance orcl1 is running on node rac1pub
Instance orcl2 is running on node rac2pub
表示正常
如果想关掉一个节点的实例:srvctl stop instance –d orcl –i orcl1
建议启动每个节点的数据库不要用startup命令,关闭数据库不要使用shutdown,这些都是单节点的命令,虽然也许可能也可以正常使用,但是还是强烈建议采用官方推荐的语句srvctl,试验证明,使用单机启动或关闭数据库的命令控制群集(RAC)数据库有时候会造成数据库当机的情况。
附录:
客户端的tnsnames.ora的参考配置方法:
ORCL =
(DESCRIPTION =
(LOAD_BALANCE = yes)
(FAILOVER = ON)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1pub)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2pub)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
(FAILOVER_MODE =
(type = select)
(method = basic)
)
)
)
ORCL1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1pub)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(INSTANCE_NAME = orcl1)
)
)
ORCL2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2pub)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(INSTANCE_NAME = orcl2)
)
)
透明应用程序故障切换演示
从我们的 Windows(或其它的非 RAC 客户机)中,以 SYSTEM 用户身份登录集群数据库 (orcl):
$sqlplus system/oracle@orcl
SQL*PlusRelease 9.2.0.3.0 - Production on Mon May 10 21:17:07 2004
Copyright (c) 1982, 2002, Oracle Corporation.All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
SQL> select instance_name from v$instance;
INSTANCE_NAME
------------- --------- -
orcl1
不要注销上面的 SQL*Plus 会话!
已经运行了上面的查询,现在我们应该使用 abort 选项来关闭 rac1als 上的 orcl1 实例。要执行这一操作,我们可以使用 srvctl 命令行实用程序,如下所示:
# su - oracle
$ srvctl status database -d orcl
Instance orcl1 is running on node linux1
Instance orcl2 is running on node linux2
SQL>shutdown immediate
现在返回SQL 会话,然后重新运行缓冲中的 SQL 语句:
SQL>connect system/oracle@orcl
SQL> select instance_name from v$instance;
INSTANCE_NAME
------------- --------- -
orcl2
SQL> exit
从上面的演示中,我们可以看到上述会话现在已经被故障切换到了 rac2als 上的实例 orcl2 上。
在重新连接时,会有延时。wait
作者:Linux AS3 ORACLE RAC策略安装手册
验证 RAC 集群 / 数据库配置
当 DBCA 完成时,您将拥有一个功能完全的、运行的 Oracle RAC 集群。
这一部分提供了可用来验证您的 Oracle9 i RAC 配置的几条命令和 SQL 查询。
--Look for Oracle Cluster Manager--
$ ps -ef | grep oracm | grep -v 'grep'
$ gsdctl stat
GSD is running on the local node
--Using srvctl--
$ srvctl status database -d orcl
Instance orcl1 is running on node rac1als
Instance orcl2 is running on node rac2als
$ srvctl config database -d orcl
rac1als orcl1 /opt/ora9/product/ 9.2
rac2als orcl2 /opt/ora9/product/ 9.2
Query gv$instance
SELECT
inst_id
, instance_number inst_no
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;
INST_ID INST_NO INST_NAME PAR STATUS DB_STATUS STATE HOST
-------- -------- ---------- --- ------- ----------- ------- -------
1 1 orcl1 YES OPEN ACTIVE NORMAL rac1als
2 2 orcl2 YES OPEN ACTIVE NORMAL rac2als
启动和停止集群
这一部分详细介绍了启动和关闭 Oracle9 i RAC 集群中的例程所必需的各种方法和命令。确保您是以 " oracle " UNIX 用户的身份登录的:
# su - oracle
启动集群
启动所有注册的实例:
$ srvctl start database -d orcl
启动 orcl2 实例:
$ srvctl start instance -d orcl -i orcl2
停止集群
关闭所有的注册实例:
$ srvctl stop database -d orcl>
利用 immediate 选项关闭 orcl2 实例:
$ srvctl stop instance -d orcl -i orcl2 -o immediate
利用 abort 选项关闭 orcl2 实例:
$ srvctl stop instance -d orcl -i orcl2 -o abort
透明应用程序故障切换 (TAF)
企业要求它们的企业应用程序有 99.99% 或者甚至 99.999% 的可用性是很常见的。考虑一下要确保全年不超过 0.5 小时的停机时间或者甚至没有停机时间将花费多大的代价。为了回应这些大量的高可用性需求,企业正投资于在一个参与系统出现故障时能够提供自动故障切换的机制。当考虑 Oracle 数据库的可用性时, Oracle9 i RAC 提供了一个拥有高级故障切换机制的优越的解决方案。 Oracle9 i RAC 包含了全部在一个集群配置中工作并负责提供持续的可用性的所需组件 — 当集群中的一个参与系统出现故障时,用户可以自动移植到其它的可用系统上。
Oracle9 i RAC 的一个负责故障切换处理的主要组件是透明应用程序故障切换 (TAF) 选件。所有释放连接的数据库连接(和过程 ) 都被重新连接到了集群中的另一个节点上。故障切换对用户是完全透明的。
这最后一部分提供了关于 Oracle9 i RAC 中的自动故障切换如何工作的一个简短的说明。请注意,关于 Oracle9 i RAC 中的故障切换的完整讨论将自成一文。我这里的目的是提供关于它如何工作的一个简洁的概述和示例。
在继续之前要注意的一个重要事项是 TAF 在 OCI 资料库中自动发生。这意味着您的应用程序(客户机)代码不需要修改就可以使用 TAF 。不过,将需要在 Oracle TNS 文件 tnsnames.ora 上执行某些配置步骤。
Listener.ora 配置 节点2修改HOST=192.168.0.221 SID_NAME=orcl2
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.220)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/ora9/product/9.2)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /opt/ora9/product/9.2)
(SID_NAME = orcl1)
)
)
注意: 切记使用 Java 瘦客户机将不能参与 TAF ,因为它从不读取 tnsnames.ora 文件。
设置 tnsnames.ora 文件
在演示 TAF 之前,我们需要在一个非 RAC 客户机上配置一个 tnsnames.ora 文件(如果您已有一台 Windows 计算机)。确保您安装了 Oracle RDBMS 软件。(实际上,您只需要在客户机上安装 Oracle 软件。)
下面是我为了和新的 Oracle 集群数据库连接而在 Windows 客户机上的 %ORACLE_HOME%/network/admin/tnsnames.ora 文件中放入的项目:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.220)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.221)(PORT = 1521))
(LOAD_BALANCE = on)
(FAILOVER = on)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
(FAILOVER_MODE =
(TYPE = session)
(METHOD = basic)
)
)
)
ORCL2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.221)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl2)
(SERVER = DEDICATED)
)
)
ORCL1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.220)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl1)
(SERVER = DEDICATED)
)
)
注:强烈建议客户端的配置文件tnsnames.ora参照服务器的tnsnames.ora的设置,一定会没有问题,不一定盲目按照以上文档模式生成自己的tnsnames.ora文件,因为各种版本问题可能会导致客户端不能稳定的连接到数据库上,所以要确定客户端的配置和服务器端的配置一样。
强烈建议:
在启动群集数据库的时候,使用标准的群集数据库控制语句控制每个节点的数据库启动和关闭。
例如,节点一的实例名为orcl1,节点2的实例名为orcl2
重启数据库过程如下:
在每一个节点上正常运行cluster manager
在每一个节点上gsdctl start成功
启动第一个节点srvctl start instance –d orcl –i orcl1
启动第二个节点srvctl start instance –d orcl –i orcl1
查看所有节点状态srvctl status database –d orcl
注:3,4步操作,也可以用srvctl start database –d orcl代替
显示
Instance orcl1 is running on node rac1pub
Instance orcl2 is running on node rac2pub
表示正常
如果想关掉一个节点的实例:srvctl stop instance –d orcl –i orcl1
建议启动每个节点的数据库不要用startup命令,关闭数据库不要使用shutdown,这些都是单节点的命令,虽然也许可能也可以正常使用,但是还是强烈建议采用官方推荐的语句srvctl,试验证明,使用单机启动或关闭数据库的命令控制群集(RAC)数据库有时候会造成数据库当机的情况。
附录:
客户端的tnsnames.ora的参考配置方法:
ORCL =
(DESCRIPTION =
(LOAD_BALANCE = yes)
(FAILOVER = ON)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1pub)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2pub)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
(FAILOVER_MODE =
(type = select)
(method = basic)
)
)
)
ORCL1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1pub)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(INSTANCE_NAME = orcl1)
)
)
ORCL2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2pub)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(INSTANCE_NAME = orcl2)
)
)
透明应用程序故障切换演示
从我们的 Windows(或其它的非 RAC 客户机)中,以 SYSTEM 用户身份登录集群数据库 (orcl):
$sqlplus system/oracle@orcl
SQL*PlusRelease 9.2.0.3.0 - Production on Mon May 10 21:17:07 2004
Copyright (c) 1982, 2002, Oracle Corporation.All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
SQL> select instance_name from v$instance;
INSTANCE_NAME
------------- --------- -
orcl1
不要注销上面的 SQL*Plus 会话!
已经运行了上面的查询,现在我们应该使用 abort 选项来关闭 rac1als 上的 orcl1 实例。要执行这一操作,我们可以使用 srvctl 命令行实用程序,如下所示:
# su - oracle
$ srvctl status database -d orcl
Instance orcl1 is running on node linux1
Instance orcl2 is running on node linux2
SQL>shutdown immediate
现在返回SQL 会话,然后重新运行缓冲中的 SQL 语句:
SQL>connect system/oracle@orcl
SQL> select instance_name from v$instance;
INSTANCE_NAME
------------- --------- -
orcl2
SQL> exit
从上面的演示中,我们可以看到上述会话现在已经被故障切换到了 rac2als 上的实例 orcl2 上。
在重新连接时,会有延时。wait