【问题标题】:ORA 29260: network error: TNS:connection closedORA 29260: 网络错误: TNS: 连接关闭
【发布时间】:2021-12-10 21:14:38
【问题描述】:

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

  • 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;

有什么想法吗?

提前致谢。

【问题讨论】:

    标签: oracle plsql sftp plsql-package


    【解决方案1】:

    您的程序将永远无法运行。您正在使用端口 22,这意味着您正在使用 SFTP,它是在 SSH 之上构建的。 PLSQL 不直接从UTL_TCP 提供针对SSHAPI

    但是,它可以使用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;
    /
    

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 1970-01-01
      • 2012-02-17
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 2014-07-21
      相关资源
      最近更新 更多