rakeを使用したdb:schema:dumpを使用したレガシーOracleデータベースのスキーマダンプ
-
05-07-2019 - |
質問
レガシーOracleデータベーススキーマのインポートに使用される特定のDSL実装を誰もが知っていますか。新しいrubyアプリに移植したい既存のdbでdb:schema:dumpを実行しようとしました。ただし、レーキはエラーが発生することなくほぼ途中で停止します。それはちょっとロックアップします。私はこれに取り組む最良の方法を探し始め、SQLServerのいくつかのものをオーバーライドする方法の例を見つけましたが、Oracleにはあまりありません。
基本的に、スキーマを取得し、そこからスキャフォールドとモデルを生成します。
これを行う簡単な方法はありますか、それとも車輪を発明する必要がありますか?
解決
rake --trace
を試しましたか?
ところで、Oracleレガシースキーマは小さな家内工業です。
http://github.com/rsim/legacy_oracle_sample.git/README.txt
http:// blog.rayapps.com/2008/06/28/activerecord-oracle-enhanced-adapter-version-111-released/
http://www.oracle.com/technology/pub /articles/saternos-rails.html
http://redsquirrel.com/cgi -bin / dave / dynamic / rails.multiple.oracle.dbs.html
他のヒント
最初の質問-元のActiveRecord Oracleアダプターまたはoracle_enhancedアダプターを使用していますか( http://github.com / rsim / oracle-enhanced )?スキーマダンプのパフォーマンスを改善したため、oracle_enhancedアダプターを使用することをお勧めします。
Railsは、スキーマダンプに2つの方法を提供します。
rake db:schema:dump
これにより、スキーマ作成用のRails移行でschema.rbファイルが作成されます。 Oracleの場合、ユーザーローカルスキーマ(database.ymlでユーザーが指定されている)ですべてのテーブルを検索し、Oracleデータ型をRailsモデルの属性型に変換しようとします。 Railsでサポートされていないデータ型がある場合、それらを失う可能性があります。しかし、Railsの方法でアプリケーションをリエンジニアリングしたい場合は、これが好ましいアプローチです。前述したように、Oracleデータの大規模なオプション(すべてのスキーマに数千のテーブルがある場合)の場合、スキーマダンプ用のoracle_enhancedアダプターのパフォーマンスを改善しました。
rake db:structure:dump
これにより、他のOracleデータベースで実行できるSQLスキーマファイル(db / development_structure.sqlなど)が作成されます(他のデータベースでは機能しません)。これは、スキーマダンプを作成するより高速な方法である可能性があり、Oracle固有のデータ型が失われることはありません。ただし、この方法では、後でこのデータベースでActiveRecordを使用するときに問題が発生し、一部のデータ型が正しく処理されないことがわかります。したがって、生のSQLではなく、スキーマを維持するためにRails移行を使用することをお勧めします。
ただし、既存のOracleデータベースでRailsを使用する場合は、このスキーマを再作成する必要はありません-database.ymlをこの既存のデータベーススキーマにポイントして、既存のテーブルの上にActiveRecordモデルの作成を開始できます。 http://blog.rayappsを参照してください。 .com / 2008/09/26 / openworld-unconference-presentation-about-rails-on-oracle / レガシーOracleデータベースでRailsを使用する方法のヒントについては
更新:&quot ;,:require =>を使用した場合にのみ失敗しますfalse"。このパラメーターを削除し、期待どおりに動作します。
これは本当に機能するはずですか?
~/Projects/test (master) $ rake db:structure:dump
(in /Users/plentz/Projects/test)
rake aborted!
Task not supported by 'oracle_enhanced'
(See full trace by running task with --trace)
宝石ファイル
gem 'activerecord-oracle_enhanced-adapter', :require => false
Using activerecord-oracle_enhanced-adapter (1.3.2)