25

Oracleデータベースで深刻なパフォーマンスの問題が発生したため、MySQLベースのデータベース(MySQLを直接、またはより好ましくはInfobright)に移行してみたいと考えています。

重要なのは、新しいデータベースのすべての機能がニーズに合っているかどうかを実際に知る前に、新旧のシステムを数か月ではなくても少なくとも数週間オーバーラップさせる必要があるということです。

だから、ここに私たちの状況があります:

Oracleデータベースは、数百万行ごとに複数のテーブルで構成されています。日中は文字通り何千ものステートメントがあり、移行を止めることはできません。

毎朝、新しいデータがOracleデータベースにインポートされ、数千行が置き換えられます。このプロセスのコピーは問題ではないため、理論的には、両方のデータベースに並行してインポートできます。

しかし、ここでの課題は、これが機能するためには、ある日から一貫した状態でOracleデータベースからエクスポートする必要があるということです。(月曜日に一部のテーブルをエクスポートできず、火曜日に他のテーブルをエクスポートできないなど)これは、少なくともエクスポートが1日以内に完了する必要があることを意味します。

最初に考えたのはスキーマをダンプすることでしたが、OracleダンプファイルをMySQLにインポートするためのツールを見つけることができませんでした。CSVファイルでのテーブルのエクスポートは機能する可能性がありますが、時間がかかりすぎる可能性があります。

だから私の質問は今です:

私は何をすべきか?OracleダンプファイルをMySQLにインポートするツールはありますか?このような大規模な移行の経験はありますか?

PS:Oracleのパフォーマンス最適化手法を提案しないでください。すでに多くのことを試しました:-)

編集:以前にいくつかのETLツールを試しましたが、十分に高速ではなかったことがわかりました。1つのテーブルのみをエクスポートするのに4時間以上かかりました...

2番目の編集:皆さん、さあ...データベース全体をできるだけ速くエクスポートし、別のデータベースシステムにインポートできるようにデータを変換しようとした人は誰もいませんでしたか?

4

7 に答える 7

7

Oracleは、すぐに使用できるアンロードユーティリティを提供していません。

環境に関する包括的な情報(Oracleバージョン?サーバープラットフォーム?データ量?データ型?)がないことを覚えておいてください。ここにあるものはすべてYMMVであり、パフォーマンスとタイミングのためにシステムで試してみることをお勧めします。

私のポイント1〜3は、単なる一般的なデータ移動のアイデアです。ポイント4は、ダウンタイムまたは中断を数分または数秒に短縮する方法です。

1)利用可能なサードパーティのユーティリティがあります。私はこれらのいくつかを使用しましたが、あなたが意図した目的のためにそれらを自分でチェックするのに最適です。いくつかのサードパーティ製品がここにリストされています:OraFaq。残念ながら、それらの多くはWindowsで実行されるため、DBサーバーがWindows上にあり、サーバー上で直接ロードユーティリティを実行できない限り、データのアンロードプロセスが遅くなります。

2)LOBのような複雑なデータ型がない場合は、SQLPLUSを使用して独自のデータ型を作成できます。一度にテーブルを作成した場合は、簡単に並列化できます。トピックはおそらくこのサイトで複数回訪問されています。例を次に示します。Linky

3)10g以上の場合、外部テーブルがこのタスクを実行するためのパフォーマンスの高い方法である可能性があります。現在のテーブルと同じ構造の空白の外部テーブルをいくつか作成し、それらにデータをコピーすると、データは外部テーブル形式(テキストファイル)に変換されます。もう一度、OraFAQが救助します。

4)システムを数日/数週間/数か月間並列に保つ必要がある場合は、変更データのキャプチャ/適用ツールを使用して、ダウンタイムをほぼゼロにします。$$$を支払う準備をしてください。Oracle REDOログをマイニングし、MySQLデータベースに挿入/更新ステートメントを提供できるGoldenGateSoftwareのツールを使用しました。稼働開始の1週間前に、ダウンタイムなしでデータの大部分を移行できます。次に、稼働期間中にソースデータベースをシャットダウンし、Golden Gateに最後の残りのトランザクションをキャッチさせてから、新しいターゲットデータベースへのアクセスを開きます。私はこれをアップグレードに使用しましたが、キャッチアップ期間はほんの数分でした。私たちはすでにゴールデンゲートのサイトライセンスを持っていたので、それは私たちにとってポケットから何もありませんでした。

そして、ここでCranky DBAの役割を果たし、Oracleのパフォーマンスを向上させることができない場合は、MySQLが特定の問題をどのように修正したかについての記事を見てみたいと思います。SQLに触れることができないアプリケーションがある場合でも、Oracleを調整する方法はたくさんあります。/ soapbox

于 2010-03-24T21:30:46.087 に答える
5

Oracleダンプ(.dmp)ファイルを読み取り、そのデータテーブルをSQL ServerデータベースにポンプすることができるC#アプリケーションを構築しました。

