3

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

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

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

4

3 回答 3

9

第一个问题 - 您使用的是原始 ActiveRecord Oracle 适配器还是 oracle_enhanced 适配器 ( http://github.com/rsim/oracle-enhanced )?我建议使用 oracle_enhanced 适配器,因为我对模式转储进行了一些性能改进。

Rails 提供了两种模式转储方式:

rake db:schema:dump

这将使用 Rails 迁移创建 schema.rb 文件以创建模式。在 Oracle 情况下,它将搜索用户本地模式中的所有表(用户在 database.yml 中指定),并将尝试将 Oracle 数据类型转换为 Rails 模型属性类型。如果你有一些 Rails 不支持的数据类型,那么你可能会丢失它们。但是,如果您想以 Rails 方式重新设计您的应用程序,那么这是首选方法。正如我所说,我在 oracle_enhanced 适配器中对大型 Oracle 数据字典的模式转储进行了一些性能改进(如果所有模式中都有数千个表)。

rake db:structure:dump

这将创建您可以在其他 Oracle 数据库中执行的 SQL 模式文件(例如 db/development_structure.sql)(这不适用于其他数据库)。这可能是创建模式转储的更快方法,并且不会丢失 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 数据库一起使用的一些技巧。

于 2008-10-31T08:20:07.160 回答
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)

宝石文件

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

Using activerecord-oracle_enhanced-adapter (1.3.2) 
于 2011-02-15T13:03:31.807 回答