執行 Oracle 資料庫執行處理的雜項任務 - Amazon Relational Database Service

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

執行 Oracle 資料庫執行處理的雜項任務

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

在主要資料儲存空間中建立和捨棄目錄

若要建立目錄,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.create_directory。您可以建立最多 10,000 個目錄,全位於您的主要資料儲存空間。若要建立目錄,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.drop_directory

create_directorydrop_directory 程序具有下列必要參數。

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

p_directory_name

varchar2

目錄名稱。

下列範例會建立名為 PRODUCT_DESCRIPTIONS 的新目錄。

EXEC rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'product_descriptions');

資料字典會以大寫存放目錄名稱。您可以查詢 DBA_DIRECTORIES 來列出目錄。系統會自動選擇實際的主機路徑名稱。下列範例會取得名為 PRODUCT_DESCRIPTIONS 目錄的目錄路徑:

SELECT DIRECTORY_PATH FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME='PRODUCT_DESCRIPTIONS'; DIRECTORY_PATH ---------------------------------------- /rdsdbdata/userdirs/01

資料庫執行個體的主要使用者名稱會具有新目錄中的讀寫權限,並且可將存取權授予其他使用者。EXECUTE 權限不適用於資料庫執行個體上的目錄。目錄會在您的主要資料儲存空間中建立,並且將耗用空間和輸入/輸出頻寬。

下列範例會捨棄名為 PRODUCT_DESCRIPTIONS 的目錄。

EXEC rdsadmin.rdsadmin_util.drop_directory(p_directory_name => 'product_descriptions');
注意

您也可以使用 Oracle SQL 命令 DROP DIRECTORY 捨棄目錄。

捨棄目錄不會移除其內容。這是因為 rdsadmin.rdsadmin_util.create_directory 程序可能會重複使用路徑名稱,而已捨棄目錄中的檔案可能會出現在新建立的目錄中。捨棄目錄之前,我們建議您使用 UTL_FILE.FREMOVE 從目錄中移除檔案。如需更多詳細資訊,請參閱 Oracle 文件中的 FREMOVE 程序

列出資料庫執行個體目錄中的檔案

若要列出目錄中的檔案,請使用 Amazon RDS 程序 rdsadmin.rds_file_util.listdirlistdir 程序具有下列參數。

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

p_directory

varchar2

要列出的目錄名稱。

下列範例授予目錄 PRODUCT_DESCRIPTIONS 的讀/寫權限給使用者 rdsadmin,然後列出此目錄中的檔案。

GRANT READ,WRITE ON DIRECTORY PRODUCT_DESCRIPTIONS TO rdsadmin; SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'PRODUCT_DESCRIPTIONS'));

讀取資料庫執行個體目錄中的檔案

若要讀取文字檔案,請使用 Amazon RDS 程序 rdsadmin.rds_file_util.read_text_fileread_text_file 程序具有下列參數。

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

p_directory

varchar2

包含檔案的目錄名稱。

p_filename

varchar2

要讀取的檔案名稱。

下列範例會在目錄 rice.txt 中建立檔案 PRODUCT_DESCRIPTIONS

declare fh sys.utl_file.file_type; begin fh := utl_file.fopen(location=>'PRODUCT_DESCRIPTIONS', filename=>'rice.txt', open_mode=>'w'); utl_file.put(file=>fh, buffer=>'AnyCompany brown rice, 15 lbs'); utl_file.fclose(file=>fh); end; /

下列範例會從目錄 rice.txt 讀取 PRODUCT_DESCRIPTIONS 檔案。

SELECT * FROM TABLE (rdsadmin.rds_file_util.read_text_file( p_directory => 'PRODUCT_DESCRIPTIONS', p_filename => 'rice.txt'));

存取 Opatch 檔案

Opatch 是可將修補程式套用和復原到 Oracle 軟體的 Oracle 公用程式。針對確定已將哪些修補程式套用至資料庫,Oracle 採用機制是 opatch lsinventory 命令。為針對使用自有授權 (BYOL) 客戶開立服務請求,Oracle 支援會要求 lsinventory 檔案,有時也會要求 Opatch 產生的 lsinventory_detail 檔案。

