2008-10-30 75 views
3

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

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

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

回答

2
+0

是我没有使用--trace但它仍然死了没有错误 – branchgabriel 2008-10-30 16:07:30

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数据管理(如果您在所有模式中有数千个表)的情况下,我在Oracle_enhanced适配器中为模式转储做了一些性能改进。

rake db:structure:dump 

这将创建一个SQL架构文件(例如DB/development_structure.sql),你可以在其他Oracle数据库执行(这不会对其他数据库的工作)。这可能是创建模式转储的更快方式,并且不会丢失Oracle特定的数据类型。但是用这种方式你可能会在以后使用ActiveRecord时遇到麻烦,然后会注意到某些数据类型没有正确处理。因此,我建议使用Rails迁移来维护模式而不是原始SQL。

但是,如果你想使用Rails的一些现有的Oracle数据库,那么你不需要重新创建该模式 - 你可以只点database.yml,以这个现有的数据库模式,并开始对现有的表的顶部创建的ActiveRecord模型。有关如何在旧版Oracle数据库中使用Rails的一些提示,请参阅http://blog.rayapps.com/2008/09/26/openworld-unconference-presentation-about-rails-on-oracle/

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)