使用db:schema使用rake转储旧版oracle数据库上的模式转储

时间:2008-10-30 15:14:20

标签: ruby-on-rails ruby oracle schema migration

有没有人知道用于导入旧版Oracle数据库模式的任何特定DSL实现。我试图在我的现有数据库上运行db:schema:dump我想要移植到新的ruby应用程序。然而,耙子在中途消失,没有任何错误。它只是锁定。我开始寻找解决这个问题的最佳方法,并找到了如何为SQLServer覆盖一些内容的示例,但对Oracle来说并不多。

我基本上想要引入模式并从中生成一个脚手架和模型。

有更简单的方法可以做到这一点还是我必须发明轮子?

3 个答案:

答案 0 :(得分:9)

第一个问题 - 您使用的是原始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模型。有关如何将Rails与旧版Oracle数据库一起使用的一些提示,请参阅http://blog.rayapps.com/2008/09/26/openworld-unconference-presentation-about-rails-on-oracle/

答案 1 :(得分:2)

答案 2 :(得分:1)

更新:只有在使用“,: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)