為了提供受管的服務體驗,Amazon RDS 並不會提供 Opatch 的 Shell 存取權。相反地,BDUMP 目錄中的 lsinventory-dbv.txt 包含與您目前引擎版本相關的修補程式資訊。當您執行次要或主要升級時,Amazon RDS 會在套用修補程式的一小時內更新 lsinventory-dbv.txt 。如要確認套用的修補程式,請參閱 lsinventory-dbv.txt。此動作與執行 opatch lsinventory 命令類似。

注意

本節的範例假設 BDUMP 目錄已命名為 BDUMP。在僅供讀取複本上,BDUMP 目錄名稱不同。若要了解如何透過在僅供讀取複本上查詢 V$DATABASE.DB_UNIQUE_NAME 以取得 BDUMP 名稱,請參閱列出檔案

庫存檔案會使用 Amazon RDS 命名慣例 lsinventory-dbv.txtlsinventory_detail-dbv.txt,其中 dbv 是資料庫版本的完整名稱。lsinventory-dbv.txt 檔案可在所有資料庫版本上使用。可在下列資料庫版本上取得對應的 lsinventory_detail-dbv.txt

  • 19.0.0.0,ru-2020-01.rur-2020-01.r1 或更新版本

  • 12.2.0.1,ru-2020-01.rur-2020-01.r1 或更新版本

  • 12.1.0.2,第 19 版或更新版本

例如,若您的資料庫版本為 19.0.0.0.ru-2021-07.rur-2021-07.r1,則您的庫存檔案具有下列名稱。

lsinventory-19.0.0.0.ru-2021-07.rur-2021-07.r1.txt lsinventory_detail-19.0.0.0.ru-2021-07.rur-2021-07.r1.txt

確保您下載的檔案符合您資料庫引擎的目前版本。

如何使用主控台下載庫存檔案
  1. 前往 https://console.aws.amazon.com/rds/,開啟 Amazon RDS 主控台。

  2. 在導覽窗格中,選擇 Databases (資料庫)。

  3. 選擇您想檢視的日誌檔案所在的資料庫執行個體的名稱。

  4. 選擇 Logs & events (日誌與事件) 標籤。

  5. 向下捲動至 Logs (日誌) 區段。

  6. 日誌區段中,搜尋 lsinventory

  7. 選取您要存取的檔案,然後選擇下載

若要在 SQL 用戶端中讀取 lsinventory-dbv.txt,您可以使用 SELECT 陳述式。針對此技術,請使用下列 rdsadmin 函數:rdsadmin.rds_file_util.read_text_filerdsadmin.tracefile_listing

在下列範例查詢中,將 dbv 取代為您的 Oracle 資料庫版本。例如,您的資料庫版本可能是 19.0.0.0.ru-2020-04.rur-2020-04.r1。

SELECT text FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'lsinventory-dbv.txt'));

若要在 SQL 用戶端中讀取 lsinventory-dbv.txt,您可以寫入 PL/SQL 程式。此程式會使用 utl_file 來讀取檔案,並使用 dbms_output 來列印檔案。這些是 Oracle 提供的套件。

在下列範例程式中,將 dbv 取代為您的 Oracle 資料庫版本。例如,您的資料庫版本可能是 19.0.0.0.ru-2020-04.rur-2020-04.r1。

SET SERVEROUTPUT ON DECLARE v_file SYS.UTL_FILE.FILE_TYPE; v_line VARCHAR2(1000); v_oracle_home_type VARCHAR2(1000); c_directory VARCHAR2(30) := 'BDUMP'; c_output_file VARCHAR2(30) := 'lsinventory-dbv.txt'; BEGIN v_file := SYS.UTL_FILE.FOPEN(c_directory, c_output_file, 'r'); LOOP BEGIN SYS.UTL_FILE.GET_LINE(v_file, v_line,1000); DBMS_OUTPUT.PUT_LINE(v_line); EXCEPTION WHEN no_data_found THEN EXIT; END; END LOOP; END; /

或者,查詢 rdsadmin.tracefile_listing,然後將輸出多工緩衝處理至檔案。下列範例會將輸出多工緩衝處理至 /tmp/tracefile.txt

SPOOL /tmp/tracefile.txt SELECT * FROM rdsadmin.tracefile_listing WHERE FILENAME LIKE 'lsinventory%'; SPOOL OFF;

管理建議程式任務

Oracle 資料庫包含許多建議程式。每個建議程式均支援自動化和手動任務。您可以使用 rdsadmin.rdsadmin_util 套件來管理一些建議程式任務。

