有谁知道用于导入旧版 Oracle 数据库模式的任何特定 DSL 实现。我试图在我想要移植到新的 ruby 应用程序的现有数据库上运行 db:schema:dump。但是,rake 在中途死亡,没有任何错误。它有点锁定。我开始寻找解决这个问题的最佳方法,并找到了如何为 SQLServer 覆盖一些东西但对 Oracle 来说不多的示例。
我基本上想引入模式并从中生成脚手架和模型。
有没有更简单的方法可以做到这一点,还是我必须发明轮子?
有谁知道用于导入旧版 Oracle 数据库模式的任何特定 DSL 实现。我试图在我想要移植到新的 ruby 应用程序的现有数据库上运行 db:schema:dump。但是,rake 在中途死亡,没有任何错误。它有点锁定。我开始寻找解决这个问题的最佳方法,并找到了如何为 SQLServer 覆盖一些东西但对 Oracle 来说不多的示例。
我基本上想引入模式并从中生成脚手架和模型。
有没有更简单的方法可以做到这一点,还是我必须发明轮子?
第一个问题 - 您使用的是原始 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 数据库一起使用的一些技巧。
你试过了rake --trace
吗?
顺便说一句,Oracle 遗留模式是一个小家庭手工业。
http://github.com/rsim/legacy_oracle_sample.git/README.txt
http://blog.rayapps.com/2008/06/28/activerecord-oracle-enhanced-adapter-version-111-released/
http://www.oracle.com/technology/pub/articles/saternos-rails.html
http://redsquirrel.com/cgi-bin/dave/dynamic/rails.multiple.oracle.dbs.html
更新:仅当您使用“, :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)