執行 Oracle 資料庫執行個體的一般日誌相關任務 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

執行 Oracle 資料庫執行個體的一般日誌相關任務

您可以在下文中找到如何在執行 Oracle 的 Amazon RDS 資料庫執行個體上執行與記錄日誌相關的一般 DBA 任務。為了提供受管理的服務體驗,Amazon RDS 並不會提供資料庫執行個體的 Shell 存取權,而且會將存取權限制在某些需要進階權限的系統程序和資料表。

如需更多詳細資訊,請參閱 Oracle 資料庫日誌檔案

設定強制記錄

在強制記錄模式中,Oracle 會將所有變更記錄至資料庫,暫存資料表空間和暫存區段中的變更除外 (會忽略 NOLOGGING 子句)。如需詳細資訊,請參閱 Oracle 文件中的指定 FORCE LOGGING 模式

若要設定強制記錄,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.force_loggingforce_logging 程序具有下列參數。

參數名稱 資料類型 預設 描述

p_enable

布林值

true

設定為 true 可將資料庫設為強制記錄模式,設定為 false 則可為資料庫解除強制記錄模式。

下列範例會將資料庫設為強制記錄模式。

EXEC rdsadmin.rdsadmin_util.force_logging(p_enable => true);

設定補充記錄

如果您啟用補充記錄日誌,就會 LogMiner 提供支援鏈結資料列和叢集資料表的必要資訊。如需詳細資訊,請參閱 Oracle 文件中的補充記錄

Oracle 資料庫預設不會啟用補充記錄。若要啟用和停用補充記錄,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.alter_supplemental_logging。如需 Amazon RDS 如何為 Oracle 資料庫執行個體管理已封存重做日誌保留的詳細資訊,請參閱 保留封存的重做日誌

alter_supplemental_logging 程序具有下列參數。

參數名稱 資料類型 預設 必要 描述

p_action

varchar2

'ADD' 可新增補充記錄,'DROP' 可捨棄補充記錄。

p_type

varchar2

null

補充記錄的類型。有效值為 'ALL''FOREIGN KEY''PRIMARY KEY''UNIQUE'PROCEDURAL

下列範例會啟用補充記錄。

begin rdsadmin.rdsadmin_util.alter_supplemental_logging( p_action => 'ADD'); end; /

下列範例會為所有長度固定的最大資料欄啟用補充記錄。

begin rdsadmin.rdsadmin_util.alter_supplemental_logging( p_action => 'ADD', p_type => 'ALL'); end; /

下列範例會為主索引鍵資料欄啟用補充記錄。

begin rdsadmin.rdsadmin_util.alter_supplemental_logging( p_action => 'ADD', p_type => 'PRIMARY KEY'); end; /

切換線上日誌檔案

若要切換日誌檔案,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.switch_logfileswitch_logfile 程序沒有參數。

下列範例會切換日誌檔案。

EXEC rdsadmin.rdsadmin_util.switch_logfile;

新增線上重做日誌

執行 Oracle 的 Amazon RDS 資料庫執行個體會從四個線上重做日誌開始,每個為 128 MB。若要新增額外的重做日誌,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.add_logfile

add_logfile 程序具有下列參數。

注意

參數是互斥的。

參數名稱 資料類型 預設 必要 描述

bytes

正數

null

日誌檔案的大小 (以位元組為單位)。

p_size

varchar2

日誌檔案的大小。您可以用 KB (K)、MB (M) 或 GB (G) 來指定大小。

下列命令會新增 100 MB 的日誌檔案。

EXEC rdsadmin.rdsadmin_util.add_logfile(p_size => '100M');

捨棄線上重做日誌

若要捨棄重做日誌,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.drop_logfiledrop_logfile 程序具有下列參數。

參數名稱 資料類型 預設 必要 描述

grp

正數

日誌的群組編號。

下列範例會捨棄群組編號 3 的日誌。

EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 3);

您只可以捨棄狀態為「未使用」或「非作用中」的日誌。下列範例會取得日誌的狀態。

SELECT GROUP#, STATUS FROM V$LOG; GROUP# STATUS ---------- ---------------- 1 CURRENT 2 INACTIVE 3 INACTIVE 4 UNUSED

調整線上重做日誌的大小

執行 Oracle 的 Amazon RDS 資料庫執行個體會從四個線上重做日誌開始,每個為 128 MB。下列範例顯示如何使用 Amazon RDS 程序來調整您的日誌的大小,從每個 128 MB 到每個 512 MB。

