我在同一个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
答案 0 :(得分: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上描述的过程。
要在同一个VPC或对等VPC中使用Oracle RDS数据库实例的Oracle数据库链接,这两个数据库实例之间应该有一个有效的路由。使用VPC路由表和网络访问控制列表(ACL)验证数据库实例之间的有效路由。
每个数据库实例的安全组必须允许进入和 来自其他数据库实例的出口。入站和出站规则都可以 引用来自同一VPC或对等VPC的安全组。更多 信息,请参阅更新安全组以引用对等VPC 安全组。
如果使用DHCP选项集配置了自定义DNS服务器 在您的VPC中,您的自定义DNS服务器必须能够解析名称 数据库链接目标。有关更多信息,请参阅设置a 自定义DNS服务器。