如何調整我的 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 具有下列限制:

  • 由於 RDS for Oracle 不支援 ALTER DATABASE 命令,因此您無法執行 ALTER DATABASE 查詢來調整資料檔案組態的大小或變更。如需詳細資訊,請參閱 Oracle DBA 權限的限制
  • 您必須手動管理 db\ _files 參數,以定義資料庫中的資料檔案數目上限。當資料檔案的數目接近此限制時,請變更 db\ _files 參數。

如果您未指定資料檔案大小,則當您建立資料表空間時,會開啟 AUTOEXTEND ONbigfile 資料表空間的大小上限為 16 TiB (太位元組)。將資料插入資料表空間時,資料表空間會增加至資料表空間所需的設定上限。或者,資料表空間會增加到 RDS 執行個體配置儲存的最大限制。

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

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

解決方法

若要調整 RDS for Oracle 執行個體的資料表空間大小,請完成下列步驟。

檢查資料表空間的組態

請完成下列步驟:

  1. 若要識別資料表空間類型,請執行類似下列範例的查詢:
    SQL> SELECT TABLESPACE_NAME, CONTENTS, BIGFILE FROM DBA_TABLESPACES;
    請注意,資料表空間類型可以是永久性undo暫存smallfilebigfile
  2. 若要檢查資料檔案的大小、設定的上限,以及檢查是否開啟自動擴展功能,請執行下列查詢。對於永久性和 undo 資料表空間,請執行下列查詢:
    SQL> 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;
    對於暫存資料表空間,請執行下列查詢:
    SQL> 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 的值取決於建立資料表空間的區塊大小。例如,如果使用的區塊大小為 8K,則 Max\ _GB 的值為 32 GB。如需詳細資訊,請參閱 Oracle 網站上的非標準區塊大小
  • 如果資料表空間類型為 bigfile,則 MAX\ _GB 的值會顯示為 32 TB。RDS for Oracle 資料庫執行個體上單一檔案大小上限為 16 TiB。

若要擷取資料表空間的資料描述語言 (DDL),請執行下列查詢:

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

您可以從傳回的 DDL 擷取有關資料表空間的必要資訊。

增加資料表空間的大小

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

但是,當您開啟自動擴展功能,然後調整資料表空間大小時,您必須完成下列要求。

對於 bigfile 資料表空間,若要調整資料表空間大小,請執行 ALTER TABLESPACE 命令:

SQL> ALTER TABLESPACE example-tablespace RESIZE 50G;

如需詳細資訊,請參閱 Oracle 網站上的 ALTER TABLESPACE。以 KB (K)、MB (M)、GB (G) 或 TB (T) 為單位指定大小。bigfile 資料表空間具有單一資料檔案,而 ALTER TABLESPACE 命令會調整屬於資料表空間的資料檔案的大小。

對於 smallfile 資料表空間,新增資料檔案以增加資料表空間的大小:

SQL> ALTER TABLESPACE example-tablespace ADD DATAFILE SIZE 1G AUTOEXTEND ON;

若要在 smallfile 資料表空間中調整原始資料檔案的大小,請執行 rdsadmin_util.resize_datafile

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      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 資料表空間的大小,請完成下列步驟:

  1. 若要縮小 smallfile 資料表空間的大小,請執行 rdsadmin_util.resize_datafile
    **注意:**您無法將資料檔案的大小縮小到小於資料檔案的高水位值。
  2. 建立新資料表空間並根據需要設定空間。然後,手動將所有資料移動至新資料表空間。

如果您的資料表空間是 bigfile,則若要根據資料表空間類型縮小資料表空間的大小,則請選擇下列其中一種方法。

對於永久性資料表空間,您無法將永久性資料表空間的大小縮小到小於資料表空間的高水位值。當您嘗試調整永久性資料表空間的大小時,調整大小作業會失敗。然後,您會看到下列錯誤:

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

不過,若要在資料表空間大小為 50 GB 且高水位為 40 GB 時,若要將資料表空間大小縮小至 40 GB,請執行下列查詢:

SQL> ALTER TABLESPACE example-tablespace RESIZE 40G;

如果您無法將資料表空間的大小縮小為小於高水位的值,請考慮下列選項:

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

對於暫存資料表空間,若要減小暫存資料表空間的大小,請執行 SHRINK 命令:

SQL> ALTER TABLESPACE example-tablespace SHRINK SPACE KEEP 100M;

若要調整讀取複本中的暫存資料表空間大小,請執行 rdsadmin.rdsadmin_util.resize_temp_tablespace

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

-or-

建立另一個暫存資料表空間並設定所需的大小。然後,將新的暫存資料表空間設定為預設暫存資料表空間。

  1. 若要檢視目前的預設暫存資料表空間,請執行下列查詢:

    SQL> SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';

    如需詳細資訊,請參閱 Oracle 網站上的檢視有關資料表空間的資訊

  2. 若要建立新的暫存資料表空間,請執行下列查詢:

    SQL> CREATE TEMPORARY TABLESPACE example-tablespace TEMPFILE SIZE 100M;
  3. 若要將新的暫存資料表空間設定為預設暫存資料表空間,請執行下列查詢:

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

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

  1. 若要檢視使用者目前的預設暫存資料表空間,請執行下列查詢:

    SQL>  SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS where USERNAME='example_username';
  2. 若要針對使用者變更預設暫存資料表空間,請執行下列查詢:

    SQL> ALTER USER example_username TEMPORARY TABLESPACE example-tablespace;

對於 undo 資料表空間,請使用 ALTER TABLESPACE 命令來縮小復原資料表空間的大小。

若要識別目前正在使用的 undo 資料表空間,請執行下列查詢:

SQL> SHOW PARAMETER UNDO_TABLESPACE;

若要減小 undo 資料表空間的大小,請執行類似下列範例查詢的查詢:

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

  1. 建立新的 undo 資料表空間:

    SQL> CREATE UNDO TABLESPACE example-new-tablespace DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 100G;
  2. 將新建立的資料表空間設定為預設 undo 資料表空間

    UNDO_TABLESPACE = example-new-tablespace

    將參數群組中的 UNDO_TABLESPACE 初始化參數設定為指向新建立的資料表空間。
    如需詳細資訊,請參閱使用參數群組
    UNDO_TABLESPACE 初始化參數是動態參數,且套用修改時不會導致任何停機時間。但是,在進行變更後重新啟動資料庫執行個體是最佳實務。如需詳細資訊,請參閱 Oracle 網站上的管理 Undo
    若要確認新的 undo 資料表空間是預設資料表空間,請執行下列查詢:

    SQL> SHOW PARAMETER UNDO_TABLESPACE;
  3. 若要刪除舊的 undo 資料表空間,請執行刪除資料表空間查詢:

    SQL> DROP TABLESPACE example-tablespace INCLUDING CONTENTS AND DATAFILES;

相關資訊

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

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

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