我做了一些谷歌搜索,但在几年前找不到这个问题的答案,所以我想我会问。Oracle 的 RAC 特性为读取和写入事务提供负载平衡,以及无需停机的横向扩展和高可用性(至少,据我所知 - 我们即将部署我们的第一个使用 RAC 的数据库,所以我们会看看情况如何)。
是否有提供等效功能的任何 SQL Server 功能集(或您可以安装在顶部的第三方组件)?我们一直使用 Windows 集群,其中故障转移事件会导致大约 20-30 秒的 SQL 停机时间 - 总是可以容忍的,但并不理想。现在,使用 SQL 2012 中的 AlwaysOn,SQL Server 将其缩短到大约 15 秒,并添加了只读辅助数据库的概念,但它们仍然要求通过单个连接点阻塞写入事务(大大改进,因为许多事务是只是阅读,但仍然不是真正的负载平衡),并且在节点故障或需要修补的情况下,仍然存在停机时间。
我想这只是更多的好奇心 - 我觉得这是 SQL Server 落后于 Oracle 的唯一领域(至少在我个人看到使用的功能中)。我想看看是否有任何选项可以缩小这一差距,并在我们等待添加 Microsoft 的等效功能的同时改进我们自己的 SQL Server 部署 - 也许在 SQL 2014/2015 中?
sql-server feature-comparison rac oracle-rac high-availability
随着 Oracle 工程系统的引入,DBA 在某种程度上更接近于基础设施设计决策,并且期望至少对数据库的网络设计要求有一些意见。至少这是我发现自己的情况:)
部署 ODA 进行测试后,我发现自己采用了当前设置:
系统控制器 0 具有连接到典型边缘交换机 Catalyst 2960 系列的公共绑定接口 (bond0)。管理接口 (bond1) 连接到相同类型的第二个边缘交换机。
类似地,系统控制器 1 的公共接口连接到第二个交换机,而管理接口连接到第一个交换机。
这样,如果其中一个开关出现故障,操作员将能够通过公共界面或管理界面到达每个系统控制器以促进诊断。
在 Cisco 端,为 ODA 的 4 个绑定接口配置了 EtherChannel 组。这两个交换机单独连接到网络的其余部分,两者之间没有直接链接。
乍一看,这确实是一个合理的设计,但我对不同故障场景的思考越多,我似乎提出的问题就越多。
考虑到这些边缘型交换机本身并不是冗余的,集群能够处理由于电源故障导致的一台交换机不可用,或者一台交换机无法转发数据包似乎是相当重要的。
数据库客户端(在本例中为 Zend 服务器应用程序服务器)每个都类似地通过绑定接口连接到两个交换机中的一个。这就带来了一些关于负载均衡的问题:我对11gR2 RAC的理解,简单的连接到SCAN地址,很可能让客户端走很长一段路到主网,然后通过另一个交换机回来,这几乎不能考虑要非常有效率。
如果交换机出现故障或停止转发数据包,会发生什么情况?连接会通过 SCAN 找到可访问的 VIP 侦听器吗?RAC 是否会以某种方式检测网络故障并将 SCAN 和 VIP 移动到具有工作且可访问的公共接口的系统控制器?老实说,我看不出它会如何。
虽然客户端在故障转移场景中通过核心网络并返回很长一段路是可以接受的,但在正常生产中避免它肯定会很好。
我确信 Oracle 对这一切应该如何协同工作有一个非常清晰的认识,但恐怕我并没有那么清楚地看到这一切。
边缘级/非冗余交换机是否可以实现完全冗余?我们能否以某种方式对客户端连接在生产和故障转移情况下的路由位置添加一些控制?也许有一种很好的方法可以将两台交换机互连,以允许一台交换机上的客户端和另一台上的数据库侦听器之间直接进行通信?
在这一点上,我正在寻找应应用于典型高可用性 ODA 实现的任何最佳实践和基本网络设计注意事项。
希望这对任何面临为其 ODA 制定网络设计决策的 DBA 有用:)
更新:
ODA 在主动备份配置中配置了绑定。我认为这可能允许设置绑定上的每个接口都连接到不同的交换机,而无需任何交换机端配置。
有谁知道是不是这种情况?
[root@oma1 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: …
Run Code Online (Sandbox Code Playgroud) 我们在两台不同的服务器上有 Oracle 11gR1 RAC 两个实例,新的 undo 表空间UNDOTBS20140508创建了 30G,我想删除旧的UNDOTBSX02,我做了以下操作:
CREATE UNDO TABLESPACE UNDOTBS20140508 DATAFILE '+DATA/....../UNDOTBS20140508' SIZE 20G;
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS20140508;
DROP TABLESPACE UNDOTBSX02 INCLUDING CONTENTS AND DATAFILES;
Run Code Online (Sandbox Code Playgroud)
尝试删除UNDOTBSX02 时,它显示以下错误:
Run Code Online (Sandbox Code Playgroud)Error starting at line : 13 in command - DROP TABLESPACE UNDOTBSX02 INCLUDING CONTENTS AND DATAFILES Error report - SQL Error: ORA-00604: error occurred at recursive SQL level 1 ORA-06502: PL/SQL: numeric or value error ORA-06512: at line 57 ORA-30013: undo tablespace 'UNDOTBSX02' …
我在具有两个节点的 RAC 环境中设置了 Oracle 11gR2。我设置了 SCAN,例如:我在 DNS 设置上有两个条目,因此我可以 ping SCAN 名称并到达任一节点。我也可以 ping 两个-vip
地址。
理论上,新的 SCAN 功能应该提供比透明应用程序故障转移 (TAF) 更好的功能,TAF 需要在每个客户端中进行额外配置。使用 SCAN,我可以连接到 SCAN 地址,我应该能够:
连接到数据库并检查我连接到哪个实例,例如(在 SQL*Plus 上):
select instance_name, host_name from v$instance;
Run Code Online (Sandbox Code Playgroud)关闭我连接到的实例shutdown abort
(在单独的会话中)
在我执行步骤 1 的同一个会话中,如果我重新运行相同的select
语句,它应该会自动跳到幸存的节点。
相反,我得到:
ORA-03113: end-of-file on communication channel
Process ID: XXXXX
Session ID: YYY Serial number: ZZ
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
注意:在第 2 步之后,我可以退出 SQL*Plus 并重新连接就好了。如果我试图留在同一个会话中,它就行不通。
如果我将客户端中的 tnsnames.ora 修改为:
RAC =
(DESCRIPTION =
(LOAD_BALANCE = YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = cluster-scan)(PORT = …
Run Code Online (Sandbox Code Playgroud) 是否可以在同一台服务器上安装和运行 2 个不同的 oracle 版本(11g 和 12c)软件和数据库?有可能那么我们怎么做?如果不是那么为什么?
谢谢
拉胡尔·乔希
我在非常强大的服务器上安装了 Oracle RAC,可以说这些服务器有额外的内存、cpu 和存储:) ...所以我的服务器比它需要的要强大得多。
我的经理和其他管理员(没有足够的资源)需要将我的 RAC 移动到虚拟机,以便利用 RAC 服务器来满足他们的需求。
我需要你的建议...怎么办?我是否必须在虚拟机上移动我的 RAC?如果不是,我应该说什么论据来证明这个想法是愚蠢的?
非常感谢您,等待您的建议和巧妙的论据...
我遇到的情况是,如果 RAC 阵列上的某个数据库突然宕机,则事务会回滚,并且 JBoss 和数据库之间的连接会中断。
我想要的是保留 JDBC 连接并将它们重定向到阵列上的另一个 oracle 数据库。另外,交易可以保留吗?
在这种情况下,我应该使用 TAF 还是 FCF?
另外,如果建议使用TAF,那么JBoss 中是不是一定要使用thick driver?
rac ×7
oracle ×6
oracle-12c ×2
installation ×1
network ×1
oracle-11g ×1
oracle-rac ×1
sql-server ×1