当前位置:首页 » 数据仓库 » rac数据库自动启动
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

rac数据库自动启动

发布时间: 2022-08-09 05:26:37

‘壹’ 如何进行 Oracle 10g RAC关闭及启动

一. 检查共享设备
一般情况下, 存放OCR 和 Voting Disk 的OCFS2 或者raw 都是自动启动的。 如果他们没有启动,RAC 肯定是启动不了的。 
 
1.1 如果使用ocfs2的,检查ocfs2 状态
/etc/init.d/o2cb status
 
在挂载之前,/etc/init.d/o2cb status 显示为Checking O2CB heartbeat: Not active。
在格式化和挂载文件系统之前,应验证 O2CB 在两个节点上均联机;O2CB 心跳当前没有
活动,因为文件系统还没有挂载 。挂载之后就会变成active。
mount -t ocfs2 -o datavolume /dev/sdb1 /u02/oradata/orcl
 
 
1,2. 如果使用raw device.
[root@raw1 ~]# cd /dev/raw/
[root@raw1 raw]# ls
raw1  raw2
或者:
[root@raw1 init.d]# /etc/init.d/rawdevices status
/dev/raw/raw1:  bound to major 8, minor 17
/dev/raw/raw2:  bound to major 8, minor 18
 
 
1.3. 检查ASM  
/etc/init.d/oracleasm listdisks 
 
 
 
二. 自动启动RAC并检查相关进程
 RAC 在启动的时候crs 等进程都是自动启动的:
[root@rac1 init.d]# ls -l /etc/init.d/init.*
-r-xr-xr-x  1 root root  1951 Feb 26 22:38 /etc/init.d/init.crs
-r-xr-xr-x  1 root root  4714 Feb 26 22:38 /etc/init.d/init.crsd
-r-xr-xr-x  1 root root  35394 Feb 26 22:38 /etc/init.d/init.cssd
-r-xr-xr-x  1 root root  3190 Feb 26 22:38 /etc/init.d/init.evmd
 
我们要查看一下crs 的状态:
正常情况下, 进程都是online的:
[root@raw1 bin]# ./crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora.raw.db      application    ONLINE    ONLINE    raw1
ora.raw.raw.cs   application    ONLINE    ONLINE    raw1
ora....aw1.srv   application    ONLINE    ONLINE    raw1
ora....aw2.srv   application    ONLINE    ONLINE    raw2
ora....w1.inst    application    ONLINE    ONLINE    raw1
ora....w2.inst    application    ONLINE    ONLINE    raw2
ora....SM1.asm  application    ONLINE    ONLINE    raw1
ora....W1.lsnr   application    ONLINE    ONLINE    raw1
ora.raw1.gsd    application    ONLINE    ONLINE    raw1
ora.raw1.ons    application    ONLINE    ONLINE    raw1
ora.raw1.vip    application    ONLINE    ONLINE    raw1
ora....SM2.asm  application    ONLINE    ONLINE    raw2
ora....W2.lsnr   application    ONLINE    ONLINE    raw2
ora.raw2.gsd   application    ONLINE    ONLINE    raw2
ora.raw2.ons   application    ONLINE    ONLINE    raw2
ora.raw2.vip   application    ONLINE    ONLINE    raw2
 
 
如果出现以下情况:
[root@rac2 bin]# ./crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora.rac.db     application    ONLINE    UNKNOWN   rac1
ora....orcl.cs   application    ONLINE    UNKNOWN   rac1
ora....ac1.srv   application    OFFLINE   OFFLINE
ora....ac2.srv   application    OFFLINE   OFFLINE
ora....c1.inst   application    ONLINE    UNKNOWN   rac1
ora....c2.inst   application    ONLINE    UNKNOWN   rac2
ora....SM1.asm application    ONLINE    ONLINE    rac1
ora....C1.lsnr   application    ONLINE    UNKNOWN   rac1
ora.rac1.gsd   application    ONLINE    UNKNOWN   rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora....SM2.asm  application    ONLINE    ONLINE    rac2
ora....C2.lsnr   application    ONLINE    UNKNOWN   rac2
ora.rac2.gsd   application    ONLINE    UNKNOWN   rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
 
 
解决方法: 
1. 用crs_stat 查看进程全部信息:
[root@rac2 bin]# ./crs_stat
NAME=ora.rac.db
TYPE=application
TARGET=ONLINE
STATE=ONLINE on rac2
 
