ORACLE 實例及RAC
一、問題
(1)現象
部署一個sh腳本到生產oracle服務器上,該sh腳本負責讀取外系統提供的txt文件,然后用sql loader入庫,由oracle服務器的crontab定時調用這個sh腳本。腳本在測試庫上測試非常正常,數據能正常入庫,但是,生產上不能,報錯,
錯誤信息為:SQL*Loader-128: unable to begin a session
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
檢查oracle的ORACLE_HOME等參數,發現正常。相同參數部署的其他sh腳本能在生產上正常運行。
(2)分析
測試環境是單數據庫實例環境,生產的oracle,是RAC環境。RAC環境一般包含兩台物理機器,一個存儲。兩個物理機器上每個機器部署一個oracle,同時訪問存儲上的數據庫文件。兩個實例擁有不同的SID。其他sh腳本能正常運行,是因為運行在正確的物理機器上。例如,如果有兩台機器,sid分別為A機器為resdb1,B機器為resdb2。如果腳本里面定義的SID=resdb1,運行腳本的機器為B,就會報錯,運行腳本機器為A,則正常。以上錯誤是因為在錯誤的機器上運行了腳本導致的。
(3)解決
保持兩者一致!根據腳本里面配置的sid,找到對應的機器運行腳本!
二、ORACLE實例和RAC介紹
Oracle實例:實例是指操作系統中一系列的進程和進程所分配的內存塊。通俗的說,實例是訪問數據庫文件的通道。Oracle RAC 就是多個數據庫實例可以同時打開相同的數據庫,進行並發的操作。多實例數據庫是 Oracle高可用架構和高可擴展性架構的核心技術, 多個實例同時打開數據庫進行讀寫,可以避免某個實例故障導致的系統不可用,同時多實例實現負載分擔,也可以減輕某個實例的工作負載,從而提高整體吞吐能力。
RAC是一種充分利用服務器資源的高可用性實現方案,RAC的並行模式實現方式與傳統的雙機熱備實現方式截然不同,如圖:
兩個節點在傳統的雙機熱備環境中,始終有一台機器作為備用機,只有當主節點出現問題的時候才會切換到備用機上;如果主機一直沒有出現問題,那么備用機始終處於空閑狀態,這在資源的利用上以及成本方面都是巨大的浪費。但RAC是一種並行模式的架構,也就是說,兩個節點的集群節點間是一種並行運行的關系,當一台機器出現問題,請求會自動轉發到另一台機器,沒有任何一台機器作為備用機一直不被使用,這樣就充分利用了服務器資源。同時,傳統的雙機熱備構架在出現問題時,常常需要數分鍾的切換時間,而RAC在出現問題時,針對存在的會話只需要數十秒的時間就可以完成失敗切換過程,對新會話的創建不會產生影響,在切換時間上也有比較大的優勢。