跳至內容

如何調整我的 Amazon RDS for Oracle 資料庫執行個體的資料表空間大小?

3 分的閱讀內容
0

我想知道如何管理或調整我的 Amazon Relational Database Service (Amazon RDS) for Oracle 資料庫執行個體的資料表空間大小。

簡短說明

Amazon RDS for Oracle 資料庫執行個體的預設資料表空間類型為 bigfile。不建議在 RDS for Oracle 資料庫執行個體中使用 smallfile 資料表空間。

使用 smallfile 資料表空間的 RDS for Oracle 資料庫執行個體有以下限制:

  • 您無法執行 ALTER DATABASE 命令來調整大小或變更資料檔案組態。如需更多資訊,請參閱 RDS for Oracle 中 DBA 權限的限制
  • 您必須手動管理 db\ _files 參數,以定義資料庫中的資料檔案數目上限。如果資料檔案數量接近配額上限,則必須變更 db_files 參數。

當您建立資料表空間且未指定資料檔案大小時,Amazon RDS 會預設啟用 AUTOEXTEND ON (自動擴展開啟)。bigfile 資料表空間的大小上限為 16 TiB 。當您在資料表空間中插入資料時,資料表空間的大小會增加至您設定的配額上限或分配儲存空間的配額上限。

如果 RDS for Oracle 資料庫執行個體的分配儲存空間已滿,則執行個體會切換至 STORAGE_FULL 狀態,且資料表空間無法擴展。若要解決此問題,您必須為執行個體新增儲存空間。如需詳細資訊,請參閱如何解決 Amazon RDS 資料庫執行個體儲存空間不足時發生的問題?

當您從資料表空間刪除資料時,資料表空間的大小不會減少。當您插入新資料時,可以重複使用可用的空白區塊。您必須手動調整資料表空間大小,才能回收未使用的空間。

解決方法

**注意:**在以下命令中,請將 TABLESPACE_NAMEexample-tablespace 替換為您的資料表空間名稱。

檢查資料表空間的組態

若要識別資料表空間類型,請執行以下查詢:

SELECT TABLESPACE_NAME, CONTENTS, BIGFILE FROM DBA_TABLESPACES;

上述命令可能會回傳以下輸出:

  • BIGFILE 欄的值若為 YES 表示為 BIGFILE,若為 NO 則表示為 SMALL FILE
  • CONTENTS 欄的值可能為永久復原暫時

若要檢查資料檔案的大小、您設定的配額上限,以及是否啟用了自動擴展功能,請執行以下其中一個查詢。

對於永久與復原資料表空間,請執行以下查詢:

SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*1024*1024),2) SUM_GB, ROUND(MAXBYTES/(1024*1024*1024),2) MAX_GB, AUTOEXTENSIBLE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME, MAXBYTES,AUTOEXTENSIBLE;

對於暫時資料表空間,請執行以下查詢:

SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*1024*1024),2) SUM_GB, ROUND(MAXBYTES/(1024*1024*1024),2) MAX_GB, AUTOEXTENSIBLE FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME, MAXBYTES,AUTOEXTENSIBLE;

上述命令可能會回傳以下輸出:

  • 如果未啟用自動擴展功能,則 MAX_GB 的值會等於 0。
  • 如果資料表空間類型為 smallfile,則 MAX_GB 的值取決於建立資料表空間時使用的區塊大小。例如,若區塊大小為 8 K,則 MAX_GB 的值為 32 GB。如需更多資訊,請參閱 Oracle 網站上的 非標準區塊大小
  • 如果資料表空間類型為 bigfile,則 MAX\ _GB 的值會顯示為 32 TB。RDS for Oracle 資料庫執行個體上單一檔案大小上限為 16 TiB。

若要從資料定義語言 (DDL) 擷取與資料表空間相關的必要資訊,請執行以下命令:

SET LINESIZE 400;
SET LONG 99999;
SELECT DBMS_METADATA.GET_DDL('TABLESPACE','example-tablespace') FROM DUAL;

增加資料表空間的大小

如果您開啟自動擴展功能,則不需要增加資料表空間的大小。

但是,如果您啟用了自動擴展功能,並且調整了資料表空間大小,則在調整大小時必須採取以下動作:

  • 對於 bigfile 資料表空間,請執行以下命令以調整資料表空間大小:

    ALTER TABLESPACE example-tablespace RESIZE 50G;

    **注意:**請以 KB、MB、GB 或 TB 為單位指定大小。bigfile 資料表空間具有單一資料檔案,而 ALTER TABLESPACE 命令會調整屬於資料表空間的資料檔案的大小。如需更多資訊,請參閱 Oracle 網站上的 ALTER TABLESPACE

  • 對於 smallfile 資料表空間,請執行以下命令以新增資料檔案來增加資料表空間大小:

    ALTER TABLESPACE example-tablespace ADD DATAFILE SIZE 1G AUTOEXTEND ON;
  • 對於 smallfile 資料表空間,請執行以下命令以使用 rdsadmin_util.resize_datafile 程序,藉此調整原始資料檔案大小:

    select file_id,file_name, bytes/1024/1024/1024 gb from dba_data_files where tablespace_name='TEST';

    **注意:**請將 TEST 替換為資料表空間名稱。

    程序輸出範例:

    FILE_ID FILE_NAME                                                   GB  
    =======================================================================  
    6      /rdsdbdata/db/TESTDB_A/datafile/o1_mf_test_m03xlfq8_.dbf      1  
    SQL> exec rdsadmin.rdsadmin_util.resize_datafile(6,'2G')  
    PL/SQL procedure successfully completed.  
    SQL> select file_id,file_name, bytes/1024/1024/1024 gb from dba_data_files where tablespace_name='TEST';  
    FILE_ID FILE_NAME                                                     GB  
    =========================================================================  
     6      /rdsdbdata/db/TESTDB_A/datafile/o1_mf_test_m03xlfq8_.dbf      2

