我設立一個自動的過程從Oracle表sqoop與此命令的HDFS目錄:Sqoop從Oracle:「快照太舊」
sqoop-import --connect jdbc:oracle:thin:@redacted.company.com:1234/db --username redacted --password secret123 --num-mappers 1 --table table --target-dir /data/destination/directory/ --as-avrodatafile --compress --compression-codec org.apache.hadoop.io.compress.BZip2Codec
不幸的是,我收到以下錯誤消息:
Error:java.io.IOException: SQLException in nextKeyValue
...
Caused by: java.sql.SQLException: ORA-01555: snapshot too old: rollback segment number 336 with name "_SYSSMU336_879580159$" too small
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
我試圖實現的業務需求是將整個表導入到hdfs中。由於我們不擁有或管理此數據庫,因此我無法控制UNDO表空間和相關參數。這項工作計劃在凌晨1點運行,這不是一個高峯時間,但由於自動化流程觸及它,我不能鼓勵人們在工作中停止使用它。
我該如何修改我的sqoop-import語句以避免此錯誤?
儘管技術上合理,但我無法進行這些修復:作業已計劃在非高峯時段,並且我沒有擁有該數據庫,也沒有任何管理權限來混淆UNDO表空間和相關參數。我需要聯繫數據庫所有者,看看他們是否可以自己提供出口,或者至少讓我們使用oracle自己的導出工具來獲取數據。 –