AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 303142
Accepted
Jeremy
Jeremy
Asked: 2021-11-26 22:35:37 +0800 CST2021-11-26 22:35:37 +0800 CST 2021-11-26 22:35:37 +0800 CST

如何从 HOST 连接到 Oracle RAC

  • 772

对于一个大学项目,我必须设置一个 RAC 实例和一个应用程序,我已经设法通过使用这个视频指南使用虚拟机来配置我的 RAC 实验室,现在我只需要编写一个应用程序来连接到我的 RAC 实例但是...我不知道该怎么做!我想我必须连接到 SCAN 网络?但是我已经在每台机器的网络适配器中将其配置为专用网络...我没有配置 DNS(我被卡了 4 天,视频指南实际上并没有显示如何配置它),所以现在我在我编写节点应用程序之前,尝试从 DBeaver 连接到这个数据库。

这是关于我的实验室的一些信息。

我有两个实例:node1 和 node。 在此处输入图像描述

服务状态:

$ /crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

扫描配置?

$ ./srvctl config scan
SCAN name: node-scan, Network: 1
Subnet IPv4: 192.168.24.0/255.255.255.0/enp0s3, static
Subnet IPv6: 
SCAN 1 IPv4 VIP: 192.168.24.41
SCAN VIP is enabled.
SCAN 2 IPv4 VIP: 192.168.24.42
SCAN VIP is enabled.
SCAN 3 IPv4 VIP: 192.168.24.43
SCAN VIP is enabled.

扫描监听器

$ ./srvctl config scan_listener
SCAN Listeners for network 1:
Registration invited nodes: 
Registration invited subnets: 
Endpoints: TCP:1521
SCAN Listener LISTENER_SCAN1 exists
SCAN Listener is enabled.
SCAN Listener LISTENER_SCAN2 exists
SCAN Listener is enabled.
SCAN Listener LISTENER_SCAN3 exists
SCAN Listener is enabled.

由于没有 DNS,我必须像这样为两个节点配置 /etc/host。

# Default

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
# Public
192.168.24.1 node1.localdomain node1
192.168.24.2 node2.localdomain node2
# Private
192.168.10.1 node-priv.localdomain node1-priv
192.168.10.2 node2-priv.localdomain node2-priv
# Virtual
192.168.24.31 node1-vip.localdomain node1-vip
192.168.24.32 node2-vip.localdomain node2-vip
# SCAN
192.168.24.41 node-scan.localdomain node-scan
192.168.24.42 node-scan.localdomain node-scan
192.168.24.43 node-scan.localdomain node-scan
oracle connectivity
  • 2 2 个回答
  • 449 Views

2 个回答

  • Voted
  1. ibre5041
    2021-11-27T00:05:32+08:002021-11-27T00:05:32+08:00

    恕我直言,您将需要 DNS。

    • Oracle 客户端首先对 SCAN 地址执行 DNS 查找。它将以随机顺序获取所有 3 个 IP。它将选择第一个。(PS:由于某些版本的 Oracle 客户端不使用 OS 提供的解析器,而是使用嵌入式解析器)。

    • 然后 Oracle 客户端连接到在第一个 IP 上运行的 SCAN 侦听器之一。

    • 扫描侦听器以重定向消息响应,指向一个 VIP 侦听器。通常它会将您重定向到负载最少的节点。AFAIK 在这种情况下,重定向消息不包含 VIP,而是包含 VIP 的主机名。

    • 然后 Oracle 客户端通过 DNS 解析这个 VIP 名称,并连接到 VIP 侦听器并执行身份验证。

    PS:尝试将所有 IP 输入到客户端机器上的 /etc/hosts 中。也许它会起作用。两个节点集群有 7 个 IP,而不是将它们全部放入客户端(以及两个数据库节点)上的 /etc/hosts 中。

    • 1
  2. Best Answer
    miracle173
    2021-11-27T13:03:23+08:002021-11-27T13:03:23+08:00

    如果您有 DNS,那么想法是在 DNS 服务器上以循环方式配置三个 IP 地址。如果Oracle客户端想通过扫描DNS名称连接,他会得到一个随机顺序的三个IP列表,他会一个一个地尝试,直到成功。这使得 SCAN 侦听器高可用,如果一个扫描侦听器进程关闭,其他两个可能仍然可用。集群注意没有所有侦听器仅在一个节点上运行。在客户端到达 SCAN 侦听器后,此侦听器会将其转发到集群节点之一的 vip-listener。

    我没有 DNS,你有很多可能性:

    如果可能,您可以定义通常由客户端的 DNS 服务器提供的 fail_over/load_balance 功能:

    sales.example.com =(DESCRIPTION=
    (ADDRESS_LIST= (LOAD_BALANCE=on)(FAILOVER=ON)
    (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.192)(PORT=1521))
    (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.193)(PORT=1521))
    (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.194)(PORT=1521)))
     (CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))
    

    这里的 IP 地址是 SCAN 侦听器地址。此示例来自 Oracle 白皮书Oracle 单客户端访问名称 (SCAN),2013 年 6 月,第 12p 页。我已经在这个答案中引用的这篇论文可能对你也有帮助。

    但您也可以只连接一个 SCAN IP 地址,例如 133.22.67.192。当然,如果此 IP 已关闭,您将无法连接。

    sales.example.com =(DESCRIPTION=
        (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.192)(PORT=1521))
        (CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))
    

    您也可以直接连接到节点 VIP,但是如果服务器关闭,您将没有负载平衡或故障转移,例如

    sales.example.com =(DESCRIPTION=
        (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.111)(PORT=1521))
        (CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))
    

    如果使用,您可以避免 SCAN 侦听器并且仍然具有负载平衡和故障转移

    sales.example.com =(DESCRIPTION=
        (ADDRESS_LIST= (LOAD_BALANCE=on)(FAILOVER=ON)
        (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.111)(PORT=1521))
        (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.112)(PORT=1521)))
         (CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))
    

    对于这些配置中的每一个,都有它们有意义的情况。

    • 1

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve