我使用数据库链接连接到另一个数据库并删除了几条记录。后来我运行了一个 Informatica Workflow(ETL 工具),使用直接连接到该数据库的数据库连接将数据加载到该数据库中。
工作流自 2 小时以来没有提交任何记录(它应该只运行 30 分钟左右......)所以我猜这是因为我无法使用数据库链接运行“提交”。ETL 工具日志此时不提供任何错误或调试信息。
有什么想法我可以调试这个..?我运行了另一个 ETL 过程来更新表,然后运行提交。但即使在那之后,第一个进程继续运行而没有提交任何记录。我不是 DBA 专家,所以可能误解了数据库的行为。非常感谢任何建议。谢谢!
由于您使用的是标准的 Oracle 到 Oracle 数据库链接,因此 Oracle 会自动执行两阶段提交。如果您在一个系统上提交(或回滚),则在另一个系统上作为同一事务的一部分所做的任何更改也将提交(或回滚)。
如果在具有行级锁的远程系统上有一个打开的事务,则强烈暗示本地会话也仍然存在。因此,您可能只需要在本地会话中执行一个
commit
(或一个rollback
)操作即可移除锁。如果 ETL 进程真的在等待另一个会话持有的锁,您应该能够查询
gv$session
远程数据库并看到 ETL 应用程序正在运行的会话正在等待行级锁争用。具体来说,您会希望看到一个event
ofenq: TX - row lock contention
ingv$session
。您还希望,如果您查询dba_blockers
您会看到通过数据库链接从本地数据库连接的会话的会话 ID,并且如果您查询dba_waiters
您会看到 ETL 进程的会话被该会话阻塞。