所谓 Oracle RAC
全称 Oracle Real Application Clusters,即 Oracle 实时应用程序集群,使得不同应用程序访问多个 Oracle Instance 如同访问一个 Oracle Instance(当然性能是在水平方向上相应扩展的),Node 间通过 Private Network 进行通信;所有的操作通过日志文件进行记录,放于共享设备上可以被所有集群的节点同时读写、同步。
在Oracle9i之前,RAC的名称是OPS(Oracle Parallel Server)。RAC 与 OPS 之间的一个较大区别是,RAC采用了Cache Fusion(高速缓存合并)技术。在 OPS 中,Node 间的数据请求需要先将数据写入磁盘,然后发出请求的节点才可以读取该数据。使用 Cache fusion 时,RAC的各个节点的数据缓冲区通过高速、低延迟的 Private Network 进行数据块的传输。
RAC 的主要特性
- 多节点 Load Balance。
- 高可用性:支持 Failover & Switchover 功能,将异常的影响降低到最小化。Failover 故障切换——当出现异常故障情况下系统自动发生的操作;Switchover 为人工切换。
- 支持Primary & Standby 的横向扩展方式提高联机 Transaction 的可靠性。
- 可以节约水平扩展的软件开发成本,对设备和数量没有限定要求。
- 使用 Cache Fusion(高速缓存合并)技术。
RAC 连接数据库 Java 示例
public static void main(String arg[]) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))(LOAD_BALANCE = yes)(FAILOVER = ON)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = db.domain)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 20)(DELAY = 15))))";
Connection c = DriverManager.getConnection(url,"demo","demo");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("select current_date from dual");
while(r.next()) { System.out.println(r.getString(1)); }
}
catch(Exception e) {
System.out.println(e.toString());
}
}
RAC常用配置说明
- listener.ora - 网络上的每一台 RAC 服务器都必须包含一个 listener.ora 文件,该文件列出集群中所有监听进程的名字、地址以及它们所支持的实例。监听进程接收来自 Oracle RAC 网络客户机的连接。参数说明:
- LISTENER:监听名称。可以配置多个监听,多个监听需要靠端口号要区分开来。
- GLOBAL_DBNAME:全局数据库名。通过 select * from global_name; 查询得出。
- ORACLE_HOME:Oracle软件的根目录。
- SID_NAME:服务器端(本机)的SID。
- PROTOCOL:监听协议,一般都使用TCP。
- HOST:本机IP地址。
- PORT:监听的端口号。使用 netstat --an 检查该端口不被占用。
- tnsnames.ora
- LocalName:就是服务器本地机器的命名。
- ADDRESS:服务器的地址 。
- PROTOCOL:使用的协议,一般都使用TCP。
- PORT:服务器的监听端口号 。
- SERVICE_NAME:服务器的数据库服务名称。