巧用Ruby配備Oracle數(shù)據(jù)庫_第1頁
巧用Ruby配備Oracle數(shù)據(jù)庫_第2頁
巧用Ruby配備Oracle數(shù)據(jù)庫_第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、巧用Ruby配備Oracle數(shù)據(jù)庫在使用Java時,有兩種針對 Oracle的常見驅(qū)動程序:純Java (又叫做瘦)驅(qū)動程序和原生 OCI驅(qū)動程序。在寫作這篇文章的時候, 還沒有和基于 JDBC的Java瘦驅(qū)動程 序類似的純 Ruby驅(qū)動程序。要連接到 Oracle,用戶必須安裝 Ruby/Oracle調(diào)用接口 (OCI8)庫一一個基于Ruby/DBI (數(shù)據(jù)庫接口模塊)的數(shù)據(jù)庫驅(qū)動程序。RubyDBI提供了一個與數(shù)據(jù)庫無關(guān)的、類似于JDBC或ODBC的接口,來實現(xiàn)Ruby和數(shù)據(jù)庫之間的交互。Ruby OCI8驅(qū)動程序通過標準的 Oracle客戶端軟件連接到 Oracle 8到10的所有版本。

2、OCI8是一個 Ruby 包裝器,用本地 C代碼編寫,實際的交互就由它來完成。非 wi ndows 開發(fā)人員可以通過輸入sudo gem in stall ruby-oci8 來進行安裝。 Win dows開發(fā)人員可以先從上下該載驅(qū)動程序的二進制版本,然后手動安裝:可以通過下面的命令行Ruby程序查詢一個包含演示(HR)模式的數(shù)據(jù)庫,簡單檢測您所下載的 Ruby OCI8驅(qū)動程序。替換下面命令中Oracle數(shù)據(jù)庫的名稱和口令:FI_MGR | Finance Manager | 8200 | 16000HR_REP | Human Resources Representative | 4000

3、 | 9000IT_PROG | Programmer | 4000 | 10000MK_MAN | Marketing Manager | 9000 | 15000MK_REP | Marketing Representative | 4000 | 9000PR_REP | Public Relations Representative | 4500 | 10500PU_CLERK | Purchasing Clerk | 2500 | 5500PU_MAN | Purchasing Manager | 8000 | 15000SA_MAN | Sales Manager | 10000 |

4、 20000SA_REP | Sales Representative | 6000 | 12000SH_CLERK | Shipping Clerk | 2500 | 5500ST_CLERK | Stock Clerk | 2000 | 5000ST_MAN | Stock Manager | 5500 | 8500Rails配置Rails用于連接到數(shù)據(jù)庫的參數(shù)存放在您的Rails應(yīng)用程序目錄中的config/database.yml中。下面的例子引用了主機 xe,它對應(yīng)tnsnames.ora中的一項。使用 了三種模式,分別用不同的用戶名指定。development:lIadapter:

5、ocihost:xeYusername:developmentpassword : passwordtest :adapter:ocihostxeusername:test password : password production: adapter:oci host:xe username:production password : password也可以將 Oracle Easy Connect Naming和Ruby OCI8驅(qū)動程序結(jié)合使用。用一個Oracle Easy連接字符串替換主機字段中的SID,如下所示:password傳遞身份驗證(Pass-Through Authe nt

6、icati on)目前還沒有一個從Rails應(yīng)用程序到 Oracle的所謂的傳遞身份驗證(一個終端用戶使用他或她的 Oracle證書來驗證身份。驗證通過后,對該應(yīng)用程序的使用則受Oracle定義的訪問權(quán)限和限制范圍的控制)的標準方法。與Rails相關(guān)的涉及傳遞身份驗證的自定義解決方案在理論上是可行的,但也存在各種各樣的應(yīng)用和性能問題。比如,從理論上來講,我們總可以使用已登錄用戶的證書創(chuàng)建一個到數(shù)據(jù)庫的新連接。這可以通過在控制器的before_filter方法中建立一個連接(使用該用戶的證書)完成。相應(yīng)的,取消連接需要在after_filter方法中手動完成。與其他問題相比,這種方法的速度非常慢

