2009-12-03 26 views
0

在我的項目中,我正在使用Oracle Database和SubSonic for DAL。我在SubSonic和Oracle Schema中遇到了一個問題,那就是:在運行時使用SubSonic更改Oracle架構

開發時,我在Oracle數據庫中使用了模式DEV,並使用SubSonic生成DAL。 之後,在發佈給客戶之後,他在Oracle數據庫中使用了新的模式TEST,並在app.config中更改了連接字符串以連接到Oracle。該錯誤將出現,即「表或視圖不存在」。我發現這個錯誤,並且看到表的模式仍然是DEV。 我不希望在更改模式和發佈給客戶後重新生成DAL。請幫幫我。

回答

0

首先,你的模式不應該是DEV。 DEV是一個用戶或角色。 您的模式名稱應該與數據內容相關(例如賬戶或銷售)

其次,考慮您或客戶是否要決定模式名稱。假設你有一個名爲FLINTSTONE的產品。您可以決定模式名稱應該是FLINTSTONE。但是,您的客戶可能需要運行兩個產品實例(例如一個用於本地銷售,另一個用於國際)並使用相同的數據庫。所以他們希望FS_LOCAL和FS_INTER作爲模式名稱。該選項是否是您的產品的一項功能?

接下來,決定您的應用程序是否應作爲架構所有者進行連接。不這樣做有很好的安全原因。例如,架構所有者具有刪除表的權限,這通常是應用程序不能執行的操作,因此,根據最小權限原則,應用程序不應該擁有特權。

通常我會爲模式名稱的應用程序推薦一些配置參數,並在連接到數據庫後,應用程序應該執行「ALTER SESSION SET CURRENT_SCHEMA ='無論它是什麼配置文件'」。應用程序數據庫用戶需要對應用程序模式中的對象具有適當的插入/更新/刪除/選擇/執行權限。如果應用程序不能這樣做,那麼可以在數據庫中擁有一個LOGON觸發器。

0

Gary在您的計算機上不使用DEV作爲模式是正確的。在使用Oracle時,我們通常將模式設置爲客戶端將命名模式的模式。但是這並不能解決你的問題。您需要做的是在Oracle中創建一個全局別名,將DEV映射到CLIENTSCHEMA。您應該仍然在機器上重命名模式,但這會使您的模式與您的客戶不同。