ORACLE 实例及RAC
一、问题
(1)现象
部署一个sh脚本到生产oracle服务器上,该sh脚本负责读取外系统提供的txt文件,然后用sql loader入库,由oracle服务器的crontab定时调用这个sh脚本。脚本在测试库上测试非常正常,数据能正常入库,但是,生产上不能,报错,
错误信息为:SQL*Loader-128: unable to begin a session
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
检查oracle的ORACLE_HOME等参数,发现正常。相同参数部署的其他sh脚本能在生产上正常运行。
(2)分析
测试环境是单数据库实例环境,生产的oracle,是RAC环境。RAC环境一般包含两台物理机器,一个存储。两个物理机器上每个机器部署一个oracle,同时访问存储上的数据库文件。两个实例拥有不同的SID。其他sh脚本能正常运行,是因为运行在正确的物理机器上。例如,如果有两台机器,sid分别为A机器为resdb1,B机器为resdb2。如果脚本里面定义的SID=resdb1,运行脚本的机器为B,就会报错,运行脚本机器为A,则正常。以上错误是因为在错误的机器上运行了脚本导致的。
(3)解决
保持两者一致!根据脚本里面配置的sid,找到对应的机器运行脚本!
二、ORACLE实例和RAC介绍
Oracle实例:实例是指操作系统中一系列的进程和进程所分配的内存块。通俗的说,实例是访问数据库文件的通道。Oracle RAC 就是多个数据库实例可以同时打开相同的数据库,进行并发的操作。多实例数据库是 Oracle高可用架构和高可扩展性架构的核心技术, 多个实例同时打开数据库进行读写,可以避免某个实例故障导致的系统不可用,同时多实例实现负载分担,也可以减轻某个实例的工作负载,从而提高整体吞吐能力。
RAC是一种充分利用服务器资源的高可用性实现方案,RAC的并行模式实现方式与传统的双机热备实现方式截然不同,如图:
两个节点在传统的双机热备环境中,始终有一台机器作为备用机,只有当主节点出现问题的时候才会切换到备用机上;如果主机一直没有出现问题,那么备用机始终处于空闲状态,这在资源的利用上以及成本方面都是巨大的浪费。但RAC是一种并行模式的架构,也就是说,两个节点的集群节点间是一种并行运行的关系,当一台机器出现问题,请求会自动转发到另一台机器,没有任何一台机器作为备用机一直不被使用,这样就充分利用了服务器资源。同时,传统的双机热备构架在出现问题时,常常需要数分钟的切换时间,而RAC在出现问题时,针对存在的会话只需要数十秒的时间就可以完成失败切换过程,对新会话的创建不会产生影响,在切换时间上也有比较大的优势。