ORA 29260: network error: TNS:connection closed



当我尝试从我的oracle机器使用PL/SQL过程连接sftp位置时,我得到ORA-29260: network error: TNS:connection closed错误。

  • telnet连接没有问题
  • 目标sftp机被添加到ACL
  • 使用ssh传输文件没有问题
  • 可以手动连接sftp位置
DECLARE
l_conn  UTL_TCP.connection;
BEGIN
l_conn := ftp.login('xx.xx.xx.xx', '22', 'myuser', 'mypass');
--  ftp.ascii(p_conn => l_conn);
--  ftp.put(p_conn      => l_conn,
--          p_from_dir  => 'MY_DOCS',
--          p_from_file => 'test_get.txt',
--          p_to_file   => '/app/test_put.txt
dbms_output.put_line('connection done');
ftp.logout(l_conn);
END;

有什么想法吗?

提前感谢。

你的程序永远不会工作。您正在使用端口22,这意味着您正在使用构建在SSH之上的SFTPPLSQL不能从UTL_TCP直接提供API来对抗SSH

然而,它可以使用dbms_schedulerexternal_script来实现

在PL/SQL中使用SFTP,我将执行以下操作:

  • 在数据库服务器和远程SSH服务之间使用对对认证,允许无密码连接。
  • 编写shell脚本执行SFTP命令。
  • 使用调度程序从作业调用shell脚本。

所以,你有一个脚本bash运行sftp,假设你有主机之间的交换密钥,不需要密码。

#!/bin/bash 
cd /directoryfiles
sftp user@host << eof 
mput *.* -- or mget 
eof 

这是mysftp.sh。然后您需要凭证和dbms_scheduler中的工作

BEGIN
DBMS_CREDENTIAL.create_credential(
credential_name => 'my_cred_sftp',
username        => 'myuser',
password        => 'mypassword'
);
END;
/
BEGIN
DBMS_SCHEDULER.create_job(
job_name        => 'MY_RUN_SFTP',
job_type        => 'EXTERNAL_SCRIPT',
job_action      => '/mydirectory/mysftp.sh',
credential_name => 'my_cred_sftp',
enabled         => TRUE , 
auto_drop       => TRUE
);
END;
/

相关内容

最新更新