2008-10-30 77 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)