このアプリケーションは、PeopleSoftデータベースをSQL Serverに移行するために、本番環境で毎晩使用されます。PeopleSoftデータベースには1100以上のデータベーステーブルがあり、Oracleダンプファイルのサイズは4.5GBを超えています。

このアプリケーションは、SQL Serverデータベースとテーブルを作成し、デュアルコアIntelサーバーで実行されているすべての4.5GBのデータを55分未満でロードします。

ADO.NETプロバイダーがあれば、このアプリケーションを変更して他のデータベースで動作するようにするのはそれほど難しいことではないと思います。

于 2013-06-06T14:23:05.830 に答える
3

ええ、Oracleはかなり遅いです。:)

任意の数のETLツールを使用して、データをOracleからMySQLに移動できます。私のお気に入りはSQLServerIntegrationServicesです。

Oracle9i以降を使用している場合は、ChangeDataCaptureを実装できます。詳細はこちらhttp://download-east.oracle.com/docs/cd/B14117_01/server.101/b10736/cdc.htm

次に、ETLテクノロジーを使用して、OracleからMySQLまたはInfobrightへの変更のデルタを取得できます。

于 2010-03-19T18:03:55.847 に答える
1

Pentaho Data Integrationを使用してOracleからMySqlに移行しました(同じデータをPostresqlにも移行しました。これは、使用されているJDBCドライバーが異なることが主な原因であると思われます)。私はここでRolandBoumanの指示に従い、ほ​​とんど手紙のとおりでしたが、それがいかに簡単であるかに非常にうれしく驚きました。

あるDBから別のDBにテーブルデータをコピーする

データの読み込みに適しているかどうかはわかりませんが、一見の価値があります。

于 2010-03-19T20:28:46.990 に答える
1

私は最近、このタスクを実行するためにetlalchemyをリリースしました。これはオープンソースのソリューションであり、 4行のPythonを使用して任意の2つのSQLデータベース間で移行でき、当初はOracleからMySQLに移行するように設計されていました。MySQL、PostgreSQL、Oracle、SQLite、SQLServerのサポートが追加されました。

これにより、スキーマ(おそらく最も困難な)、データ、インデックス、および制約の移行が処理され、さらに多くのオプションが利用可能になります。

インストールするには:

$ pip install etlalchemy

エルキャピタンについてpip install --ignore-installed etlalchemy

走る:

from etlalchemy import ETLAlchemySource, ETLAlchemyTarget

orcl_db_source = ETLAlchemySource("oracle+cx_oracle://username:password@hostname/ORACLE_SID")

mysql_db_target = ETLAlchemyTarget("mysql://username:password@hostname/db_name", drop_database=True)
mysql_db_target.addSource(orcl_db_source)
mysql_db_target.migrate()

パフォーマンスに関しては、このツールはmysqlimportCOPY FROMpostgresql )などのさまざまなRDBMS全体でBULKインポートツールを利用して、移行を効率的に実行します。33,105,951行の5GBSQLServerデータベースを40分でMySQLに移行し、3GB7,000,000行のOracleデータベースを13分でMySQLに移行することができました。

プロジェクトの起源に関するより多くの背景を得るには、この投稿をチェックしてください。ツールの実行中にエラーが発生した場合は、githubリポジトリで問題を開いてください。1週間以内にパッチを適用します。

(「cx_Oracle」Pythonドライバーをインストールするには、次の手順に従ってください

于 2016-08-03T16:48:10.613 に答える
1

同じ問題がありました。oracledbmsからmysqldbmsにテーブルとデータを取得するために必要です。

オンラインで見つけたこのツールを使用しました...うまくいきました。

http://www.sqlines.com/download

このツールは基本的にあなたを助けます:

  1. ソースDBMSに接続する(ORACLE)
  2. 宛先DBMS(MySQL)に接続する
  3. 移行するORACLEDBMSのスキーマとテーブルを指定します
  4. 「転送」ボタンを押して、移行プロセスを実行します(組み込みの移行クエリを実行します)
  5. 転送ログを取得します。これは、宛先データベースでSOURCEおよびWRITTENから読み取られたレコードの数、失敗したクエリの数を示します。

これがこの質問にたどり着く他の人を助けることを願っています。

于 2018-08-29T14:40:46.337 に答える
0

Python、SQL * Plus、およびmysql.exe(MySQLクライアント)スクリプトを使用して、クエリ結果のみのテーブル全体をコピーできます。これらのツールはすべてWindowsとLinuxに存在するため、移植可能です。

私がそれをしなければならなかったとき、私はPythonを使用して次のステップを実装しました:

  1. SQL*Plusを使用してデータをCSVファイルに抽出します。
  2. mysql.exeを使用してダンプファイルをMySQLにロードします。

テーブル/パーティション/サブパーティションを使用して並列ロードを実行することにより、パフォーマンスを向上させることができます。

開示:Oracle-to-MySQL-Data-MigratorOracle and MySQLは、 WindowsOS間のデータ統合のために私が作成したスクリプトです。

于 2016-06-30T22:22:33.237 に答える