/* Query V$LOG to see the logs. */ /* You start with 4 logs of 128 MB each. */ SELECT GROUP#, BYTES, STATUS FROM V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 1 134217728 INACTIVE 2 134217728 CURRENT 3 134217728 INACTIVE 4 134217728 INACTIVE /* Add four new logs that are each 512 MB */ EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); /* Query V$LOG to see the logs. */ /* Now there are 8 logs. */ SELECT GROUP#, BYTES, STATUS FROM V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 1 134217728 INACTIVE 2 134217728 CURRENT 3 134217728 INACTIVE 4 134217728 INACTIVE 5 536870912 UNUSED 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED /* Drop each inactive log using the group number. */ EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 1); EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 3); EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 4); /* Query V$LOG to see the logs. */ /* Now there are 5 logs. */ select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 2 134217728 CURRENT 5 536870912 UNUSED 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED /* Switch logs so that group 2 is no longer current. */ EXEC rdsadmin.rdsadmin_util.switch_logfile; /* Query V$LOG to see the logs. */ /* Now one of the new logs is current. */ SQL>SELECT GROUP#, BYTES, STATUS FROM V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 2 134217728 ACTIVE 5 536870912 CURRENT 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED /* If the status of log 2 is still "ACTIVE", issue a checkpoint to clear it to "INACTIVE". */ EXEC rdsadmin.rdsadmin_util.checkpoint; /* Query V$LOG to see the logs. */ /* Now the final original log is inactive. */ select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 2 134217728 INACTIVE 5 536870912 CURRENT 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED # Drop the final inactive log. EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 2); /* Query V$LOG to see the logs. */ /* Now there are four 512 MB logs. */ SELECT GROUP#, BYTES, STATUS FROM V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 5 536870912 CURRENT 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED

保留封存的重做日誌

您可以在資料庫執行個體本機上保留已存檔的重做日誌,以便與 Oracle LogMiner (DBMS_LOGMNR) 等產品搭配使用。保留重做日誌之後,就可以用 LogMiner 來分析日誌。如需詳細資訊,請參閱 Oracle 說明文件中的使用 LogMiner 來分析重做日誌檔

若要保留封存的重做日誌,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.set_configurationset_configuration 程序具有下列參數。

參數名稱 資料類型 預設 必要 描述

name

varchar

待更新組態的名稱。

value

varchar

組態值。

下列範例會保留 24 小時內的重做日誌。

begin rdsadmin.rdsadmin_util.set_configuration( name => 'archivelog retention hours', value => '24'); end; / commit;
注意

需要遞交命令,變更才會生效。

若要檢視系統能為資料庫執行個體保留多久的封存重做日誌,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.show_configuration

下列範例會顯示日誌的保留時間。

set serveroutput on EXEC rdsadmin.rdsadmin_util.show_configuration;

輸出會顯示 archivelog retention hours 目前的設定,下列輸出顯示封存的重做日誌會保留 48 小時。

NAME:archivelog retention hours VALUE:48 DESCRIPTION:ArchiveLog expiration specifies the duration in hours before archive/redo log files are automatically deleted.

因為封存的重做日誌會保留在資料庫執行個體上,請確保資料庫執行個體有足夠的配置儲存空間能存放這些保留的日誌。若要判斷資料庫執行個體在過去 X 小時中使用了多少空間,則可執行下列查詢,並以小時數取代 X。

SELECT SUM(BLOCKS * BLOCK_SIZE) bytes FROM V$ARCHIVED_LOG WHERE FIRST_TIME >= SYSDATE-(X/24) AND DEST_ID=1;

RDS for Oracle 只有在資料庫執行個體的備份保留期間大於零時,才會產生封存的重做日誌。依預設,備份保留期間會大於零。

當封存日誌保留期間到期時,RDS for Oracle 會從資料庫執行個體移除封存的重做日誌。為了支援將資料庫執行個體還原到某個時間點,Amazon RDS 會根據備份保留期間在資料庫執行個體之外保留封存的重做日誌。若要修改備份保留期間,請參閱 修改 Amazon RDS 資料庫執行個體

注意

在某些情況下,您可能會在 Linux 上使用 JDBC 來下載封存的重做日誌,而遇到長時間的延遲和連線重設等問題。在這種情況下,上述問題可能是因 Java 用戶端上的預設隨機編號產生器設定所造成,所以建議您使用非封鎖的隨機編號產生器來設定 JDBC 驅動程式。

存取線上和封存的重做日誌

您可能想要存取線上和存檔的重做日誌檔,以便使用外部工具,例如 Attunity GoldenGate、資訊和其他工具進行採礦。若要存取這些檔案,請執行下列動作:

  1. 建立目錄物件,以便提供實體檔案路徑的唯讀存取權。

    使用 rdsadmin.rdsadmin_master_util.create_archivelog_dirrdsadmin.rdsadmin_master_util.create_onlinelog_dir

  2. 讀取使用 PL/SQL 的檔案。

    您可以透過使用 PL/SQL 讀取檔案。如需從目錄物件讀取檔案的詳細資訊,請參閱列出資料庫執行個體目錄中的檔案讀取資料庫執行個體目錄中的檔案

