Oarcle學習筆記之--- FAQ收集

1、實例和SID的關係是什麼?實例和數據庫是怎樣的關係?

      經常有人問SID 是什麼?在Oracle 系統中SID 是一個經常出現的變量,如環境變量ORACLE_SID, 初始化文件initSID.ora,那究竟什麼是SID 呢?其實SID 就是Oracle 實例的標識,不同的SID 對應不同的內存緩衝(SGA)和不同的後臺進程。這樣一來我們就可以得當在一臺物理的服務器上可以有多個SID 的數據庫實例。

     一個運行着的ORACLE數據庫就可以看成是一個ORACLE SERVER,該SERVER由數據庫(Database)和實例(Instance)組成,在一般的情況下一個ORACLE SERVER包含一個實例和一個與之對應的數據庫,但是在特殊情況下,如8i的OPS,9i的RAC,一個SERVER中一個數據庫可以對應多個實例。

      一系列物理文件(數據文件,控制文件,聯機日誌等)的集合或與之對應的邏輯結構(表空間,段等)被稱爲數據庫,簡單的說,就是一系列與磁盤有關係的物理文件的組成。ORACLE內存結構和後臺進程被成爲數據庫的實例,一個實例最多隻能安裝(Mount)和打開(Open)在一個數據庫上,負責數據庫的相應操作並與用戶交互。

 2、Oracle數據庫和實例的關係是什麼?

      數據庫是由物理文件和存取數據文件的實例組成,當存取數據文件的實例是一個的時候,數據庫被稱做單節點數據庫。這是我們看到的最多的數據庫形式。當然還有一種多節點數據庫,就是一個以上的實例共同訪問一個數據庫(或者說共同訪問一組數據文件), 更好的提供穩定性和並行處理能力。這在8i中被稱爲OPS(Oracle Parallel Server ),在Oracle9i 中被稱爲RAC(real application cluster)。在這種數據庫中。兩個/多個實例分別在不同服務器上,所有Oracle 數據文件在共享的磁盤陣列上,多個服務器上的實例可以同時工作,他們通過一個內部的網絡進行通信。如果一臺服務器不能提供服務的話,另一臺會接管它的工作,特別是在關鍵的業務有很大的潛力。

 3、在運行的數據庫中數據文件中是不是可能存在沒有被提交的數據?

      這是可能存在的,因爲用戶數據文件的數據是由DBWR寫入的,DBWR是一個很底層的後臺進程,不負責與用戶交互。用戶的交互是由LGWR完成的。

4、在問題3中,如果存在沒有寫入的數據,那麼機器突然斷電,數據完整性會不會損壞?

      不會的,因爲數據庫的完整性是LGWR來保證的,而且ORACLE保證了DBWR寫入數據文件的任何修改已經被記錄在重做日誌文件中。當系統再次啓動的時候,通過讀取重做日誌文件就可以知道那些數據沒有被提交。這時候ORACLE 會自動回滾那些數據。所以說聯機日誌的損壞,特別是當前聯機日誌的損壞,對數據庫的影響是巨大的,可能會導致數據庫的不完整。

5、數據文件損壞會丟失數據嗎?

      可以這麼說,如果你有備份和歸檔,就不會。因爲所有對數據修改的記錄都在重做日誌中有記錄,所以不會丟失數據,你只要恢復以前的備份再用歸檔日誌文件恢復和當前的在線重做日誌就可以恢復所有數據。

 6、在線重做日誌損壞會丟失數據嗎?

      在線日誌對數據庫的損壞是極大的,所以不僅可能丟失數據,還可能引起數據庫的不同步。在重做日誌中的所有commit的記錄都會丟失,這也是Oracle 爲什麼要對在線重做日誌文件做鏡像的原因。任何的數據丟失都是不允許的。

 7、我在事務能不能指定不寫回滾段?

      不可以的,寫回滾段是ORACLE保證一致性讀和事務一致性的根本。回滾段是高寫入段,建議把它放到單獨的設備上來。 對於DDL語句,如DROP,TRUNCATE卻可以不寫回滾段(沒有UNDO信息),所以對於整個表的刪除,如果數據量比較大,建議用Truncate Table的方法。 不寫聯機日誌也是不可能的,但可以在某些特定操作中,可以寫很少的聯機日誌,如以NOLOGGING的方式通過Create table tablename as select創建表,或以Append的方式Insert數據到表,或直接載入等操作。

發佈了45 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章