.net 遠端連線Oracle資料庫看起來挺簡單的,但實際做起來還是遇到不少問題。把我今天折騰這個 東西的經驗給大家共用吧。
訪問 oracle 資料庫的方式很多,我用的是 OleDbConnection,這個沒什麼好說的,代碼如下:
1. 串連代碼
_OleDbConnection = new OleDbConnection(connectionString);
_OleDbConnection.Open();
2.連接字串
遠端連線的連接字串可以這樣寫
provider=MSDAORA;host=192.168.1.1;data source=MyTest;user id=system;password=xxx
provider = MSDAORA; 指明oledb 的提供者是oracle資料庫
host 是遠程 oracle 資料庫所在伺服器的IP地址,如果連接埠不是預設的 1521,還要加上一個 Port=xxxx;
data source 是要訪問的 oracle 資料庫的名字
user id 和 password 就不說了。
要能夠成功運行上面代碼,我們必須在代碼啟動並執行機器上安裝 oracle 的用戶端,否則會報
The Oracle(tm) client and networking components were not found 這個錯誤。
3. 主機防火牆設定
我的 Oracle 安裝在 windows 2003 server 上,為了安全起見,必須設定防火牆
我在 windows 2003 下將 1521 連接埠開放,發現無法串連資料庫,抓包看了一下,oracle 用戶端在 串連了 1521 後又去串連了一個隨機的連接埠 1197
查了一下資料,oracle 的 network listener 只起一個中介作用,當客戶串連它時,它根據配置尋 找到相應的資料庫執行個體進程,然後分配一個新的資料庫連接,這個串連連接埠由network listener傳遞給 客戶機,此後客戶機就不再和network listener打交道了,而是和 oracle.exe 這個進程打交道了。這 個新的串連連接埠是不可預知的,因而會被防火牆阻止。
要解決這個問題,網上查到的辦法是採用共用通訊端,這個方法應該是一個比較通用的辦法,如何做 詳見
在windows server 2003系統防火牆上開放Oracle服務連接埠 串連1521 TNS逾時