7、,因為需要為每一個請求建立一個連接。難得就不可簡單地將Oracle連接緩存在一個用戶會話中嗎?很遺憾,不能;因為Rails應(yīng)用程序沒有像 JEE應(yīng)用程序那樣可以在請求間保持活動狀態(tài)的內(nèi)存會話存儲。所有會話 內(nèi)容與文件系統(tǒng)的序列化和存儲、數(shù)據(jù)庫或分布式緩存相關(guān)。假定已經(jīng)找到在現(xiàn)有連接上驗證指定用戶身份的難點,那么傳遞身份驗證與ActiveRecord的結(jié)合可能會提供某些價值。比如,行級安全性對于一個在數(shù)據(jù)庫級指定的用戶來說可以透明的指定該用戶可見的對 象,而無需任何實現(xiàn)代碼。此外,ActiveRecord的屬性動態(tài)生成特性也是一大亮點,因為它可以將列級安全性透明的反射到對象模型中。因為屬性是動態(tài)

8、讀取的,所以該模型實例只包含與已登錄用戶可見的列相匹配的屬性。不過要記住,雖然由于性能原因在生產(chǎn)模式下緩存屬性信息,但是另一個優(yōu)化使傳遞身份驗證變成了一個性能問題。對于通過授權(quán)實現(xiàn)的表級安全性,您可以假定一旦SQL由于權(quán)限問題運行失敗,Oracle會從驅(qū)動程序引發(fā)異常。您可以捕捉這些異常并進行妥善處理,但是如果當作出一 次嘗試時一個指定的操作是有效的,這種方法存在的問題就不會出現(xiàn)。比如,如果您想根據(jù)用戶的插入權(quán)限在一張表上禁用一個“ create按鈕,那么在執(zhí)行插入操作之前您無法獲知他的權(quán)限??赡艿淖兺ǚ椒ň褪窃谑状谓⒃撨B接的時候,將該用戶的所有授權(quán)和權(quán)限信息加載到會話中。然后,可以使用這些

9、授權(quán)和權(quán)限信息在視圖中提供安全特性(根據(jù)權(quán)限隱藏/禁用按鈕),或向模型添加安全性(在執(zhí)行這項操作之前先用before_save和before_update等回調(diào)方法進行權(quán)限檢查)。當然,這都是理論上的分析,而讀取權(quán)限信息時可能遇到的困難也是未知的,尤其是在通過存儲過程實現(xiàn)時。使用多個數(shù)據(jù)庫建立一個可以和多個數(shù)據(jù)庫交互的Rails應(yīng)用程序一點都不復(fù)雜。您只要在database.yml文件中指定額外的數(shù)據(jù)庫連接參數(shù)。比如,假設(shè)您需要訪問另一個Oracle數(shù)據(jù)庫來讀取庫存數(shù)據(jù):然后,定義一個模型(名為Inventory )來讀取庫存數(shù)據(jù):class Forum < ActiveRecord:B

10、aseself.connection = "inventory"endRails應(yīng)用程序部署為獨立的服務(wù)器進程池,并且對于每個rails請求均按進程維護和重用一個數(shù)據(jù)庫連接。我們通常分別使用ActiveRecord:Base.establish_connection和ActiveRecord:Base.connection來建立和檢索連接。所有繼承ActiveRecord:Base的類都將使用這個連接。您也可以為某些特定的模型建立一個為某個類所特有的連接(如前面所示),然后這個類和它所有的子類將會轉(zhuǎn)而使用這個顯示指定的連接。ActiveRecord在ActiveRecord

11、:Base中將一個連接池作為按模型類名索引的散列。當 請求連接時,retrieve_connection方法會向上遍歷類層次結(jié)構(gòu),直到在連接池中找到一個連 接。優(yōu)化Rails現(xiàn)在還不支持在SQL查詢中將變量和Oracle綁定,這對性能造成了一些負面影響。Rails (1.2)的當前版本將Oracle連接選項 cursor_sharing設(shè)置為 similar,這通過在數(shù)據(jù)庫級自動將文字轉(zhuǎn)換為綁定變量,顯著改善了性能。此外,它還將預(yù)取行數(shù)設(shè)置為100。但無論是游標共享還是預(yù)取行數(shù)設(shè)置都不是理想的解決方案。雖然這兩個方案都有可能給服務(wù)器帶來額外的負擔,但是大多數(shù)開發(fā)人員只片面報告他們連接Oracle的Rails應(yīng)用程序在性能方面的顯著改進,這使我們誤以為這兩個方案在大多數(shù)情況下都有效。但您的體會可能與此不同。如果您需要額外的性能優(yōu)化,Ruby OCI驅(qū)動程序可以利用多種其他屬性來調(diào)整數(shù)據(jù)庫連接,只是 Rails沒有提供一個設(shè)置這些屬性的標準方法。要了解更多

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論