下列引擎版本提供建議程式任務程序:

  • Oracle Database 21c (21.0.0)

  • 19.0.0.0.ru-2021-01.rur-2021-01.r1 版及更新的 Oracle Database 19c 版本

    如需詳細資訊,請參閱 Amazon RDS for Oracle 版本備註中的版本 19.0.0.0.ru-2021-01.rur-2021-01.r1

  • 12.2.0.1.ru-2021-01.rur-2021-01.r1 版及更新的 Oracle Database 12c (版本 2) (12.2.0.1) 版本

    如需詳細資訊,請參閱 Amazon RDS for Oracle 版本備註中的版本 12.2.0.1.ru-2021-01.rur-2021-01.r1

設定建議程式任務的參數

若要設定某些建議程式任務的參數,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.advisor_task_set_parameteradvisor_task_set_parameter 程序具有下列參數。

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

p_task_name

varchar2

您要變更其參數的建議程式任務名稱。有效值如下:

  • AUTO_STATS_ADVISOR_TASK

  • INDIVIDUAL_STATS_ADVISOR_TASK

  • SYS_AUTO_SPM_EVOLVE_TASK

  • SYS_AUTO_SQL_TUNING_TASK

p_parameter

varchar2

任務參數的名稱。若要尋找建議程式任務的有效參數,請執行下列查詢。用 p_task_name 有效值替代 p_task_name

COL PARAMETER_NAME FORMAT a30 COL PARAMETER_VALUE FORMAT a30 SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_ADVISOR_PARAMETERS WHERE TASK_NAME='p_task_name' AND PARAMETER_VALUE != 'UNUSED' ORDER BY PARAMETER_NAME;

p_value

varchar2

任務參數的值。若要尋找任務參數的有效值,請執行下列查詢。用 p_task_name 有效值替代 p_task_name

COL PARAMETER_NAME FORMAT a30 COL PARAMETER_VALUE FORMAT a30 SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_ADVISOR_PARAMETERS WHERE TASK_NAME='p_task_name' AND PARAMETER_VALUE != 'UNUSED' ORDER BY PARAMETER_NAME;

對於 ACCEPT_PLANS,下列 PL/SQL 程式將 FALSE 設定為 SYS_AUTO_SPM_EVOLVE_TASK。SQL 計劃管理自動化任務會驗證計劃,並產生其問題清單的報告,但不會自動演進計劃。您可以使用報告來識別新的 SQL 計劃基準並手動接受它們。

BEGIN rdsadmin.rdsadmin_util.advisor_task_set_parameter( p_task_name => 'SYS_AUTO_SPM_EVOLVE_TASK', p_parameter => 'ACCEPT_PLANS', p_value => 'FALSE'); END;

對於 EXECUTION_DAYS_TO_EXPIRE,下列 PL/SQL 程式將 10 設定為 AUTO_STATS_ADVISOR_TASK。預先定義的任務 AUTO_STATS_ADVISOR_TASK 每天會在維護視窗中自動執行一次。此範例會將任務執行的保留期設定為 10 天。

BEGIN rdsadmin.rdsadmin_util.advisor_task_set_parameter( p_task_name => 'AUTO_STATS_ADVISOR_TASK', p_parameter => 'EXECUTION_DAYS_TO_EXPIRE', p_value => '10'); END;

停用 AUTO_STATS_ADVISOR_TASK

若要停用 AUTO_STATS_ADVISOR_TASK,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.advisor_task_dropadvisor_task_drop 程序接受下列參數。

注意

此程序適用於 Oracle 資料庫 12c 版本 2 (12.2.0.1) 及更新版本。

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

p_task_name

varchar2

待停用建議程式任務的名稱。唯一有效的值為 AUTO_STATS_ADVISOR_TASK

下列命令會捨棄 AUTO_STATS_ADVISOR_TASK

EXEC rdsadmin.rdsadmin_util.advisor_task_drop('AUTO_STATS_ADVISOR_TASK')

您可以使用 rdsadmin.rdsadmin_util.dbms_stats_init 重新啟用 AUTO_STATS_ADVISOR_TASK

重新啟用 AUTO_STATS_ADVISOR_TASK

若要重新啟用 AUTO_STATS_ADVISOR_TASK,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.dbms_stats_initdbms_stats_init 程序不需採用任何參數。

下列命令會重新啟用 AUTO_STATS_ADVISOR_TASK

EXEC rdsadmin.rdsadmin_util.dbms_stats_init()