rakeを使用したdb:schema:dumpを使用したレガシーOracleデータベースのスキーマダンプ

StackOverflow https://stackoverflow.com/questions/250545

質問

レガシーOracleデータベーススキーマのインポートに使用される特定のDSL実装を誰もが知っていますか。新しいrubyアプリに移植したい既存のdbでdb:schema:dumpを実行しようとしました。ただし、レーキはエラーが発生することなくほぼ途中で停止します。それはちょっとロックアップします。私はこれに取り組む最良の方法を探し始め、SQLServerのいくつかのものをオーバーライドする方法の例を見つけましたが、Oracleにはあまりありません。

基本的に、スキーマを取得し、そこからスキャフォールドとモデルを生成します。

これを行う簡単な方法はありますか、それとも車輪を発明する必要がありますか?

他のヒント

最初の質問-元の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) 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top