NAME=ora.rac1.LISTENER_RAC1.lsnr
TYPE=application
TARGET=ONLINE
STATE=UNKNOWN on rac1
 
NAME=ora.rac1.gsd
TYPE=application
TARGET=ONLINE
STATE=UNKNOWN on rac1
 
NAME=ora.rac2.LISTENER_RAC2.lsnr
TYPE=application
TARGET=ONLINE
STATE=UNKNOWN on rac2
... ...
 
2. 对于offline 的进程,我们可以直接手动的启动它
[root@rac2 bin]# ./crs_start ora.rac.orcl.rac1.srv
Attempting to start `ora.rac.orcl.rac1.srv` on member `rac1`
Start of `ora.rac.orcl.rac1.srv` on member `rac1` succeeded.
 
 
3. 对于UNKNOWN 的进程,我们可以先stop 它, 在start。
[root@rac2 bin]# ./crs_stop ora.rac2.gsd
Attempting to stop `ora.rac2.gsd` on member `rac2`
Stop of `ora.rac2.gsd` on member `rac2` succeeded.
[root@rac2 bin]# ./crs_start ora.rac2.gsd
Attempting to start `ora.rac2.gsd` on member `rac2`
Start of `ora.rac2.gsd` on member `rac2` succeeded.
 
 
4. 如果crs_stop不能结束,crs_start 不能启动的进程,我们有2中方法来解决:
4.1)是用crs_stop -f  参数把crs中状态是UNKNOWN的服务关掉,然后再用crs_start -f (加一个-f的参数)启动所有的服务就可以。要分别在两个节点上执行;
[oracle@rac2 ~]$ crs_start -f ora.ora9i.ora9i2.inst
Attempting to start `ora.ora9i.ora9i2.inst` on member `rac2`
Start of `ora.ora9i.ora9i2.inst` on member `rac2` succeeded.
[oracle@rac2 ~]$ crs_stop -f ora.ora9i.db
Attempting to stop `ora.ora9i.db` on member `rac2`
Stop of `ora.ora9i.db` on member `rac2` succeeded.
 
4.2)转换到root用户下用/etc/init.d/init.crs stop先禁用crs,然后再用/etc/init.d/init.crs start去启用crs,启用crs后会自动启动crs的一系列服务,注意此种方法需要在两台节点上都执行;
 
5. 可以用命令一次启动和关闭相关进程
[root@rac2 bin]# ./crs_stop -all
[root@rac2 bin]# ./crs_start -all
 
 
 
 
三. 手动启动RAC 
       一般情况下每次节点启动的时候,所有服务都会自动启动,如果需要关闭或者启动某个节点,如下所示 
        停止RAC:
                emctl stop dbconsole 
                srvctl stop instance -d raw -i raw1 
                srvctl stop instance -d raw -i raw2 
                srvctl stop asm -n raw1 
                srvctl stop asm -n raw2 
                srvctl stop nodeapps -n raw1 
                srvctl stop nodeapps -n raw2 
        启动RAC:      
                和上面的步骤正好相反即 
                srvctl start nodeapps -n raw1 
                srvctl start nodeapps -n raw2 
                srvctl start asm -n raw1 
                srvctl start asm -n raw2 
                srvctl start instance -d raw -i raw2 
                srvctl start instance -d orcl -i raw1 
                emctl start dbconsole 
                
     使用 SRVCTL 启动/停止所有实例及其启用的服务。 
srvctl start database -d orcl 
srvctl stop database -d orcl 
 
注:CRS Resource 包括GSD(Global Serveice Daemon),ONS(Oracle Notification Service),VIP, Database, Instance 和 Service. 这些资源被分成2类:
GSD,ONS,VIP 和 Listener 属于Noteapps类
Database,Instance 和Service 属于 Database-Related Resource 类。
 
