Comment puis-je redimensionner le tablespace de mon instance de base de données Amazon RDS for Oracle ?

Lecture de 8 minute(s)
0

Je souhaite savoir comment gérer ou redimensionner le tablespace de mon instance de base de données Amazon Relational Database Service (Amazon RDS) for Oracle.

Brève description

Le type de tablespace par défaut pour les instances de base de données Amazon RDS for Oracle est bigfile. Il n'est pas recommandé d'utiliser des tablespaces smallfile pour vos instances RDS for Oracle.

Une instance RDS for Oracle qui utilise un tablespace smallfile présente les limites suivantes :

  • La commande ALTER DATABASE n'étant pas prise en charge dans RDS for Oracle, vous ne pouvez pas exécuter la requête ALTER DATABASE pour redimensionner ou modifier les configurations de fichiers de données. Pour plus d'informations, consultez la section Limitations des privilèges Oracle DBA.
  • Vous devez gérer manuellement le paramètre db_files pour définir le nombre maximal de fichiers de données dans la base de données. Lorsque le nombre de fichiers de données est proche de cette limite, modifiez le paramètre db_files.

Si vous ne spécifiez pas de taille de fichier de données, AUTOEXTEND ON est activé par défaut lorsque vous créez des tablespaces. La taille maximale des tablespaces bigfile est de 16 TiB (tébioctets). Lorsque vous insérez des données dans le tablespace, celui-ci augmente jusqu'à la limite maximale configurée requise par le tablespace. Ou bien, le tablespace augmente jusqu'à la limite maximale de stockage alloué à l'instance RDS.

Si le stockage alloué à l'instance RDS est plein, l'instance passe à l'état STORAGE_FULL et les tablespaces ne peuvent pas s'étendre. Pour résoudre ce problème, vous devez ajouter de l'espace de stockage à votre instance. Pour plus d’informations, consultez la section Comment puis-je résoudre les problèmes qui surviennent lorsque les instances de base de données Amazon RDS manquent d'espace de stockage ?

Lorsque des données sont supprimées d'un tablespace, la taille de celui-ci ne diminue pas. Les blocs libres peuvent être réutilisés lorsque de nouvelles données sont insérées. Vous devez redimensionner manuellement le tablespace pour récupérer l'espace inutilisé.

Résolution

Pour redimensionner le tablespace de votre instance RDS for Oracle, procédez comme suit.

Vérifiez la configuration du tablespace

Procédez comme suit :

  1. Pour identifier les types de tablespace, exécutez une requête similaire à l'exemple suivant :
    SQL> SELECT TABLESPACE_NAME, CONTENTS, BIGFILE FROM DBA_TABLESPACES;
    Notez que les types de tablespace peuvent être permanents, d’annulation, temporaires, smallfile ou bigfile.
  2. Pour vérifier la taille du fichier de données, la limite maximale configurée et vérifier si la fonctionnalité autoextend est activée, exécutez les requêtes suivantes. Pour les tablespaces permanents et d’annulation, exécutez la requête suivante :
    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;
    Pour les tablespaces temporaires, exécutez la requête suivante :
    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;

Les informations suivantes peuvent apparaître dans le résultat de ces requêtes :

  • Si la fonction autoextend n'est pas activée, la valeur de MAX_GB est égale à 0.
  • Si le type de tablespace est smallfile, la valeur de MAX_GB dépend de la taille de bloc utilisée pour créer le tablespace. Par exemple, si la taille de bloc utilisée est de 8 Ko, la valeur de MAX_GB est de 32 Go. Pour plus d'informations, consultez la page Tailles de blocs non standard sur le site Web d'Oracle.
  • Si le type de tablespace est bigfile, la valeur de MAX_GB affichée est 32 To. La taille maximale d'un seul fichier dans vos instances de base de données RDS for Oracle est de 16 TiB.

Pour récupérer le langage de description des données (DDL) pour le tablespace, exécutez les requêtes suivantes :

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

Vous pouvez récupérer les informations requises concernant le tablespace à partir du DDL renvoyé.

Augmenter la taille du tablespace

Si vous activez la fonctionnalité autoextend, vous n'avez pas besoin d'augmenter la taille du tablespace.

Toutefois, lorsque vous activez la fonctionnalité autoextend, puis que vous redimensionnez le tablespace, vous devez remplir les conditions suivantes.

Pour les tablespaces bigfile, pour redimensionner le tablespace, exécutez la commande ALTER TABLESPACE :

SQL> ALTER TABLESPACE example-tablespace RESIZE 50G;

Pour plus d'informations, consultez la page ALTER TABLESPACE sur le site Web d'Oracle. Spécifiez la taille en kilo-octets (K), méga-octets (M), giga-octets (G) ou téra-octets (T). Le tablespace bigfile possède un seul fichier de données et la commande ALTER TABLESPACE redimensionne le fichier de données qui appartient à ce tablespace.

Pour les tablespaces smallfile, ajoutez des fichiers de données pour augmenter la taille du tablespace :

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

Pour redimensionner un fichier de données d'origine dans un tablespace smallfile, exécutez rdsadmin_util.resize_datafile :

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

