質問

Informix SE データベースからいくつかのテーブルを取得し、Oracle 10g でテーブルを切り詰めて、Informix データを移入する必要があります。

一括インポートは機能しますか?データ型が衝突することはありますか?

毎日スケジュールできる単純な Java 実行可能ファイルを使用したいと考えています。Java プログラムは一括インポートを呼び出すことができますか?提供できる例はありますか?ありがとう。

役に立ちましたか?

解決

シナリオが面白い!

懸念すべき問題がいくつかあります。

  • Oracle の一括インポートでは、データはどのような形式になると想定されますか?
  • DATE 値と DATETIME 値の正しい形式は何ですか?

実際的には (Oracle ではなく Informix での経験に基づいて)、バルク ロードの前にテーブルを切り捨てるのではなく、新しく作成したテーブルにデータをバルク ロードし (比較的時間のかかるプロセス)、古いテーブルを新しい。何が最も速く機能するかに応じて、次のような一連の操作を実行します。

  • 古いテーブルの名前をジャンクテーブルに変更します
  • 新しいテーブルの名前を古いテーブルに変更します

続いて一連の「ジャンク テーブルの削除」操作を実行するか、私なら次のようにします。

  • 古いテーブルを削除
  • 新しいテーブルの名前を古いテーブルに変更します

この方法で操作を実行すると、「テーブルの切り捨て」に続いて「テーブルのロード」を行う場合と比較して、テーブルの「ダウンタイム」が最小限に抑えられます。

Oracle は SE に似ています。その DDL ステートメントは非トランザクションです (テーブルを削除し、新しいテーブルを作成し、一連の操作全体をロールバックするトランザクションが可能な IDS とは異なります)。

データをエクスポートするにはどうすればよいですか?

これは、Oracle ローダーの柔軟性に応じて異なります。Informix の標準出力形式 (UNLOAD 形式など) に適応できる場合、アンロード操作は簡単です。日付値が Oracle によって認識されるようにするには、DBDATE 環境変数を設定する必要がある場合があります。私はそれを信じることができました』DBDATE="Y4MD-"』は受け入れられる可能性が高い。これは、2 を表す SQL 標準の 2009-12-02 表記です。nd 2009 年 12 月。

デフォルトの 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 (文字列) 自体に引用符が含まれていると堅牢ではないことです (改行は受信側でも問題を引き起こす可能性があります)。これが許容できるかどうかを評価する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top