以下的文章主要是講述在使用Oracle數據庫進行相關的企業開我們所要用到的相關的項目,其中包括OracleSQL調優,還有相關的多數據庫協作的相關內容的描述,以下就是相關內容的具體介紹。
OracleSQL調優
數據庫優化主要是DBA的工作,而且調優分成很多步驟,根據經驗來看,首先需要調整的就是程序員寫的SQL語句,一句不良的SQL,能致使整個Oracle宕機,這並不是誇張的說法,當然也不要根據這個來說明Oracle多麼脆弱,首先應該看的是OracleSQL如何優化。
其實在開發環境或測試環境下,有時很難發現真正的性能問題,因為開發環境的數據量可能比生產環境的實際數據量要小很多,即便出現很多的FTS,效率也是可以接受的,這種工作方式,就給調優帶來了一定的難度,所以一般都是上線後,由生產系統反饋出了問題,然後程序員再想辦法模擬生產環境,從而使問題重現,進而將之解決。
對於比較好的測試方案中一般包括壓力測試,其中也包括大數據量測試,可以自己模擬一些大的數據量,然後進行測試,這是比較好的方式。對於調優的方式,首先是使用SQL的執行計劃來查看是否使用了正確的索引,如上已經討論過,如果確認索引有問題。
請新建索引從而解決問題,如果已經建立了索引,但是發現索引沒有用上,那麼可能是表分析不到位,需要重新進行表分析,可以申請DBA進行協助。如果以上兩者都做了,還是不能正確利用索引,那麼就需要使用hint功能,強制使用索引,此功能比較復雜,不再多說,在實際工作中,可向DBA咨詢。
有時SQL是存在於整個系統中的,很難單獨提取出來,這時有幾個辦法:
1.在程序中加斷點,當程序運行到SQL處,先把OracleSQL取出來,自己去分析
2.在程序中加輸出,把SQL直接輸出到外部文件,然後再慢慢分析
3.向DBA申請,打開Oracle的Trace功能,記錄所有的SQL語句。不過這種方式會使整個系統的效率降低不少,使用之後,一定記得把參數調整回去。程序員所能涉及到的就是SQL調優,其它更深入的系統調優,可以不做過多的考慮。
多數據庫協作
這裡所說的數據庫,實際上指的是Oracle中常說的“實例”,這些實例可以位於同一台機器上,也可以位於不同的機器上。有時“多數據庫”還可以指在同一個實例中不同的用戶中,如果所有的內容均在一個實例中進行,只是分屬於不同的用戶,這種處理方式最簡單,只需要在引用的表名前加上其它用戶的名字即可,比如 user1想使用user2中的表,可以寫成:
- select * from user2.table_name
如果覺得在應用程序中每次都要帶著其它的用戶名不方便或有其它原因,可以有兩種方式來替換:
1.視圖
- Create or replace vIEw table_name as select * from user2.table_name;
這種方式,直接在user1中引用視圖,就可以實現對user2中表的引用
2.同義詞
- Create synonym table_name for user2.table_name;
這種方式相對於視圖來說更加專業,一般都是按這種方式來處理,在user1中使用table_name的時候,自動根據同義詞定義轉到相應的位置。
與視圖的另一個區別是,同義詞可以對任何的object進行映射,而不僅局限於表,比如package等。所以應該多用這種方式來替代視圖的方式。
如果多數據庫不在同一個實例中,則需要使用DBLINK進行連接,可以參考create database link的寫法,在一般的應用中,很少用到這種方式。
以上的使用有一個默認前提就是user2允許user1來使用它的資源,如果沒有權限,user1是不能操作user2的表的,這時就涉及到一個賦權的操作,賦權必須由user2親自來處理,其它具有DBA角色的用戶也不可以代勞。
賦權使用如下語句:
- grant select on table_name to user1;
有一點需要特別注意,如果user1具有DBA角色,在沒有顯示賦權的情況下,他也可以直接使用user2中的表,但是如果在user1中寫存儲過程,在函數中引用user2中的表,必須顯示的賦權,這點是非常容易引起混淆的地方,需要提醒特別注意。