2008-10-30 13 views
3

Est-ce que quelqu'un connaît des implémentations DSL spécifiques utilisées pour importer des schémas de base de données Oracle hérités? J'ai essayé de lancer db: schema: dump sur ma base de données existante, je veux utiliser une nouvelle application ruby. Cependant, le râteau meurt à mi-chemin sans aucune erreur. Il se bloque juste un peu. J'ai commencé à chercher le meilleur moyen d'y remédier et j'ai trouvé des exemples de comment remplacer certaines choses pour SQLServer mais pas beaucoup pour Oracle.Décharge de schéma sur la base de données Oracle Oracle à l'aide de db: schema: Dump utilisant Rake

Je veux essentiellement tirer le schéma et générer un échafaudage et un modèle de celui-ci.

Existe-t-il une façon plus simple de le faire ou devrais-je inventer la roue?

Répondre

2
+0

Oui je ne l'utilise --trace mais il est mort toujours sans erreurs – branchgabriel

9

La question des sapins - vous utilisez l'adaptateur ActiveRecord Oracle d'origine ou un adaptateur oracle_enhanced (http://github.com/rsim/oracle-enhanced)? Je recommande d'utiliser l'adaptateur oracle_enhanced comme je l'ai fait quelques améliorations de performance pour le vidage de schéma.

Rails fournit deux façons de vidage de schéma:

rake db:schema:dump 

Cela va créer le fichier schema.rb avec les migrations Rails pour la création de schéma. Dans le cas d'Oracle, il recherchera toutes les tables dans le schéma local de l'utilisateur (l'utilisateur est spécifié dans database.yml) et essaiera de traduire les types de données Oracle en types d'attributs du modèle Rails. Si vous avez des types de données qui ne sont pas supportés par Rails, vous pouvez les perdre. Mais si vous voulez ré-élaborer votre application de façon Rails, c'est l'approche préférée. Comme je l'ai dit, j'ai apporté quelques améliorations de performances dans l'adaptateur oracle_enhanced pour le vidage de schéma dans le cas de disctionnaires de données Oracle volumineux (si vous avez des milliers de tables dans tous les schémas).

rake db:structure:dump 

Cela va créer le fichier de schéma SQL (par exemple db/development_structure.sql) que vous pouvez exécuter dans d'autres bases de données Oracle (cela ne fonctionnera pas sur d'autres bases de données). Cela peut être un moyen plus rapide de créer un vidage de schéma et il ne perdra pas les types de données spécifiques à Oracle. Mais de cette façon, vous risquez d'avoir des problèmes plus tard lorsque vous utiliserez ActiveRecord avec cette base de données, puis remarquerez que certains types de données ne sont pas traités correctement. Par conséquent, je recommande d'utiliser la migration Rails pour maintenir le schéma et non le SQL brut. Mais si vous voulez utiliser Rails avec une base de données Oracle existante, vous n'avez pas besoin de recréer ce schéma - vous pouvez simplement diriger database.yml vers ce schéma de base de données existant et commencer à créer des modèles ActiveRecord au-dessus des tables existantes . Voir http://blog.rayapps.com/2008/09/26/openworld-unconference-presentation-about-rails-on-oracle/ pour quelques conseils sur l'utilisation de Rails avec des bases de données Oracle héritées.

1

mise à jour: cela échoue seulement si vous utilisez ",: require => false". Suppression de ce paramètre, fonctionne comme prévu.

Cela devrait vraiment fonctionner?

~/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)