1

我在同一个 VPC 中的 AWS 中托管了 2 个数据库实例:

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
"CORE   12.1.0.2.0  Production"
TNS for Linux: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production

我正在使用 DBMS_FILE_TRANSFER 将转储文件从源数据库实例复制到目标数据库实例。

BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object       => 'DATA_PUMP_DIR',
source_file_name              => 'hotels.dmp',
destination_directory_object  => 'DATA_PUMP_DIR',
destination_file_name         => 'hotels_copied.dmp', 
destination_database          => 'to_rds' 
);
END;
/ 

to_rds我之前创建的数据库链接在哪里运行

create database link to_rds connect to OF_HOTEL identified by OFO
using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hotelsdbtestaws.cwob1oxhu1so.eu-central-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))';

但是当我运行脚本时,我得到了这个错误:

Error report -
ORA-12170: TNS:Connect timeout occurred
ORA-06512: at "SYS.DBMS_FILE_TRANSFER", line 60
ORA-06512: at "SYS.DBMS_FILE_TRANSFER", line 168
ORA-06512: at line 2
12170. 00000 -  "TNS:Connect timeout occurred"
*Cause:    The server shut down because connection establishment or
           communication with a client failed to complete within the allotted time
           interval. This may be a result of network or system delays; or this may
           indicate that a malicious client is trying to cause a Denial of Service
           attack on the server.
*Action:   If the error occurred because of a slow network or system,
           reconfigure one or all of the parameters SQLNET.INBOUND_CONNECT_TIMEOUT,
           SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT in sqlnet.ora to larger values.
           If a malicious client is suspected, use the address in sqlnet.log to
           identify the source and restrict access. Note that logged addresses may
           not be reliable as they can be forged (e.g. in TCP/IP).

我试图设置超时:

SQLNET.INBOUND_CONNECT_TIMEOUT=600;
inbound_connect_timeout_listenername=600;

但我有一个错误:

Error starting at line : 12 in command -
SQLNET.INBOUND_CONNECT_TIMEOUT=600
Error report -
Unknown Command


Error starting at line : 13 in command -
inbound_connect_timeout_listenername=0
Error report -
Unknown Command
4

1 回答 1

1

您需要在两个 ORACLE 实例之间配置对端口 1521 SQL * NET 的访问。有两种方法可以检查访问。

1) tnsping db_alias 10
2) telnet IP_Address 1521

如果没有访问权限,则您需要执行亚马逊网站Adjusting Database Links for Use with DB Instances in a VPC 中描述的过程。

要将 Oracle 数据库链接与同一 VPC 或对等 VPC 内的 Amazon RDS 数据库实例一起使用,两个数据库实例之间应具有有效路由。使用您的 VPC 路由表和网络访问控制列表 (ACL) 验证数据库实例之间的有效路由。

每个数据库实例的安全组必须允许进出另一个数据库实例。入站和出站规则可以引用来自同一 VPC 或对等 VPC 的安全组。有关更多信息,请参阅更新您的安全组以引用对等 VPC 安全组。

如果您在 VPC 中使用 DHCP 选项集配置了自定义 DNS 服务器,则您的自定义 DNS 服务器必须能够解析数据库链接目标的名称。有关详细信息,请参阅设置自定义 DNS 服务器。

于 2017-11-12T11:16:32.297 回答