文档首页/ 数据复制服务 DRS/ 故障排除/ 失败案例/ Oracle为源实时同步/ 全量或增量阶段失败报错,关键词“Got minus one from a read call”
更新时间:2022-11-10 GMT+08:00

全量或增量阶段失败报错,关键词“Got minus one from a read call”

场景描述

Oracle为源全量或增量同步期间DRS任务报错,同步日志界面提示:service LOGMANAGER failed, cause by: Unable to connect to DBMS: url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=*.*.*.*)(PORT=1521))(CONNECT_DATA=*)) user=*, Caused by: IO Error: Got minus one from a read call.

可能原因

  • 源数据库服务器拒绝了DRS任务IP的访问。
  • 源数据库连接信息发生改变。
  • 源数据库连接数已经达到上限。

解决方案

  1. 修改位于$ORACLE_HOME/network/admin目录的sqlnet.ora文件,允许DRS任务IP访问。

    • 如果使用白名单,则TCP.INVITED_NODES配置项中需要包含DRS的任务IP。
    • 如果使用黑名单,则TCP.EXCLUDED_NODES中不能包含DRS的任务IP。

  2. 查看源数据库信息(例如IP,端口,或者service name/sid)是否发生修改,如果源库信息发生改变,可选择以下操作:

    • 恢复修改的源数据库信息,DRS任务会自动重试继续同步任务。
    • 重新创建任务进行同步。

  3. 执行以下命令查看源数据库连接数,连接数已经达到上限。

    • 查看当前连接数:
      select count(*) from v$process;
    • 查看最大连接数:
      select value from v$parameter where name ='processes';

    如果源数据库连接已达到上限,执行以下命令修改数据库允许的最大连接数:

    alter system set processes = 300 scope = spfile;

    然后重启数据库生效。