SQL*Loader 程序调用被卡住的原因可能是 等待 library cache lock。当其他进程已经锁定了要加载的表时,sqlldr 无法获得该表上的 lock,从而导致等待。这种情况属于 shared pool 里的争用。为了解决这个问题,您可以尝试以下方法:
减少并发加载:
确保在同一时间只有一个进程在使用 SQL*Loader 加载数据,以减少 lock 的争用。
优化 SQL 语句:
检查加载的 SQL 语句,确保没有不必要的锁。例如,避免使用长时间锁定资源的查询。
增加 shared pool 大小:
如果系统资源有限,可以考虑增加 shared pool 的大小,以减少 lock 的争用。
监控和分析:
使用 Oracle 提供的监控工具(如 Enterprise Manager)来监控数据库性能,找出导致 lock 争用的原因,并进行相应的优化。