2020年9月15日 星期二

5.2 資料庫實體結構

Oracle 資料庫主要是由實體結構的檔案所組成,包含 Control File 、 Data File 、 Temp File 、 Redo Log / Archive Log 、 Parameter File , 以及 Password File,其中 Parameter File 已於 4.5 章節詳述過,其餘檔案的功能分述如下:


Control File: 為 Oracle 資料庫最核心的檔案,紀錄著此資料庫的重要資訊,包括資料庫名稱 、 SCN Number 、 Data File 與 Redo Log 存放位置,以及備份資訊…等,若資料庫缺少了 Control File ,那麼就無法開啟。由於 Control File 如此重要,一般都建議建立兩個 Control File 並將它們存放在不同的磁碟上互為備份,資料庫要使用幾個 Control File 由參數 control_files 所決定,值得注意的是,如果使用多個 Control File ,則這些 Control File 的內容以及時間點必須都要一致才行。我們可以從參數檔或是 v$controlfile 裡面來得知目前資料庫的 Control File 的訊息。


Data File: 為 Tablesapce 的實體架構,是所有資料庫物件存放的實體位置,可以由 v$datafile 或是 dba_data_files 來查詢 Data File 的資訊,建議使用 dba_data_files ,因為它可以揭露 Data File 與 Tablespace 之間的關聯。


Temp File: 為 Temporary Tablespace 所使用,主要是用來存放 Temporary Table 或是 SQL 執行時的排序所用,可以由 v$tempfile 或是 dba_temp_files 來得知目前 temp file 資訊。


Redo Log / Archive Log: Redo Log 為資料庫的交易日誌檔,資料庫所產生的交易紀錄都會透過 Log Writer(LGWR) 寫入 Redo Log。

每一個 Redo Log Group 底下可以建立一個或多個 Redo Log File ,而且 Redo Log Group 是不斷循環來使用,例如現在有 3 個 Redo Log Group ,第一個 Group 寫滿後切到第二個 Group 繼續寫,第二個寫滿後換寫第三個 Group ,而第三個 Group 寫滿後又會把第一個 Group 資料清除然後從第一個 Group 開始寫資料,由於 Redo Log Group 是循環使用,當一個 Group 被重複使用時,之前存放在此 Group 的交易紀錄就會被刪除,為了保留這些交易紀錄,在這個 Group 被覆寫之前,必須先把這些紀錄複製一份出來保存,這些被複製出來的交易紀錄就是 Archive Log 。 Archive Log 存放的位置由參數 log_archive_dest_n 所決定,n 表示從 1 至 31 的數字,表示Archive Log 可以同時存放一個或多個副本,最多可以存放 31 個副本,一般資料庫有開啟 Archive Log Mode 都只有先設定 log_archive_dest_1 而已。至於 Redo Log 的資訊則是由 v$log 以及 v$logfile 來得知:

SQL> select a.thread#,a.group#,b.member,a.bytes/1024/1024 mb,a.status

       from v$log a,v$logfile b

      where a.group#=b.group#;


Password File: 為 sys 使用者作為遠端登入時的認證所使用,由於 sys 為資料庫最高權限使用者,具有 sysdba 權限,因此 Client 端使用具有 sysdba 權限的使用者都必須要透過 Password File 的認證,除此之外,資料庫參數 remote_login_passwordfile 必須設定為 exclusive 或是 shared 才能允許 sys 從遠端登入。 Password File 必須放置在 $ORACLE_HOME/dbs 底下 (Oracle 12c 之後可以存放在 ASM) ,並且檔案格式必須為 orapw<SID> ,如果其中一項條件不符合,那麼就無法進行認證。 Password File 在資料庫建立的同時會自動產生,如果遺失了,可以透過 orapwd 命令來產生,例如產生密碼為 welcome1 的 Password File:

[oracle@db11gr2 dbs]$ orapwd file=orapworcl password=welcome1


透過 v$pwfile_users 可以得知目前資料庫有哪些使用者必須使用 Password File 進行認證:

到了 Oracle 12.2 版本之後更可以使用 v$passwordfile_info 來查詢目前資料庫所使用的 Password File 位置。


資料庫實體架構是資料實際存放的位置, DBA 必須要保護好這些檔案以及定期的備份來確保資料庫能正確的運行。



沒有留言:

張貼留言