Informix SEデータベースからいくつかのテーブルをプルし、Oracle 10gでテーブルを切り捨ててから、それらにInformixデータを入力する必要があります。
一括インポートは機能しますか?データ型は衝突しますか?
毎日スケジュールできる単純なJava実行可能ファイルを使用したいと思います。Javaプログラムは一括インポートを呼び出すことができますか?あなたが提供できる例はありますか?ありがとう。
Informix SEデータベースからいくつかのテーブルをプルし、Oracle 10gでテーブルを切り捨ててから、それらにInformixデータを入力する必要があります。
一括インポートは機能しますか?データ型は衝突しますか?
毎日スケジュールできる単純なJava実行可能ファイルを使用したいと思います。Javaプログラムは一括インポートを呼び出すことができますか?あなたが提供できる例はありますか?ありがとう。
面白いシナリオ!
心配すべきいくつかの問題があります:
実用的に(そしてOracleではなくInformixの経験に基づいて)、バルクロードの前にテーブルを切り捨てるのではなく、新しく作成されたテーブルにデータをバルクロードし(比較的時間のかかるプロセス)、古いテーブルを新着。最も速く動作するものに応じて、一連の操作を実行します。
一連の「ジャンクテーブルの削除」操作が続きます。または、次のようにします。
この方法で操作を行うと、「テーブルの切り捨て」の後に「テーブルのロード」が続く場合と比較して、テーブルの「ダウンタイム」が最小限に抑えられます。
OracleはSEに似ています-そのDDLステートメントは非トランザクションです(テーブルを削除し、新しいテーブルを作成してから、一連の操作全体をロールバックするトランザクションを持つことができるIDSとは異なります)。
これは、Oracleローダーの柔軟性によって異なります。それらがInformixの標準出力フォーマット(たとえば、UNLOADフォーマット)に適応できる場合、アンロード操作は簡単です。日付値がOracleによって認識されるようにするには、DBDATE環境変数を設定する必要がある場合があります。DBDATE="Y4MD-"
私は' 'が受け入れられる可能性が高いと信じることができました。これは、2009年12月2日のSQL標準2009-12-02表記です。
デフォルトのUNLOAD形式は、「埋め込み改行、バックスラッシュ、およびパイプ記号をエスケープするバックスラッシュ付きのパイプ区切りフィールド」として要約できます。
abc|123|2009-12-02|a\|b\\c\
d||
これは、文字列、数値、日付、および別の文字列('a'、'|'、'b'、'\'、'c'、改行、および'd'を含む)とnullを含む1つのレコードです。分野。末尾の空白は文字列から削除されます。空であるがヌル以外の文字フィールドには、アンロード・ファイルに1つのブランクがあります。
Oracleでそれを簡単に処理できない場合は、Perl + DBI + DBD :: Informix + DBD :: Oracleが使用するツールセットであるかどうかを検討してください。これにより、OracleデータベースとInformix(SE)データベースの両方に接続できます。それらの間でデータを転送します。
または、SEの代替アンローダーを調査する必要があります。Windowsを使用していない限り、調査する価値のあるプログラムの1つはSQLCMDです(公正な警告:作成者の偏見が忍び寄っています)。かなり強力な出力フォーマットオプションのセットがあり、おそらくOracleが許容できるテキストフォーマット(CSVなど)を作成できます。
最後のフォールバックは、選択したデータに対してツールにINSERTステートメントを生成させることです。これはSQLCMDへの追加として役立つと思いますが、まだありません。したがって、次を使用する必要があります。
SELECT 'INSERT INTO Target(Col1, Col2) VALUES (' ||
Col1 || ', ''' || Col2 || ''');'
FROM Source
これにより、単純なINSERTステートメントが生成されます。これに伴う問題は、Col2(文字列)自体に引用符が含まれている場合は堅牢ではないことです(改行によって受信側でも問題が発生する可能性があります)。これが許容できるかどうかを評価する必要があります。