有关Oracle RAC 的概念,请参考我的blog:
RAC 的一些概念性和原理性的知识
http://blog.csdn.net/tianlesoftware/archive/2010/02/27/5331067.aspx
 
示例:
[root@raw1 bin]# ./crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora.raw.db     application    ONLINE    ONLINE    raw1
ora.raw.raw.cs  application    ONLINE    ONLINE    raw1
ora....aw1.srv   application    ONLINE    ONLINE    raw1
ora....aw2.srv   application    ONLINE    ONLINE    raw2
ora....w1.inst   application    ONLINE    ONLINE    raw1
ora....w2.inst   application    ONLINE    ONLINE    raw2
ora....SM1.asm  application    ONLINE    ONLINE    raw1
ora....W1.lsnr   application    ONLINE    ONLINE    raw1
ora.raw1.gsd   application    ONLINE    ONLINE    raw1
ora.raw1.ons   application    ONLINE    ONLINE    raw1
ora.raw1.vip   application    ONLINE    ONLINE    raw1
ora....SM2.asm  application    ONLINE    ONLINE    raw2
ora....W2.lsnr  application    ONLINE    ONLINE    raw2
ora.raw2.gsd   application    ONLINE    ONLINE    raw2
ora.raw2.ons   application    ONLINE    ONLINE    raw2
ora.raw2.vip   application    ONLINE    ONLINE    raw2
 
[oracle@raw1 ~]$ emctl stop dbconsole
TZ set to PRC
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation.  All rights reserved.
http://raw1:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 10g Database Control ...
 ...  Stopped.
[oracle@raw1 ~]$ srvctl stop instance -d raw -i raw1
[oracle@raw1 ~]$ srvctl stop instance -d raw -i raw2
[oracle@raw1 ~]$ srvctl stop asm -n raw1
[oracle@raw1 ~]$ srvctl stop asm -n raw2
[oracle@raw1 ~]$ srvctl stop nodeapps -n raw1
[oracle@raw1 ~]$ srvctl stop nodeapps -n raw2
 
[oracle@raw1 bin]$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora.raw.db     application    OFFLINE   OFFLINE
Ora.raw.raw.cs  application    OFFLINE   OFFLINE
ora....aw1.srv  application    OFFLINE   OFFLINE
ora....aw2.srv  application    OFFLINE   OFFLINE
ora....w1.inst   application    OFFLINE   OFFLINE
ora....w2.inst   application    OFFLINE   OFFLINE
ora....SM1.asm  application    OFFLINE   OFFLINE
ora....W1.lsnr   application    OFFLINE   OFFLINE
ora.raw1.gsd   application    OFFLINE   OFFLINE
ora.raw1.ons   application    OFFLINE   OFFLINE
ora.raw1.vip   application    OFFLINE   OFFLINE
ora....SM2.asm  application    OFFLINE   OFFLINE
ora....W2.lsnr   application    OFFLINE   OFFLINE
ora.raw2.gsd   application    OFFLINE   OFFLINE
ora.raw2.ons   application    OFFLINE   OFFLINE
ora.raw2.vip   application    OFFLINE   OFFLINE
 
 
 
 
 四. 在启动的过程中最好检测着crs、ASM和数据库的日志:
 
crs日志:
[oracle@rac1 ~]$ tail -f /u01/app/oracle/proct/10.2.0/crs_1/log/rac1/alertrac1.log
[oracle@rac2 ~]$ tail -f /u01/app/oracle/proct/10.2.0/crs_1/log/rac2/alertrac2.log
 
ASM日志:
[oracle@rac1 ~]$ tail -f /u01/app/oracle/admin/+ASM/bmp/alert_+ASM1.log
[oracle@rac2 ~]$ tail -f /u01/app/oracle/admin/+ASM/bmp/alert_+ASM2.log
 