下列版本支援存取交易日誌:

  • Oracle Database 21c

  • Oracle 資料庫 19c

下列程式碼所建立的目錄,可為您提供線上和已封存重做日誌檔案的唯讀存取:

重要

此程式碼也會撤銷 DROP ANY DIRECTORY 權限。

EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir; EXEC rdsadmin.rdsadmin_master_util.create_onlinelog_dir;

下列程式碼會捨棄線上和封存重做日誌檔案的目錄。

EXEC rdsadmin.rdsadmin_master_util.drop_archivelog_dir; EXEC rdsadmin.rdsadmin_master_util.drop_onlinelog_dir;

下列程式碼會授予和撤銷 DROP ANY DIRECTORY 權限。

EXEC rdsadmin.rdsadmin_master_util.revoke_drop_any_directory; EXEC rdsadmin.rdsadmin_master_util.grant_drop_any_directory;

從 Amazon S3 下載封存的重做日誌

您可以使用 rdsadmin.rdsadmin_archive_log_download 套件下載資料庫執行個體上的封存重做日誌。如果封存的重做日誌不在資料庫執行個體上,您可能想要從 Amazon S3 再次下載這些日誌。然後,您可以挖掘日誌或使用它們來恢復或複寫資料庫。

注意

您無法在僅供讀取複本執行個體上下載封存重做日誌。

下載封存的重做日誌:基本步驟

封存重做日誌的可用性取決於下列保留政策:

  • 備份保留政策 — Amazon S3 提供此政策之內的日誌。移除此政策之外的日誌。

  • 封存日誌保留政策 — 您的資料庫執行個體提供此政策之內的日誌。移除此政策之外的日誌。

如果日誌不在您的執行個體上,但受到備份保留期間的保護,請使用 rdsadmin.rdsadmin_archive_log_download 再次下載。RDS for Oracle 會將日誌儲存至資料庫執行個體上的 /rdsdbdata/log/arch 目錄。

從 Amazon S3 下載封存的重做日誌
  1. 設定您的保留期間,以確保您下載的封存重做日誌在您需要保留期間之內。務必 COMMIT 您的變更。

    RDS 會根據封存的日誌保留政策保留您下載的日誌檔,從日誌下載的時間開始。若要了解如何設定保留政策,請參閱 保留封存的重做日誌

  2. 最多等待 5 分鐘,讓封存日誌保留政策變更生效。

  3. 使用 rdsadmin.rdsadmin_archive_log_download 從 Amazon S3 下載封存的重做日誌。

    如需更多詳細資訊,請參閱 下載單一封存重做日誌下載一系列的封存重做日誌

    注意

    RDS 會在下載前自動檢查可用的儲存空間。如果要求的日誌會耗用高百分比的空間,您會收到提醒。

  4. 確認日誌已成功從 Amazon S3 下載。

    您可在 bdump 檔案之中檢視下載任務的狀態。bdump 檔案的路徑名稱是 /rdsdbdata/log/trace/dbtask-task-id.log。在上述的下載步驟中,您執行的 SELECT 陳述式會傳回 VARCHAR2 資料類型的任務 ID。如需更多詳細資訊,請參閱 監控檔案傳輸狀態 中的類似範例。

下載單一封存重做日誌

若要將單一封存重做日誌下載至 /rdsdbdata/log/arch 目錄,請使用 rdsadmin.rdsadmin_archive_log_download.download_log_with_seqnum。此程序具有下列參數。

參數名稱 資料類型 預設 必要 描述

seqnum

數字

封存重做日誌的序號。

下列範例會下載序號為 20 的日誌。

SELECT rdsadmin.rdsadmin_archive_log_download.download_log_with_seqnum(seqnum => 20) AS TASK_ID FROM DUAL;

下載一系列的封存重做日誌

若要將一系列的封存重做日誌下載至 /rdsdbdata/log/arch 目錄,請使用 download_logs_in_seqnum_range。您的下載限制為每個請求 300 個日誌。download_logs_in_seqnum_range 程序具有下列參數。

參數名稱 資料類型 預設 必要 描述

start_seq

數字

系列的起始序號。

end_seq

數字

系列的結束序號。

下列範例會下載序列 50 到 100 的日誌。

SELECT rdsadmin.rdsadmin_archive_log_download.download_logs_in_seqnum_range(start_seq => 50, end_seq => 100) AS TASK_ID FROM DUAL;