2016-03-25 11 views
0

JDBCを使用しているが、 チャンクを使用してOracleデータベースからデータをリカバリしたいとします。 MySQLと他のデータベースとは対照的に、ORacleは簡単に のクエリから行のサブセットのみを回復することはできません。なにか提案を?JDBCがチャンク内のOracleデータを取得する

Java 8 APIを使用してJDBCをストリームする必要があります。

私はページ分割の実装を使用しようとしています。ただし、ページ区切りは常に結果を結果セットにすべて ダウンロードし、回避する唯一のことはマッピングです。

私は、1'000'000のチャンク内のレコードの200'000'000を取得したいと思います。

+0

あなたが試したことに関するコードを表示してください。 –

+0

「行のサブセットのみを回復する」とはどういう意味ですか?オラクルは特定時点へのバックアップを復元するために、特定の時点のリカバリを絶対にサポートしています。 –

答えて

1

あなたの質問には2つの質問があると思います。 1.(Oracleでは)非常に大きな結果セットを処理する方法。 2.ページングの実行方法(Oracleの場合)。

Oracleはサーバー側のカーソルをサポートしているため、結果セットが非常に大きい場合に結果セットをページする必要はありません。必要なものをすべて選択し、JDBCドライバーのFETサイズを1 000 000に指定するだけで十分です。

あなたが本当にオラクルで改ページを使用する場合(これは他の質問です)

あなたが行数でネストされたSELECT文とページを使用することができます。まず、あなたが望むものを選択します。

select * 
    from (select /*+ FIRST_ROWS(n) */ 
    a.*, ROWNUM rnum 
     from (your_query_goes_here, 
     with order by) a 
     where ROWNUM <= 
     :MAX_ROW_TO_FETCH) 
where rnum >= :MIN_ROW_TO_FETCH; 
+0

私はあなたが示唆するように間隔でoracleクエリーを使用します。たとえば、1000'000のチャンクのエントリの200'000'000をループする場合は非常に遅いです。 – ypriverol

+0

クエリが遅いか、または反復ですか。あなたは差をつける必要があります。それが反復である場合、フェッチサイズが正しく設定されていないか、ネットワークが遅いかのいずれかです。 –

+0

パフォーマンスの問題は、私たちが100'000から1'000'000のインターバルに移行するときにサーバー側にあると思います。次に、パフォーマンスの問題を観察するときに、数分でデータを取得します。 – ypriverol

関連する問題