数据库日志:
[oracle@rac1 ~]$ tail -f /u01/app/oracle/admin/ora9i/bmp/alert_ora9i1.log
[oracle@rac2 ~]$ tail -f /u01/app/oracle/admin/ora9i/bmp/alert_ora9i2.log
 
注:tail -f命令可用于监视另一个进程正在写入的文件的增长。

‘贰’ 安装完oracle11g rac为什么重启服务器后数据库不能自动启动了

看下集群日志分析原因
一般情况下可能是没有找到集群注册表,这种情况一般是 共享存储的问题,有可能盘符发生变化啊,你做的裸设备没有raw啊等

‘叁’ oracle rac单实例下为什么会重启

总体步骤:
1、创建pfile
2、relink oracle
3、pfile启动数据库

4、配置VIP
rac转换为单机:

‘肆’ oracle 11G R2 RAC数据库能自动启动吗

所谓自动启动就是随系统启动!
命令如下
$ORACLE_HOME/bin/crsctl modify resource "ora.数据库名.db" -attr "AUTO_START=always"

‘伍’ Linux+Oracle+RAC 数据库重新启动的问题:shutdown immediate, startup mount

你看看你的oracle用户的.bash_profile 中的oracle_sid的设置是否正确,或者贴出来看看。一般是oracle_sid问题导致的。

‘陆’ oracle rac怎么设置数据库开机启动

一些CRS的服务
你可以,手工SHUTDOWN 每个实例
然后CRS_STOP -ALL,关闭其他服务。
启动的时候可以通过CRS_START -ALL启动

‘柒’ oracle11g rac安装完后 crs默认不是自动启动的吗

No bean named \\'blogDao\\' is defined,你应该没有在actioncontext.xml中配置这个bean,请仔细检查配置文件!

‘捌’ oracle11grac会用到rexec服务吗

