Wie ändere ich die Größe des Tablespace für meinen Amazon RDS für die Oracle DB-Instance?

Lesedauer: 8 Minute
0

Ich möchte wissen, wie ich den Tablespace für meinen Amazon Relational Database Service (Amazon RDS) für die Oracle DB-Instance verwalten oder seine Größe ändern kann.

Kurzbeschreibung

Der Standardtyp des Tablespace bei DB-Instances von Amazon RDS für Oracle ist bigfile. Es ist keine bewährte Methode, smallfile-Tablespaces für deine RDS für Oracle-Instances zu verwenden.

Eine RDS für Oracle-Instance, die einen smallfile-Tablespace verwendet, hat die folgenden Einschränkungen:

  • Da der Befehl ALTER DATABASE in RDS für Oracle nicht unterstützt wird, kannst du die Abfrage ALTER DATABASE nicht ausführen, um die Größe der Datendateikonfigurationen zu ändern. Weitere Informationen findest du unter Einschränkungen für Oracle DBA-Rechte.
  • Du musst den Parameter db_files manuell verwalten, um die maximale Anzahl von Datendateien in der Datenbank zu definieren. Wenn die Anzahl der Datendateien nahe am Grenzwert ist, ändere den Parameter db_files.

Wenn du keine Datendateigröße angibst, ist AUTOEXTEND ON standardmäßig aktiviert, wenn du Tablespaces erstellst. Die maximale Größe von bigfile-Tablespaces beträgt 16 TiB (Tebibyte). Wenn du Daten in den Tablespace einfügst, wird der Tablespace bis zur konfigurierten Höchstgrenze erhöht, die der Tablespace benötigt. Oder der Tablespace wird auf die Höchstgrenze für zugewiesenen Speicher für die RDS-Instance erhöht.

Wenn der zugewiesene Speicher für die RDS-Instance voll ist, wechselt die Instance in den Status STORAGE_FULL und Tablespaces können nicht erweitert werden. Um dieses Problem zu beheben, musst du der Instance Speicherplatz hinzufügen. Weitere Informationen findest du unter Wie löse ich Probleme, die auftreten, wenn den Amazon RDS-DB-Instances der Speicherplatz ausgeht?

Wenn Daten aus einem Tablespace gelöscht werden, schrumpft die Größe des Tablespace nicht. Die freien Blöcke können wiederverwendet werden, wenn neue Daten eingefügt werden. Du musst die Größe des Tablespace manuell ändern, um den ungenutzten Speicherplatz zurückzugewinnen.

Lösung

Gehe wie folgt vor, um die Größe des Tablespace für die RDS für Oracle-Instance zu ändern.

Überprüfe die Konfiguration des Tablespace

Führe die folgenden Schritte aus:

  1. Um die Tablespace-Typen zu identifizieren, führe eine Abfrage ähnlich dem folgenden Beispiel aus:
    SQL> SELECT TABLESPACE_NAME, CONTENTS, BIGFILE FROM DBA_TABLESPACES;
    Beachte, dass Tablespace-Typen permanent, undo, temporär, smallfile oder bigfile sein können.
  2. Führe die folgenden Abfragen aus, um die Größe der Datendatei und die konfigurierte Höchstgrenze zu überprüfen und zu überprüfen, ob die Funktion autoextend aktiviert ist. Führe für permanente und Undo-Tablespaces die folgende Abfrage aus:
    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;
    Führe für temporäre Tablespaces die folgende Abfrage aus:
    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;

In der Ausgabe dieser Abfragen werden möglicherweise die folgenden Details angezeigt:

  • Wenn die Funktion autoextend nicht aktiviert ist, ist der Wert von MAX_GB gleich 0.
  • Wenn der Tablespace-Typ smallfile ist, hängt der Wert von MAX_GB von der Blockgröße ab, die zum Erstellen des Tablespace verwendet wurde. Wenn die verwendete Blockgröße beispielsweise 8 K ist, beträgt der Wert von MAX_GB 32 GB. Weitere Informationen findest du unter Nonstandard Block Sizes (Nicht standardmäßige Blockgrößen) auf der Oracle-Website.
  • Wenn der Tablespace-Typ bigfile ist, wird der Wert von MAX_GB als 32 TB angezeigt. Die maximale Größe einer einzelnen Datei auf RDS für Oracle-DB-Instances beträgt 16 TiB.

Führe die folgenden Abfragen aus, um die Datenbeschreibungssprache (Data Description Language, DDL) für den Tablespace abzurufen:

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

Du kannst die erforderlichen Informationen über den Tablespace aus der zurückgegebenen DDL abrufen.

Erhöhen der Größe des Tablespace

Wenn du das Feature autoextend aktivierst, musst du den Tablespace nicht vergrößern.

Wenn du jedoch das Feature autoextend aktivierst und dann die Größe des Tablespace änderst, musst du die folgenden Anforderungen erfüllen.

Führe für bigfile-Tablespaces den Befehl ALTER TABLESPACE aus, um die Größe des Tablespace zu ändern:

SQL> ALTER TABLESPACE example-tablespace RESIZE 50G;

Weitere Informationen findest du unter ALTER TABLESPACE auf der Oracle-Website. Gib die Größe in Kilobyte (K), Megabyte (M), Gigabyte (G) oder Terabyte (T) an. Der bigfile-Tablespace hat eine einzige Datendatei, und der Befehl ALTER TABLESPACE ändert die Größe der Datendatei, die zum Tablespace gehört.

Füge bei smallfile-Tablespaces Datendateien hinzu, um den Tablespace zu vergrößern:

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

Um die Größe einer Originaldatendatei in einem smallfile-Tablespace zu ändern, führe rdsadmin_util.resize_datafile aus:

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

