

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

# 執行 Oracle 資料庫執行處理的雜項任務
<a name="Appendix.Oracle.CommonDBATasks.Misc"></a>

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

**Topics**
+ [在主要資料儲存空間中建立和捨棄目錄](#Appendix.Oracle.CommonDBATasks.NewDirectories)
+ [列出資料庫執行個體目錄中的檔案](#Appendix.Oracle.CommonDBATasks.ListDirectories)
+ [讀取資料庫執行個體目錄中的檔案](#Appendix.Oracle.CommonDBATasks.ReadingFiles)
+ [存取 Opatch 檔案](#Appendix.Oracle.CommonDBATasks.accessing-opatch-files)
+ [管理建議程式任務](#Appendix.Oracle.CommonDBATasks.managing-advisor-tasks)
+ [可傳輸的資料表空間](rdsadmin_transport_util.md)

## 在主要資料儲存空間中建立和捨棄目錄
<a name="Appendix.Oracle.CommonDBATasks.NewDirectories"></a>

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

`create_directory` 和 `drop_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 程序](https://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS70924)。

## 列出資料庫執行個體目錄中的檔案
<a name="Appendix.Oracle.CommonDBATasks.ListDirectories"></a>

若要列出目錄中的檔案，請使用 Amazon RDS 程序 `rdsadmin.rds_file_util.listdir`。Oracle 複本不支援此程序。`listdir` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
| `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'));
```

## 讀取資料庫執行個體目錄中的檔案
<a name="Appendix.Oracle.CommonDBATasks.ReadingFiles"></a>

若要讀取文字檔案，請使用 Amazon RDS 程序 `rdsadmin.rds_file_util.read_text_file`。`read_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 檔案
<a name="Appendix.Oracle.CommonDBATasks.accessing-opatch-files"></a>

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 名稱，請參閱[列出檔案](USER_LogAccess.Concepts.Oracle.md#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.ViewingBackgroundDumpDest)。

庫存檔案會使用 Amazon RDS 命名慣例 `lsinventory-{{dbv}}.txt` 和 `lsinventory_detail-{{dbv}}.txt`，其中 {{dbv}} 是資料庫版本的完整名稱。`lsinventory-{{dbv}}.txt` 檔案可在所有資料庫版本上使用。對應的 `lsinventory_detail-{{dbv}}.txt` 適用於 19.0.0.0、ru-2020-01.rur-2020-01.r1 或更新版本。

例如，若您的資料庫版本為 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
```

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

### 主控台
<a name="Appendix.Oracle.CommonDBATasks.accessing-opatch-files.console"></a>

**如何使用主控台下載庫存檔案**

1. 前往 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)，開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Databases** (資料庫)。

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

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

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

1. 在**日誌**區段中，搜尋 `lsinventory`。

1. 選取您要存取的檔案，然後選擇**下載**。

### SQL
<a name="Appendix.Oracle.CommonDBATasks.accessing-opatch-files.sql"></a>

若要在 SQL 用戶端中讀取 `lsinventory-{{dbv}}.txt`，您可以使用 `SELECT` 陳述式。針對此技術，請使用下列 `rdsadmin` 函數：`rdsadmin.rds_file_util.read_text_file` 或 `rdsadmin.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'));
```

### PL/SQL
<a name="Appendix.Oracle.CommonDBATasks.accessing-opatch-files.plsql"></a>

若要在 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;
```

## 管理建議程式任務
<a name="Appendix.Oracle.CommonDBATasks.managing-advisor-tasks"></a>

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](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-19-0.html#oracle-version-RU-RUR.19.0.0.0.ru-2021-01.rur-2021-01.r1)。

**Topics**
+ [設定建議程式任務的參數](#Appendix.Oracle.CommonDBATasks.setting-task-parameters)
+ [停用 AUTO\_STATS\_ADVISOR\_TASK](#Appendix.Oracle.CommonDBATasks.dropping-advisor-task)
+ [重新啟用 AUTO\_STATS\_ADVISOR\_TASK](#Appendix.Oracle.CommonDBATasks.recreating-advisor-task)

### 設定建議程式任務的參數
<a name="Appendix.Oracle.CommonDBATasks.setting-task-parameters"></a>

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


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
| `p_task_name` | varchar2 | — | 是 | 您要變更其參數的建議程式任務名稱。有效值如下：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.Misc.html) | 
| `p_parameter` | varchar2 | — | 是 | 任務參數的名稱。若要尋找建議程式任務的有效參數，請執行下列查詢。用 `p_task_name` 有效值替代 {{p\_task\_name}}：<pre>COL PARAMETER_NAME FORMAT a30<br />COL PARAMETER_VALUE FORMAT a30<br />SELECT PARAMETER_NAME, PARAMETER_VALUE<br />FROM DBA_ADVISOR_PARAMETERS<br />WHERE TASK_NAME='{{p_task_name}}'<br />AND PARAMETER_VALUE != 'UNUSED'<br />ORDER BY PARAMETER_NAME;</pre> | 
| `p_value` | varchar2 | — | 是 | 任務參數的值。若要尋找任務參數的有效值，請執行下列查詢。用 `p_task_name` 有效值替代 {{p\_task\_name}}：<pre>COL PARAMETER_NAME FORMAT a30<br />COL PARAMETER_VALUE FORMAT a30<br />SELECT PARAMETER_NAME, PARAMETER_VALUE<br />FROM DBA_ADVISOR_PARAMETERS<br />WHERE TASK_NAME='{{p_task_name}}'<br />AND PARAMETER_VALUE != 'UNUSED'<br />ORDER BY PARAMETER_NAME;</pre> | 

對於 `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
<a name="Appendix.Oracle.CommonDBATasks.dropping-advisor-task"></a>

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


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
| `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
<a name="Appendix.Oracle.CommonDBATasks.recreating-advisor-task"></a>

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

下列命令會重新啟用 `AUTO_STATS_ADVISOR_TASK`。

```
EXEC rdsadmin.rdsadmin_util.dbms_stats_init()
```