我们可以为特定的应用或者应用操作集合定义服务,例如为联机事务处理,批处理和报表应用分别定义服务。然后通过这些服务来连接到数据库。使用服务的原因在于可以通过对服务进行配置,获得诸如应用程序性能,负载,以及可用性等各个方面的好处。
2、Service的几个重要的配置
2.1 Service Management Policy
service的startup设置,如果将一个service的management policy配置为AUTOMATIC,则在使用srvctl启动database的时候,服务也自动启动。
如果将management policy设置为MANUAL,则必须使用srvctl来启动服务。
使用crsctl重启集群时,如果服务之前是运行的,那么服务也将重新启动。
2.2 Instance Preference
一个服务的优选实例是将在其中启动该服务的实例,这些实例将为用户服务。可用实例是备用实例,当优选实例发证故障时,将在这些实例上启动服务。
假设为一个服务定义了2个优选实例,那么集群会尽量确保服务始终运行在2个实例上。
当服务运行在可用实例上时,当优选实例恢复完成,服务不会在再次回到优选实例上。
注意优选实例和可用实例的定义只有在数据库为administrator-managed的方式下才能设置。如果database处于policy-managed的方式下,则应当为服务指定server pool。见下一节。
2.3 server pool
When you define services for a policy-managed database, you assign the service to aserver pool where the database is running using SRVCTL with the -g option. You can define the service as either UNIFORM (running on all instances in the server pool) orSINGLETON (running on only one instance in the server pool) using the -c option. For singleton services, Oracle RAC chooses on which instance in the server pool theservice is active. If that instance fails, then the service fails over to another instance in the server pool. A service can only run in one server pool.
server pool相当于虚拟实例组,它包含一定数量的实例,而不指定具体是哪些实例。可以定义服务在一个server pool中的所有实例上运行或者在server pool中的一个实例中运行。
3、Oracle中与Service集成的功能
3.1 Resource Profile for a Service
resource profile在定义service时自动创建。它描述了集群如何管理service以及当优选实例故障时service将转移到哪个实例。resource profile还定义了服务的依赖关系,保证在数据库 停止时,实例与服务可以自动以正确的顺序停止。
3.2 Database Resource Manager Consumer Group Mappings for Serviceservice可以和Resource Manager Consumer Group集成,一个service属于一个Resource Manager Consumer Group。通过Resource Manager Consumer Group可以定义服务对资源的使用优先级。例如可以限定三个Group的优先级及CPU使用率,那么CPU资源将按优先级分配给各个组。
3.3 AWR for Service
可以通过AWR报告监控service性能。
4、创建服务
文档中创建服务的语法和选项如下:
5、关于服务在实例中切换的实验
测试环境OGI和RDBMS都是11.2.0.1版本,数据库有两个节点node1,node2,对应实例为orarac1,orarac2该服务使用管理员管理方式,首选实例和可用实例相关配置如下:
[oracle@node1 ~]$ srvctl config service -d orarac -s test_service服务名: test_service
服务已启用
服务器池: orarac_test_service
基数: 1
断开连接: 假
服务角色: PRIMARY
管理策略: AUTOMATIC
DTP 事务处理: 假
AQ HA 通知: 假
故障转移类型: SELECT
故障转移方法: BASIC
TAF 故障转移重试次数: 0
TAF 故障转移延迟: 0
连接负载平衡目标: LONG
运行时负载平衡目标: NONE
TAF 策略规范: BASIC
首选实例: orarac2
可用实例: orarac1
服务的运行状态服下:
[[oracle@node1 ~]$ srvctl status instance -d orarac -i orarac1实例 orarac1 正在节点 node1 上运行
[oracle@node1 ~]$ srvctl status instance -d orarac -i orarac2实例 orarac2 正在节点 node2 上运行
[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 正在实例 orarac2 上运行由于首选实例设置为orarac2,所以服务默认随实例orarac2自动启动。
使用srvctl关闭实例2,在查看服务的情况:
[oracle@node1 ~]$ srvctl stop instance -d orarac -i orarac2[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 未运行。
使用srvctl关闭首选实例,则服务并未转移到可用实例上。
再看使用sqlplus关闭实例2的情况:
首先开启实例2,服务又随实例自动启动了
[oracle@node1 ~]$ srvctl start instance -d orarac -i orarac2[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 正在实例 orarac2 上运行在节点2上登入sqlplus关闭实例2
SQL> select instance_name from v$instance;INSTANCE_NAME
------------------------------------------------orarac2
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
再查看服务状态:
[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 正在实例 orarac1 上运行服务已经转移到备选实例上了。
上面的实验结果表明:
服务会随srvctl启动实例而启动,服务不会随srvctl关闭实例而转移,服务会随sqlplus关闭实例而转移。
再看看服务是否会随sqlplus启动实例而启动:
[oracle@node1 ~]$ srvctl stop service -d orarac -s test_service[oracle@node1 ~]$ srvctl status instance -d orarac -i orarac1实例 orarac1 正在节点 node1 上运行
[oracle@node1 ~]$ srvctl status instance -d orarac -i orarac2实例 orarac2 没有在 node2 节点上运行
[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 未运行。
node2上通过sqlplus启动实例:
INSTANCE_NAME
------------------------------------------------orarac2
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1603411968 bytesFixed Size 2213776 bytesVariable Size 1207961712 bytesDatabase Buffers 385875968 bytesRedo Buffers 7360512 bytesDatabase mounted.
Database opened.
查看服务有没有随SQLPLUS启动实例而启动:
[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 未运行。
结论:
服务会随srvctl启动实例而启动,服务不会随srvctl关闭实例而转移。
服务不会随sqlplus中startup启动实例而启动,服务会随sqlplus关闭实例而转移。
注:测试环境OGI与RDBMS版本都是11.2.0.1。
6、关于RAC中的故障转移
6.1 关于RAC中的故障转移
6.1.1 客户端的故障转移
在客户端的tns中配置多个VIP连接,客户端连接时依次尝试连接,直至连接成功,如果连接中故障,则需要重新连接。
tnsnames.ora中有一个参数FAILOVER=ON,这个参数默认为ON所以不需要配置,一个tns条目可能如下:
ORARAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orarac1-vip)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = orarac2-vip)(PORT = 1521))(LOAD_BALANCE=YES)
(
CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orarac)
)
)
6.1.2 TAF
由于大部分应用使用长连接,即只创建一次到oracle的连接,以后都使用这个连接,如果用客户端故障转移必须要重新建立连接。为解决这个问题,需要新的故障转移方式TAF。
TAF也是在tnsnames.ora中定义。其包含METHOD及TYPE选项。
METHOD取值有BASIC和PRECONNECT两种:BASIC为发生故障时立刻切换。PRECONNECT为事先创建冗余连接。
TYPE取值有SESSION和SELECT两种:对于正在查询的语句,如果实例故障,SESSION模式需要重新查询,SELECT模式可以继续返回结果集,用户感受不到故障转移。
一个TAF的tnsnames中的配置可能如下:
ORARAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orarac1-vip)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = orarac2-vip)(PORT = 1521))(LOAD_BALANCE=YES)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=ORARAC)
(FAILOVER_MODE=
(TYPE=session)
(METHOD=basic)
(RETRIES=180)
(DELAY=5)
)
)
)
6.1.3 Service-Side TAF
TAF需要客户端配置tnsnames,非常麻烦,有一种只需要在服务器端配置故障转移的选项而不需要配置客户端的方法,即Service-Side TAF。
实现方法为:在实例上创建服务,为服务配置故障转移选项,客户端直接通过服务连接到数据库。
7、RAC环境中利用服务实现故障转移的实验
首先查看服务配置:
[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 正在实例 orarac2 上运行[oracle@node1 ~]$ srvctl config service -d orarac -s test_service服务名: test_service
服务已启用
服务器池: orarac_test_service
基数: 1
断开连接: 假
服务角色: PRIMARY
管理策略: AUTOMATIC
DTP 事务处理: 假
AQ HA 通知: 假
故障转移类型: SELECT
故障转移方法: BASIC
TAF 故障转移重试次数: 0
TAF 故障转移延迟: 0
连接负载平衡目标: LONG
运行时负载平衡目标: NONE
TAF 策略规范: BASIC
首选实例: orarac2
可用实例: orarac1
可以看出故障转移的方法及类型:
故障转移类型: SELECT
故障转移方法: BASIC
客户端tns的配置如下:
TEST_SERVICE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = cluster-scan)(PORT = 1521))(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test_service)
)
)
客户端连接数据库:
C:\Documents and Settings\Administrator>sqlplus system/oracle@test_serviceSQL*Plus: Release 10.2.0.1.0 - Proction on Tue Dec 2 09:49:16 2014Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProctionWith the Partitioning, Real Application Clusters, Automatic Storage Management,OLAP,
Data Mining and Real Application Testing optionsSQL> select instance_name from v$instance;INSTANCE_NAME
----------------
orarac2
为了创建长时间查询先创建大表:
SQL> create table testuser.object as select * from dba_objects;Table created.
SQL> insert into testuser.object select * from dba_objects;72252 rows created.
insert语句多执行几次
SQL> select count(*) from testuser.object;COUNT(*)
----------
1156032
执行长查询:
SQL> select * from testuser.object;
中途关闭orarac2(使用sqlplus关闭),客户端显示:
ERROR:
ORA-25402: transaction must roll back
855 rows selected.
原因是事务未提交,必须回滚。此时客户端再执行任何查询仍然报错:
SQL> select instance_name from v$instance;select instance_name from v$instance
*
ERROR at line 1:
ORA-25402: transaction must roll back
回滚事务:
SQL> rollback;
Rollback complete.
客户端在执行查询:
SQL> select instance_name from v$instance;INSTANCE_NAME
----------------
orarac1
服务被转移到了orarac1上运行了,并且客户端session并未中断。
将上述过程重来一遍,但是在长查询之前进行提交:
先将orarac2启动,然后手动重定位服务
[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 正在实例 orarac1 上运行[oracle@node1 ~]$ srvctl relocate service -d orarac -s test_service -h将服务从集群的一个节点临时重新定位到另一个节点(命令忘记了,中途查一下帮助)。
[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 正在实例 orarac1 上运行[oracle@node1 ~]$ srvctl relocate service -d orarac -s test_service -h用法: srvctl relocate service -d <db_unique_name> -s <service_name> {-i <old_inst_name> -t <new_inst_name> | -c <current_node> -n <target_node>} [-f]
为管理员管理的数据库指定实例, 或者为策略管理的数据库指定节点-d <db_unique_name> 数据库的唯一名称-s <service> 服务名
-i <old_inst> 旧的实例名
-t <new_inst> 新的实例名
-c <current_node> 要从中重新定位服务的节点名-n <target_node> 要将服务重新定位到的节点名-f 在停止或重新定位服务操作期间断开所有会话-h 输出用法
[oracle@node1 ~]$ srvctl relocate service -d orarac -s test_service -i orarac1 -t orarac2[oracle@node1 ~]$ srvctl status service -d orarac -s test_service服务 test_service 正在实例 orarac2 上运行此时验证一下客户端session是否正常:
SQL> select count(*) from testuser.object;COUNT(*)
----------
72252
没有问题。
SQL> select instance_name from v$instance;INSTANCE_NAME
----------------
orarac1
虽然relocate了服务到orarac2上,但是已经连接的session仍然处于orarac1上。
重新连接sqlplus确认连接到orarac2上,并确认不存在未提交事务:
SQL> commit;
Commit complete.
这一次只使用72252行,此时没有未提交事务。
执行长查询之前确认连接实例:
SQL> select instance_name from v$instance;INSTANCE_NAME
----------------
orarac2
SQL> select * from testuser.object;
在服务器上关闭实例2:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
客户端查询仍在进行,等待运行结果:
......
72252 rows selected.
看到客户端查询正常完成,和定义的TYPE=SELECT结果相一致。
8、 一些关于服务故障转移的结论
测试版本为11.2.0.1;节点为node1,node2;数据库名为orarac;实例名为orarac1,orarac2;服务名为test_service;服务配置信息见上面说明。
通过上述实验可以得出下面结论:
通过服务可以定义负载均衡及故障转移,而不需要在客户端做任务配置。
srvctl启动首选实例,服务会自动启动。
srvctl关闭服务的首选实例,服务不会自动转移到备选实例。
sqlplus中启动首选实例,服务不会自动启动。
sqlplus中关闭首选实例,服务会自动转移到备选实例。
服务转移到备用实例后,此时首选实例恢复正常,服务不会自动回到首选实例。
客户端session连接到服务后,如果此时通过srvctl relocate将服务转移到其他实例,客户端连接的实例仍然不变。此时故障转移仍然正常。
如果事务未提交,此时发生故障转移,则必须回滚事务,才能进行其他操作。

‘玖’ 如何正确手工启动Windows下的Oracle RAC数据库

这是一则来自于某德国客户生产环境的RAC数据库启动出现故障的案例,记录下来一是用于对自己的警醒,二是可以同广大网友分享。
操作系统环境:Windows Server 2008 R2 Enterprise version 6.1(Build 7601:Service Pack 1)
数据库环境:10gR2 10.2.0.5.0的64位RAC双节点数据库;
上周末,在顺利地对RAC数据库的几张分区表做调整之后,正常关闭RAC数据库,并重新启动2台Windows 2008 R2的操作系统之后,尝试启动Oracle CRS时,发现报错:
1 在任何一个节点的服务项里,启动OracleCRService服务时,报错,其中OracleCSService的状态一直停留在Starting状态,其它服务项无任何变化;
2 重启Windows服务器后,使用$CRS_HOME\bin\crsctl start crs在命令行尝试启动CRS时,依然报错;
3 接下去,开始检查CRS的错误日志:在C:\oracle\proct\10.2.0\crs\log\dehamora002\crsd\crsd.log日志文件中看到下述报错信息:

view sourceprint?
1 2012-12-08 11:52:52.606: [ OCRMAS][3876]th_master:13: I AM THE NEW OCR MASTER at incar 2. Node Number 2
2 2012-12-08 11:52:52.606: [ OCROSD][3876]utgdv:11:could not read reg value ocrmirrorconfig_loc os error= The system could not find the environment option that was entered.
3
4 2012-12-08 11:52:52.621: [ OCROSD][3876]utgdv:11:could not read reg value ocrmirrorconfig_loc os error= The system could not find the environment option that was entered.
5
6 2012-12-08 11:52:52.637: [ OCRRAW][3876]proprioo: for disk 0 (\\.\ocrcfg), id match (1), my id set (1381592635,1028247821) total id sets (1), 1st set (1381592635,1028247821), 2nd set (0,0) my votes (2), total votes (2)
7 2012-12-08 11:52:52.715: [ OCRMAS][3876]th_master: Deleted ver keys from cache (master)
从上可以看出,问题应该是出现在服务器访问共享存储时出现的。果然,在远程联系德国汉堡客户IT人员检查后,发现是服务器同存储间出现了问题,协调并解决该错误。

4 再次重启Windows,并尝试启动CRS时,C:\oracle\proct\10.2.0\crs\log\dehamora002\cssd\cssdOUT.log日志文件中看到下述报错信息:
view sourceprint?
01 Oracle Database 10g CSS Release 10.2.0.5.0 Proction Copyright 1996, 2004, Oracle. All rights reserved.
02 12/08/12 12:02:06 ssmain_run_css: launching boot check 1 with c:\oracle\proct\10.2.0\crs\bin\crsctl.exe check boot
03 OCR initialization failed accessing OCR device: PROC-26: Error while accessing the physical storage Operating System error [The system cannot find the file specified.
04
05 ] [2]
06 12/08/12 12:02:06 ssmain_run_css: boot check returned 8, looping
07 12/08/12 12:02:07 ssmain_run_css: launching boot check 2 with c:\oracle\proct\10.2.0\crs\bin\crsctl.exe check boot
08 OCR initialization failed accessing OCR device: PROC-26: Error while accessing the physical storage Operating System error [The system cannot find the file specified.
09
10 ] [2]
11 12/08/12 12:02:07 ssmain_run_css: boot check returned 8, looping
12 12/08/12 12:02:08 ssmain_run_css: launching boot check 3 with c:\oracle\proct\10.2.0\crs\bin\crsctl.exe check boot
13 OCR initialization failed accessing OCR device: PROC-26: Error while accessing the physical storage Operating System error [The system cannot find the file specified.
14
15 ] [2]
通过查询Metalink:
Can not Start CRS on Windows Cluster [ID 1115153.1]
How to Start (or stop) 10gR2 or 11gR1 Oracle Clusterware Services Manually in Windows [ID 729512.1]
OracleCSService does not start – PROC-26 error possible [ID 305093.1]
找到产生问题的原因:原来这套RAC环境下的所有Oracle服务都是手工启动的方式,正常情况下,手工启动OracleCRService服务时,会自动启动依赖的相关服务。而该环境下,oracle并没有如我们期待的那样去启动与OracleCRService相关的服务。
准确定位到原因后,解决问题的办法其实也很简单,就是如Metalink文档上说明的方案,手工依次启动. OracleObjectService、OracleClusterVolumeService 、OracleCSService、OracleEVMService、OracleCRService 很快,RAC数据库重新正常启动!

启示:
1 对于Windows环境下的RAC,最好是将OracleObjectService的启动类型置为自动启动;
2 如果上述服务是手工启动的,那么正确手工启动Windows下的Oracle RAC数据库的顺序依次是:OracleObjectService、OracleClusterVolumeService(if using OCFS) 、OracleCSService、OracleEVMService、OracleCRService

‘拾’ aix5.3 上安装了oracle10g,以rac的方式集群(共两个节点),怎重启数据库

关闭:
srvctl stop instance -d orcl -i orcl1
srvctl stop instance -d orcl -i orcl2
启动:
srvctl start instance -d orcl -i orcl1
srvctl start instance -d orcl -i orcl2
以上命令假设你的数据库名为orcl,实例名分别为orcl1,orcl2