注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
安装和配置 Oracle Connection Manager
简介
Oracle Connection Manager (CMAN) 是充当代理服务器的 Oracle 实用程序,用于将连接请求从客户机转发到数据库。它在会话级别运行,通常安装在单独的服务器上。
CMAN 用例
-
方案 1:访问控制
使用基于规则的配置拒绝或接受特定的客户机请求,例如,基于客户机 IP 地址。
在下图中,如果客户机从计算机 IP
192.168.0.74
连接,则将 ACCEPTED 连接到数据库,但如果有任何客户机尝试从计算机192.168.0.75
连接进行连接,则该连接将被拒绝。同样,我们可以指定允许和拒绝的 IP 地址范围。 -
方案 2:过境运输路线
客户机无权直接访问一个或多个数据库,CMAN 会将连接从客户机重定向到相应的数据库。
-
方案 3:不同的端口
目标数据库使用不同的端口,例如
1521
和1522
,但这些端口在客户端未打开。将 CMAN 配置为使用其他端口,例如1999
。 -
方案 4:不同的 IP 协议
客户机与数据库使用不同的 IP 协议,例如,客户机使用 IPv6,但数据库使用 IPv4。CMAN 用作 IPv6 和 IPv4 之间的网桥。在本教程中,CMAN 必须在配置了至少一个 IPv6 和至少一个 IPv4 接口的双栈主机上运行。
目标
- 设置 Oracle Connection Manager (CMAN) 以限制或允许与数据库的连接。
先决条件
-
预配 OCI 环境,例如(区间、虚拟云网络 (VCN)、子网等)。
-
预配 Oracle Base Database Service 数据库。例如,目标。
-
预配 Oracle Cloud Infrastructure (OCI) 计算 VM(CMAN 主机)。
-
客户机虚拟机 (VM) 主机计算。例如,来源。
任务 1:Oracle Connection Manager 安装的初始设置
在本教程中,我们将使用以下 IP 地址。
- OCI 计算 VM 的名称为
client
,IP =192.168.0.74
,IP =192.168.0.75
。 - OCI 计算 VM 名为
cman
,IP =192.168.0.199
。 - Oracle Base Database Service VM,名为
dbcs01
,IP =192.168.0.48
。
打开防火墙连接
端口应该在 1999 年从客户机 VM 打开到 CMAN VM,在 1521 年从 CMAN VM 打开到数据库服务器。
-
第 1 个连接,从 CMAN 到数据库服务器:
[oracle@cman ~]$ curl -sv telnet://192.168.0.48:1521 * Rebuilt URL to: telnet://192.168.0.48:1521/ * Trying 192.168.0.48... * TCP_NODELAY set * Connected to 192.168.0.48 (192.168.0.48) port 1521 (#0)
-
第二个连接,从客户端 VM 到 CMAN VM:
我们将端口 1999 用于 CMAN。默认情况下,端口 1999 未打开,因此我们需要打开此端口。
在 CMAN 主机上以 root 用户身份运行以下命令以打开 1999 端口。
$firewall-cmd --permanent --add-port=1999/tcp $firewall-cmd –reload [oracle@client1 ~]$ curl -sv telnet://192.168.0.199:1999 * Rebuilt URL to: telnet://192.168.0.199:1999/ * Trying 192.168.0.199... * TCP_NODELAY set * Connected to 192.168.0.199 (192.168.0.199) port 1999 (#0)
任务 2:在 Oracle Connection Manager 虚拟机上安装 Oracle Connection Manager
-
准备 CMAN VM 进行安装。运行以下命令以创建 Oracle 用户、安装软件包、更改内核参数等。
$sudo su - root $yum install oracle-database-preinstall-21c.x86_64
-
运行
mkdir -p $HOME/stage
命令以创建目录。 -
从以下位置下载 Oracle Client
21.3.0
:Oracle Database 21c ,使用winscp
或$HOME/stage
下的任何其他文件传输实用程序在 CMAN VM 上复制。如果无法使用 SSH,请在浏览器中打开 Oracle Database 21c 客户端下载页面,然后单击以下载适用于 Linux 的
LINUX.X64_213000_client.zip
文件。打开浏览器,右键单击下载中的文件,然后选择复制下载链接,如下所示。每次单击下载链接时,AuthParam URL 参数都会有所不同。在 Linux 计算机上,导航到所需的目录(例如
$HOME/stage
),然后输入以下命令:$ wget "https://download.oracle.com/otn/linux/oracle21c/LINUX.X64_213000_client.zip?AuthParam=1631008911_576110421cdef54a2d47d9562bee0e5a" -O LINUX.X64_213000_client.zip
-
以 Oracle 用户身份解压缩客户机软件。将创建名为 client 的目录。
[oracle@cman stage]$ ls -ltr /home/oracle/stage drwxr-xr-x. 5 oracle oinstall 90 Jul 27 2021 client -rwxr-xr-x. 1 oracle oinstall 1075931428 Sep 1 10:40 LINUX.X64_213000_client.zip
-
现在,安装 CMAN 和 SQL*Plus。
运行以下命令以创建用于运行 CMAN 的新 Oracle 用户 (
oracle
)、基本目录和起始目录(安装最新版本的 Oracle Database 的预安装库以在 Linux 中设置 Oracle 用户)。$ sudo su - root $ yum install oracle-database-preinstall-21c.x86_64 $ mkdir /u01 $ chown oracle:oinstall /u01 $ su - oracle $ mkdir -p /u01/app/oracle/product/cman2130
-
准备用于安装 CMAN 和 SQL*Plus 的响应文件。
$ cat <<EOF > $HOME/client21.rsp oracle.install.responseFileVersion=/oracle/install/rspfmt_clientinstall_response_schema_v21.0.0 ORACLE_HOSTNAME=$(hostname) UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory SELECTED_LANGUAGES=en ORACLE_HOME=/u01/app/oracle/product/cman2130 ORACLE_BASE=/u01/app/oracle oracle.install.client.installType=Custom oracle.install.client.customComponents="oracle.sqlplus:21.0.0.0.0","oracle.network.client:21.0.0.0.0","oracle.network.cman:21.0.0.0.0","oracle.network.listener:21.0.0.0.0" EOF
-
运行以下命令安装 CMAN。
$HOME/stage/client/runInstaller -silent -responseFile $HOME/client21.rsp ORACLE_HOME_NAME=cman2130
-
以 root 用户身份完成安装。以 root 用户身份运行以完成安装。
$ /u01/app/oraInventory/orainstRoot.sh $ /u01/app/oracle/product/cman2130/root.sh
-
在
.bash_profile
文件 ($HOME/.bash_profile
) 中附加以下行,以便每次以 Oracle 用户身份登录时都能轻松访问cmctl
和 SQL*Plus 实用程序。export ORACLE_HOME=/u01/app/oracle/product/cman2130 export LD_LIBRARY_PATH=/u01/app/oracle/product/cman2130/lib export PATH=/u01/app/oracle/product/cman2130/bin:$PATH:$HOME export TNS_ADMIN=/u01/app/oracle/product/cman2130/network/admin/
-
运行以下命令以确保 SQL*Plus 和 CMAN 都在运行。
[oracle@cman ~]$ sqlplus /nolog SQL*Plus: Release 21.0.0.0.0 - Production on Wed Sep 11 05:37:26 2024 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. SQL> exit [oracle@cman ~]$ cmctl CMCTL for Linux: Version 21.0.0.0.0 - Production on 11-SEP-2024 05:37:30 Copyright (c) 1996, 2021, Oracle. All rights reserved. Welcome to CMCTL, type "help" for information. CMCTL>
任务 3:配置 Oracle Connection Manager
在本任务中,我们将配置 CMAN。首先,打开 CMAN 监听程序应在 CMAN VM 上使用的端口。在本例中,我们使用端口 1999 来演示它不一定是 1521 并将其与数据库监听程序端口区分开来。以 root 身份:
$firewall-cmd --permanent --add-port=1999/tcp
$firewall-cmd –reload
-
常规 CMAN 配置。
以 Oracle 用户身份,使用以下内容在
$TNS_ADMIN
下创建 CMAN 配置文件cman.ora
。注:将主机 IP 地址更改为 CMAN VM IP!
$cat $TNS_ADMIN/cman.ora cman = (configuration= (address=(protocol=tcp)(host=192.168.0.199)(port=1999)) (parameter_list = (aso_authentication_filter=off) (connection_statistics=yes) (log_directory=/u01/app/oracle/product/cman2130/network/log) (log_level=support) (max_connections=256) (idle_timeout=0) (inbound_connect_timeout=0) (session_timeout=0) (outbound_connect_timeout=0) (max_gateway_processes=16) (min_gateway_processes=2) (remote_admin=on) (trace_directory=/u01/app/oracle/product/cman2130/network/trace) (trace_level=support) (trace_timestamp=off) (trace_filelen=1000) (trace_fileno=1) (max_cmctl_sessions=4) (event_group=init_and_term,memory_ops) (registration_invited_nodes = *) (service_affinity=off) ) (rule_list= (rule= (src=*)(dst=*)(srv=*)(act=accept) (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on)) ) ) ) ) VALID_NODE_CHECKING_REGISTRATION_CMAN = OFF
-
基于规则的 CMAN 配置。
如果返回并检查
cman.ora
文件中的规则,将找到以下内容。(src=*)(dst=*)(srv=*)(act=accept)
因此,我们允许从任何源、任何目标和任何服务进行连接。使用规则列表,可以定义自己的规则以允许或拒绝从特定客户机、特定目标或到特定服务的连接。例如:
$cat cman.ora cman = (configuration= (address=(protocol=tcp)(host=192.168.0.199)(port=1999)) (parameter_list = (aso_authentication_filter=off) (connection_statistics=yes) (log_directory=/u01/app/oracle/product/cman2130/network/log) (log_level=support) (max_connections=256) (idle_timeout=0) (inbound_connect_timeout=0) (session_timeout=0) (outbound_connect_timeout=0) (max_gateway_processes=16) (min_gateway_processes=2) (remote_admin=on) (trace_directory=/u01/app/oracle/product/cman2130/network/trace) (trace_level=support) (trace_timestamp=off) (trace_filelen=1000) (trace_fileno=1) (max_cmctl_sessions=4) (event_group=init_and_term,memory_ops) (registration_invited_nodes = 192.168.0.48) (service_affinity=off) ) (rule_list= (rule= (src=cman)(dst=127.0.0.1)(srv=cmon)(act=accept) (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on)) ) (rule= (src=192.168.0.74)(dst=192.168.0.48)(srv=GGC1_SJ.sub02090543360.vcnsj.oraclevcn.com)(act=accept) (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on)) ) (rule= (src=192.168.0.75)(dst=192.168.0.48)(srv=GGC1_SJ.sub02090543360.vcnsj.oraclevcn.com)(act=Reject) (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on)) ) ) ) VALID_NODE_CHECKING_REGISTRATION_CMAN = OFF
CMAN 是一个强大的工具。这只是一个示例和简单配置。请查看 Oracle 文档以了解更多配置详细信息,特别是有关安全性的详细信息。
任务 4:启动 Oracle Connection Manager 服务
使用 wallet 连接到源和目标容器数据库,并使用 Oracle Data Guard 命令行界面 (Command-Line Interface,DGMGRL) 创建配置。这与常规 Oracle Data Guard 配置相同。唯一不同的是,我们必须对两个容器数据库执行此操作,因为这两个数据库都是主数据库。
cmctl
CMCTL for Linux: Version 21.0.0.0.0 - Production on 04-SEP-2024 08:59:37
Copyright (c) 1996, 2021, Oracle. All rights reserved.
Welcome to CMCTL, type "help" for information.
CMCTL> admin cman
Current instance cman is not yet started
Connections refer to (DESCRIPTION=(address=(protocol=tcp)(host=192.168.0.199)(port=1999))).
The command completed successfully.
CMCTL:cman> startup
Starting Oracle Connection Manager instance cman. Please wait...
CMAN for Linux: Version 21.0.0.0.0 - Production
Status of the Instance
----------------------
Instance name cman
Version CMAN for Linux: Version 21.0.0.0.0 - Production
Start date 04-SEP-2024 08:59:43
Uptime 0 days 0 hr. 0 min. 9 sec
Num of gateways started 2
Average Load level 0
Log Level SUPPORT
Trace Level SUPPORT
Instance Config file /u01/app/oracle/product/cman2130/network/admin/cman.ora
Instance Log directory /u01/app/oracle/diag/netcman/cman/cman/alert
Instance Trace directory /u01/app/oracle/diag/netcman/cman/cman/trace
The command completed successfully.
运行以下命令以检查状态和服务。
CMCTL:cman> show status
CMCTL:cman> show services
任务 5:通过 Oracle Connection Manager 连接到数据库
方法 1:使用目标数据库参数
CMAN 要将传入连接转发到数据库,CMAN 必须知道这些数据库。为此,我们需要在目标数据库上设置 REMOTE_LISTENER
。还要在 cman.ora
文件中设置 VALID_NODE_CHECKING_REGISTRATION_CMAN = OFF
以成功注册。
目标数据库:
alter system set REMOTE_LISTENER='10.0.0.8:1999' scope=both sid='*';
alter system register;
在 cman.ora
文件中添加以下行。
VALID_NODE_CHECKING_REGISTRATION_CMAN = OFF
运行以下命令以重新启动 CMAN 并检查数据库是否已注册到 CMAN 监听程序。
CMCTL:cman> show services
验证连接:
使用 CMAN IP 和端口从客户机 VM 连接到数据库。在客户机 VM 上的 tnsnames.ora
文件中创建一个新的 TNS 别名。
GGC1_CM=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcp)
(HOST=192.168.0.199)(PORT=1999)) -- CMAN IP and Port
(CONNECT_DATA=
(SERVICE_NAME=GGC1_SJ.sub0209xxxx0543360.vcnsj.oraclevcn.com)))
上述服务名称应在 CMAN> show services
输出中可见。
$sqlplus system/MyPasswd__48@GGC1_CM
检查 CMAN 跟踪文件。
/home/oracle/base/diag/netcman/cman/cman/trace/cman.log
/u01/app/oracle/diag/netcman/cman/cman_test/trace/ log.xml
方法 2:使用跃点
如果无法在目标数据库中更改 REMOTE_LISTENER
数据库参数,则需要在 cman.ora
文件或客户机 TNS 文件中使用跃点。
选项 1:在 cman.ora
文件中添加跃点
$cat cman.ora
cman =
(configuration=
(address=(protocol=tcp)(host=192.168.0.199)(port=1999))
(parameter_list =
(aso_authentication_filter=off)
……
(service_affinity=off)
)
(next_hop=(description=(address=(protocol=tcp)(port=1521)(host=192.168.0.48))))
(rule_list=
(rule=
(src=cman)(dst=127.0.0.1)(srv=cmon)(act=accept)
(action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on))
)
)
)
选项 2:在客户端的 TNS 文件中添加跃点
GGC1_SJ_CM =
(DESCRIPTION =
(SOURCE_ROUTE = YES)
(ADDRESS =
(PROTOCOL = TCP)(HOST = 192.168.0.199)(PORT = 1999)
)
(ADDRESS =
(PROTOCOL = TCP)(HOST = 192.168.0.48)(PORT = 1521)
)
(CONNECT_DATA = (SERVICE_NAME=GGC1_SJ.sub02090543360.vcnsj.oraclevcn.com)
)
)
运行以下命令以验证连接。
$sqlplus system/MyPasswd__48@GGC1_CM
相关链接
确认
- 作者 — Dharmesh Patel(Oracle 北美云服务首席云架构师— NACIE)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Install and Configure Oracle Connection Manager
G16515-01
September 2024