дамп схемы в устаревшей базе данных oracle с использованием db: schema: dump с использованием rake - PullRequest
3 голосов
/ 30 октября 2008

Кто-нибудь знает какие-либо конкретные реализации DSL, используемые для импорта устаревших схем баз данных Oracle. Я попытался просто запустить db: schema: dump на моей существующей базе данных, которую я хочу перенести в новое приложение ruby. Однако грабли умирают примерно на полпути без какой-либо ошибки. Это просто запирает. Я начал искать лучший способ решения этой проблемы и нашел примеры того, как переопределить некоторые вещи для SQLServer, но не слишком для Oracle.

Я в основном хочу получить схему и создать из нее каркас и модель.

Есть ли более простой способ сделать это, или мне придется изобретать колесо?

Ответы [ 3 ]

9 голосов
/ 31 октября 2008

Первый вопрос - используете ли вы оригинальный адаптер ActiveRecord Oracle или адаптер oracle_enhanced (http://github.com/rsim/oracle-enhanced)? Я рекомендую использовать адаптер oracle_enhanced, поскольку я сделал там некоторые улучшения производительности для дампа схемы.

Rails предоставляет два пути для дампа схемы:

rake db:schema:dump

Это создаст файл schema.rb с миграциями Rails для создания схемы. В случае Oracle он будет искать все таблицы в локальной локальной схеме пользователя (пользователь указан в database.yml) и попытается преобразовать типы данных Oracle в типы атрибутов модели Rails. Если у вас есть некоторые типы данных, которые не поддерживаются Rails, вы можете их потерять. Но если вы хотите провести реинжиниринг своего приложения в Rails, тогда это предпочтительный подход. Как я уже сказал, я улучшил производительность адаптера oracle_enhanced для дампа схемы в случае больших данных Oracle (если у вас тысячи таблиц во всех схемах).

rake db:structure:dump

Это создаст файл схемы SQL (например, db / development_structure.sql), который вы можете выполнить в другой базе данных Oracle (это не будет работать в других базах данных). Это может быть более быстрый способ создания дампа схемы, и он не потеряет специфические типы данных Oracle. Но таким образом вы можете столкнуться с проблемами позже, когда будете использовать ActiveRecord с этой базой данных, а затем заметите, что некоторые типы данных обрабатываются неправильно. Поэтому я рекомендую использовать миграцию Rails для поддержки схемы, а не необработанного SQL.

Но если вы хотите использовать Rails с некоторой существующей базой данных Oracle, вам не нужно пересоздавать эту схему - вы можете просто указать database.yml на эту существующую схему базы данных и начать создавать модели ActiveRecord поверх существующих таблиц. В http://blog.rayapps.com/2008/09/26/openworld-unconference-presentation-about-rails-on-oracle/ приведены советы по использованию Rails с устаревшими базами данных Oracle.

2 голосов
/ 30 октября 2008
1 голос
/ 15 февраля 2011

обновление: это только сбой, если вы используете ",: 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)

Gemfile

gem 'activerecord-oracle_enhanced-adapter', :require => false

Using activerecord-oracle_enhanced-adapter (1.3.2) 
...