減少 smallfile 資料表空間大小

若要減少 smallfile 資料表空間的大小,請完成下列步驟:

  1. 使用 rdsadmin_util.resize_datafile 程序。
    **注意:**您無法將資料檔案的大小減少到小於資料檔案的高水位值。
  2. 建立新資料表空間,然後依您的需求設定空間。
  3. 手動將所有資料移至新資料表空間。

減少 bigfile 資料表空間大小

如果您使用 bigfile 資料表空間,請選擇下列其中一種方法以減少資料表空間大小

永久性資料表空間

當您嘗試將永久性資料表空間的大小減少到低於該資料表空間高水位線的值時,調整大小的操作會失敗。然後您會收到以下錯誤訊息:

「ORA-03297: file contains used data beyond requested RESIZE value.」

如果資料表空間大小大於高水位線,則您可以將永久性資料表空間的大小減少至高水位線值。

例如,若高水位線為 40 GB,而資料表空間大小為 50 GB,則您可以將資料表空間減少至 40 GB。

調整資料表空間大小的命令範例:

ALTER TABLESPACE example-tablespace RESIZE 40G;

如果您無法將資料表空間大小減少至等於高水位線的值,請採取以下行動:

  • 重新組織資料表空間中的物件。
  • 建立新資料表空間,並將所有物件移至新資料表空間。然後刪除舊的資料表空間。

暫時資料表空間

執行以下命令以減少暫時資料表空間

ALTER TABLESPACE example-tablespace SHRINK SPACE KEEP 100M;

若要在唯讀複本中調整暫時資料表空間大小,請在以下命令中包含 rdsadmin.rdsadmin_util.resize_temp_tablespace

EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('example-tablespace','100M');

或者,建立另一個暫時資料表空間,並將新的資料表空間設為預設。

請完成下列步驟:

  1. 執行以下查詢以檢視目前的預設暫時資料表空間:

    SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';

    **注意:**如需更多資訊,請參閱 Oracle 網站上的檢視有關資料表空間的資訊

  2. 執行以下命令以建立另一個暫時資料表空間,並設定所需大小:

    CREATE TEMPORARY TABLESPACE example-tablespace TEMPFILE SIZE 100M;
  3. 執行以下命令以將新的暫時資料表空間設為預設暫時資料表空間

    EXEC RDSADMIN.RDSADMIN_UTIL.ALTER_DEFAULT_TEMP_TABLESPACE(TABLESPACE_NAME => 'example-tablespace');

若要修改特定使用者的暫時資料表空間,請完成以下步驟:

  1. 執行以下查詢以檢視該使用者目前的預設暫時資料表空間:

    SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS where USERNAME='example_username';
  2. 執行以下命令以更改預設暫時資料表空間

    ALTER USER example_username TEMPORARY TABLESPACE example-tablespace;

復原資料表空間

請完成下列步驟:

  1. 執行以下查詢以識別目前正在使用的復原資料表空間:

    SHOW PARAMETER UNDO_TABLESPACE;
  2. 執行以下命令以減少復原資料表空間的大小:

    `ALTER TABLESPACE example-tablespace RESIZE 40G;`

如果查詢無法執行,請完成以下步驟:

  1. 執行以下命令以建立新的復原資料表空間

    CREATE UNDO TABLESPACE example-new-tablespace DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 100G;

    **注意:**請將 example-new-tablespace 替換為新復原資料表空間的名稱。

  2. 執行以下命令,將復原資料表空間設為參數群組中的預設資料表空間:

    UNDO_TABLESPACE = example-new-tablespace

    **注意:**由於 UNDO_TABLESPACE 為動態參數,修改時不會發生停機。但建議在修改參數後重新啟動資料庫執行個體。如需更多資訊,請參閱 Oracle 網站上的管理復原

  3. 執行以下查詢,以確認新的復原資料表空間參數是否為預設資料表空間:

    SHOW PARAMETER UNDO_TABLESPACE;
  4. 執行以下命令以刪除舊的復原資料表空間:

    DROP TABLESPACE example-tablespace INCLUDING CONTENTS AND DATAFILES;

相關資訊

如何建立 CloudWatch 警示以監控 Amazon RDS 可用的儲存空間,並避免儲存空間已滿的問題?

使用 Amazon RDS 儲存自動擴展功能自動管理容量

為什麼我的 Amazon RDS for Oracle 資料庫執行個體所使用的儲存空間超出預期?