Die Ausgabe sieht ungefähr so aus:

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

Reduzieren der Größe des Tablespace

Gehe wie folgt vor, um die Größe eines smallfile-Tablespace zu reduzieren:

  1. Um die Größe eines smallfile-Tablespace zu reduzieren, führe rdsadmin_util.resize_datafile aus.
    Hinweis: Du kannst die Größe einer Datendatei nicht auf einen Wert reduzieren, der unter dem Wasserzeichen der Datendatei auf hoher Ebene liegt.
  2. Erstelle einen neuen Tablespace und konfiguriere den Raum nach Bedarf. Verschiebe dann manuell alle deine Daten in den neuen Tablespace.

Wenn der Tablespace bigfile ist, wähle eine der folgenden Methoden, um die Größe des Tablespace basierend auf dem Tablespace-Typ zu verringern.

Bei permanenten Tablespaces kannst du die Größe eines permanenten Tablespace nicht auf einen Wert verringern, der unter dem Wasserzeichen des Tablespace auf hoher Ebene liegt. Wenn du versuchst, die Größe eines permanenten Tablespace zu ändern, schlägt die Größenänderung fehl. Dann wird der folgende Fehler angezeigt:

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

Führe jedoch die folgende Abfrage aus, um die Größe des Tablespace auf 40 GB zu verringern, wenn der Tablespace eine Größe von 50 GB und ein Wasserzeichen auf hoher Ebene von 40 GB hat:

SQL> ALTER TABLESPACE example-tablespace RESIZE 40G;

Wenn du die Größe des Tablespace nicht auf einen Wert verringern kannst, der unter dem Wasserzeichen auf hoher Ebene liegt, solltest du die folgenden Optionen in Betracht ziehen:

  • Reorganisiere die Objekte im Tablespace.
  • Erstelle einen neuen Tablespace und verschiebe alle Objekte in den neuen Tablespace.
  • Lösche den alten Tablespace.

Führe bei temporären Tablespaces den Befehl SHRINK aus, um die Größe des temporären Tablespace zu verringern:

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

Um die Größe der temporären Tablespaces in einem Lesereplikat zu ändern, führe rdsadmin.rdsadmin_util.resize_temp_tablespace aus:

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

-oder-

Erstelle einen weiteren temporären Tablespace und konfiguriere die erforderliche Größe. Lege dann den neuen temporären Tablespace als temporären Standard-Tablespace fest.

  1. Führe die folgende Abfrage aus, um den aktuellen temporären Standard-Tablespace anzuzeigen:

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

    Weitere Informationen findest du unter Viewing Information About Tablespaces (Informationen zu Tablespaces anzeigen) auf der Oracle-Website.

  2. Um einen neuen temporären Tablespace zu erstellen, führe die folgende Abfrage aus:

    SQL> CREATE TEMPORARY TABLESPACE example-tablespace TEMPFILE SIZE 100M;
  3. Um den neuen temporären Tablespace als temporären Standard-Tablespace festzulegen, führe die folgende Abfrage aus:

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

Gehe wie folgt vor, um den temporären Tablespace für einen bestimmten Benutzer zu ändern:

  1. Um den aktuellen temporären Standard-Tablespace für den Benutzer anzuzeigen, führe die folgende Abfrage aus:

    SQL>  SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS where USERNAME='example_username';
  2. Um den temporären Standard-Tablespace für den Benutzer zu ändern, führe die folgende Abfrage aus:

    SQL> ALTER USER example_username TEMPORARY TABLESPACE example-tablespace;

Verwende bei Undo-Tablespaces** den Befehl **ALTER TABLESPACE, um die Größe des Undo-Tablespace zu verringern.

Führe die folgende Abfrage aus, um den Undo-Tablespace zu identifizieren, der derzeit verwendet wird:

SQL> SHOW PARAMETER UNDO_TABLESPACE;

Um den Undo-Tablespace zu verkleinern, führe eine Abfrage aus, die der folgenden Beispielabfrage ähnelt:

Wenn die Abfrage nicht erfolgreich ausgeführt wird, führe die folgenden Schritte aus:

  1. Erstelle einen neuen Undo-Tablespace:

    SQL> CREATE UNDO TABLESPACE example-new-tablespace DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 100G;
  2. Stelle den neu erstellten Tablespace als Standard-Undo-Tablespace ein:

    UNDO_TABLESPACE = example-new-tablespace

    Stelle den Initialisierungsparameter UNDO_TABLESPACE in der Parametergruppe so ein, dass er auf den neu erstellten Tablespace verweist.
    Weitere Informationen findest du unter Arbeiten mit Parametergruppen.
    Der Initialisierungsparameter UNDO_TABLESPACE ist ein dynamischer Parameter und führt nicht zu Ausfallzeiten, wenn du die Änderung übernimmst. Es empfiehlt sich jedoch, die DB-Instance neu zu starten, nachdem du eine Änderung vorgenommen hast. Weitere Informationen findest du unter Managing Undo (Undo verwalten) auf der Oracle-Website.
    Führe die folgende Abfrage aus, um zu überprüfen, ob der neue Undo-Tablespace der Standard-Tablespace ist:

    SQL> SHOW PARAMETER UNDO_TABLESPACE;
  3. Um den alten Tablespace zu löschen, führe eine Lösch-Abfrage für den Tablespace aus:

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

Ähnliche Informationen

Wie kann ich CloudWatch-Alarme erstellen, um den freien Amazon-RDS-Speicherplatz zu überwachen und Probleme mit vollem Speicher zu vermeiden?

Automatische Kapazitätsverwaltung mit Amazon RDS-Speicherautomatik

Warum verwendet meine Amazon RDS für Oracle DB-Instance mehr Speicher als erwartet?