使用Oracle資料庫進行企業開發 一

2021-09-22 08:36:57 字數 1553 閱讀 7044

開發人員與dba是兩個不同的角色,在實際工作中,兩個角色可以互相幫助,互通有無,共同做好專案。但是實際上,開發人員需要一定的oracle基礎知識,這樣才可以做出更好更專業的應用程式。

對於oracle系統架構等和開發關係不太大的知識,並不在本文討論範圍之內,本文僅針對部分開發人員需要了解的方面展開討論,並且在某種程度上更偏向於dotnet程式設計師。

一、網路配置

使    用oracle做後台資料庫,前端的應用程式必須通過網路配置才能與伺服器相連,即便資料庫與應用程式在同一臺機器上,也需要做一定的配置,如果客戶端與伺服器不在同一臺機器,那麼客戶端必須安裝oracle客戶端軟體才可以,客戶端的版本與伺服器的版本不一定嚴格一致,比如伺服器是oracle10g,客戶端只要裝乙個oracle9i以上版本就可以了。下面分別做一下說明:

1.應用程式與資料庫在同一臺機器

這種模式相對簡單,因為裝了完整版的oracle後,已經包括了oracle客戶端元件,在預設的情況,連線資料庫只要提供資料庫的使用者名稱和密碼即可,網路相關的東西可以不用理會。這種情況適合於本機只裝了乙個oracle的例項,如果有多個例項的話,會需要配置的更複雜一些,與下面的第二點相同,請參考後面介紹。

2.資料庫伺服器與應用程式脫離

所謂脫離,指的是兩個機器在物理上是隔離的,這種連線,必須靠oci來實現。oci指的是專門用於客戶端與伺服器連線的一種方式,實現它有多種方式,最簡單的辦法就是拿oracle安裝盤,在客戶端機器上裝乙個oracle的客戶端版本即可。但是這種方式部署比較困難,因為oracle的客戶端也比較大,最少在100m以上,安裝的時候需要指定目錄等操作,比較複雜。如果做大面積cs結構部署,會很麻煩。

替代辦法是目前可以找到乙個「精簡版oracle客戶端」,此版本並非oracle官方發布,只有9m左右,安裝完成後,可以實現客戶端與伺服器的連線通道,但是不包括任何的客戶端工具。

能否在自己的應用程式中直接把oracle客戶端打包進去一起發布呢,我想肯定能,但是我不會。

oci是如何實現這個橋梁作用的呢?在伺服器端有乙個***,一直負責監聽外面的請求,這個請求正是客戶端的oci發過來的,***收到請求後,然後真正向資料庫伺服器提出申請,實現整個的連線過程。

一般伺服器端預設情況需要1521埠,因此需要在伺服器及中間的firewall上開啟1521埠,對於unix系列伺服器,這樣做完就可以了,但是對於windows系列伺服器,你會發現,雖然firewall已經放行1521埠,客戶端依然是無法連通,但是把firewall全部開啟又太過危險。這是windows的socket機制造成的乙個特有的現象,原理不再解釋,僅說明一下處理方式:

需要在資料庫伺服器登錄檔的如下路徑:

我的電腦\hkey_local_machine\software\oracle\home0中新增乙個鍵:use_shared_socket,並賦值為true,然後就可以了。記得一點,如果還不行,就把資料庫伺服器重新啟動一下。

針對客戶端,有乙個主要的檔案就是tnsnames.ora,安裝過oracle客戶端後,在安裝目錄可以找到這個檔案,在這裡面記錄著如何連線伺服器,一般安裝客戶端後,系統會自動建立幾個連線,如果需要新建,直接模仿就可以,這是個文字檔案,可以直接編輯,存檔後即生效,不需要重新啟動機器或oracle服務。

使用Oracle資料庫進行企業開發 三

三 sql調優 資料庫優化主要是dba的工作,而且調優分成很多步驟,根據經驗來看,首先需要調整的就是程式設計師寫的sql語句,一句不良的sql,能致使整個oracle宕機,這並不是誇張的說法,當然也不要根據這個來說明oracle多麼脆弱,首先應該看的是sql如何優化。其實在開發環境或測試環境下,有時...

Oracle資料庫使用ODU進行資料恢復時的場景

由於odu命令比較多,特別是關鍵的unload命令比較複雜,本文將簡單介紹幾種場景下使用odu進行資料恢復時,使用的命令序列。場景1.資料庫不能啟動,但是system表空間中的資料字典是完整的。生成資料字典 unload dict 列出使用者 list user 列出使用者下的所有表 list ta...

JMeter對Oracle資料庫進行壓力測試

步驟 1 複製oracle的jdbc驅動jar包檔案 ojdbc14.jar 到jmeter的lib目錄下。2 執行jmeter.bat 3 建立執行緒組 右鍵測試計畫 新增 threads 執行緒組 4 建立jdbc connection configuration 右擊執行緒組 新增 配置原件 ...