Votre résultat ressemble à ce qui suit :

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

Réduire la taille du tablespace

Pour réduire la taille d'un tablespace smallfile, procédez comme suit :

  1. Pour réduire la taille d'un tablespace smallfile, exécutez rdsadmin_util.resize_datafile.
    Remarque : Vous ne pouvez pas réduire la taille d'un fichier de données à une valeur inférieure au filigrane supérieur du fichier de données.
  2. Créez un nouveau tablespace et configurez-le selon vos besoins. Puis, déplacez manuellement toutes vos données vers le nouveau tablespace.

Si votre tablespace est un fichier volumineux, pour réduire la taille du tablespace en fonction de votre type de tablespace, choisissez l'une des méthodes suivantes.

Pour les tablespaces permanents, vous ne pouvez pas réduire la taille d'un tablespace permanent à une valeur inférieure au filigrane supérieur du tablespace. Lorsque vous essayez de redimensionner un tablespace permanent, votre opération de redimensionnement échoue. L'erreur suivante s'affiche :

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

Toutefois, pour réduire la taille du tablespace à 40 Go lorsque celui-ci a une taille de 50 Go et un filigrane élevé de 40 Go, exécutez la requête suivante :

SQL> ALTER TABLESPACE example-tablespace RESIZE 40G;

Si vous ne pouvez pas réduire la taille du tablespace à une valeur inférieure au filigrane le plus élevé, envisagez les options suivantes :

  • Réorganisez les objets du tablespace.
  • Créez un nouveau tablespace et déplacez tous les objets vers le nouveau tablespace.
  • Supprimez l'ancien tablespace.

Pour les tablespaces temporaires, pour réduire la taille de votre tablespace temporaire, exécutez la commande SHRINK :

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

Pour redimensionner les tablespaces temporaires d'un réplica en lecture, exécutez rdsadmin.rdsadmin_util.resize_temp_tablespace :

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

-ou-

Créez un autre tablespace temporaire et configurez la taille requise. Puis, définissez le nouveau tablespace temporaire comme tablespace temporaire par défaut.

  1. Pour afficher le tablespace temporaire par défaut actuel, exécutez la requête suivante :

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

    Pour plus d'informations, consultez la page Affichage des informations relatives aux tablespaces sur le site Web d'Oracle.

  2. Pour créer un nouveau tablespace temporaire, exécutez la requête suivante :

    SQL> CREATE TEMPORARY TABLESPACE example-tablespace TEMPFILE SIZE 100M;
  3. Pour définir le nouveau tablespace temporaire comme tablespace temporaire par défaut, exécutez la requête suivante :

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

Pour modifier le tablespace temporaire pour un utilisateur spécifique, procédez comme suit :

  1. Pour afficher le tablespace temporaire par défaut actuel pour l'utilisateur, exécutez la requête suivante :

    SQL>  SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS where USERNAME='example_username';
  2. Pour modifier le tablespace temporaire par défaut pour l'utilisateur, exécutez la requête suivante :

    SQL> ALTER USER example_username TEMPORARY TABLESPACE example-tablespace;

Pour les tablespaces d'annulation, utilisez la commande ALTER TABLESPACE pour réduire la taille du tablespace d'annulation.

Pour identifier le tablespace d'annulation actuellement utilisé, exécutez la requête suivante :

SQL> SHOW PARAMETER UNDO_TABLESPACE;

Pour réduire la taille du tablespace d'annulation, exécutez une requête similaire à l'exemple de requête suivant :

Si la requête ne s'exécute pas correctement, procédez comme suit :

  1. Créez un nouveau tablespace d'annulation :

    SQL> CREATE UNDO TABLESPACE example-new-tablespace DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 100G;
  2. Définissez le tablespace nouvellement créé comme tablespace d'annulation par défaut :

    UNDO_TABLESPACE = example-new-tablespace

    Définissez le paramètre d'initialisation UNDO_TABLESPACE dans le groupe de paramètres afin qu'il pointe vers le tablespace nouvellement créé.
    Pour en savoir plus, consultez la section Utilisation des groupes de paramètres.
    Le paramètre d'initialisation UNDO_TABLESPACE est un paramètre dynamique qui n'entraîne aucune interruption lorsque vous appliquez la modification. Cependant, il est recommandé de redémarrer l'instance de base de données après avoir apporté une modification. Pour plus d'informations, consultez la page Gestion des annulations sur le site Web d'Oracle.
    Pour vérifier que le nouveau tablespace d'annulation est le tablespace par défaut, exécutez la requête suivante :

    SQL> SHOW PARAMETER UNDO_TABLESPACE;
  3. Pour supprimer l'ancien tablespace d'annulation, exécutez une requête de tablespace d’abandon :

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

Informations connexes

Comment puis-je créer des alarmes CloudWatch pour surveiller l’espace de stockage disponible d’Amazon RDS et éviter les problèmes de stockage plein ?

Gestion automatique de la capacité grâce à l’autoscaling de stockage Amazon RDS

Pourquoi mon instance de base de données Amazon RDS for Oracle utilise-t-elle plus d'espace de stockage que prévu ?