Passer au contenu

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 une instance de base de données Amazon RDS for Oracle est bigfile. Il n'est pas recommandé d'utiliser des tablespaces smallfile pour vos instances de base de données RDS for Oracle.

Une instance de base de données RDS for Oracle qui utilise un tablespace smallfile comporte les limitations suivantes :

  • Vous ne pouvez pas exécuter la commande ALTER DATABASE pour redimensionner ou modifier les configurations de fichiers de données. Pour plus d'informations, consultez la section Limitations des privilèges DBA dans RDS for Oracle.
  • 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. Si le nombre de fichiers de données est proche de son quota, vous devez modifier le paramètre db_files.

Lorsque vous créez des tablespaces sans spécifier de taille de fichier de données, Amazon RDS active AUTOEXTEND ON par défaut. La taille maximale des tablespaces bigfile est de 16 Tio. Lorsque vous insérez des données dans le tablespace, la taille de ce dernier augmente jusqu'au quota maximum que vous configurez ou au quota maximum pour le stockage alloué.

Si le stockage alloué à l'instance de base de données RDS for Oracle 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 vous supprimez des données d'un tablespace, la taille de ce dernier ne diminue pas. Lorsque vous insérez de nouvelles données, vous pouvez réutiliser les blocs libres. Vous devez redimensionner manuellement le tablespace pour récupérer l'espace inutilisé.

Résolution

Remarque : Dans les commandes suivantes, remplacez TABLESPACE_NAME ou example-tablespace par le nom de votre tablespace.

Vérifier la configuration du tablespace

Pour identifier le type de tablespace, exécutez la requête suivante :

SELECT TABLESPACE_NAME, CONTENTS, BIGFILE FROM DBA_TABLESPACES;

La commande précédente peut renvoyer la sortie suivante :

  • La colonne BIGFILE peut inclure la valeur OUI pour BIGFILE ou NON pour SMALL FILE.
  • La colonne CONTENTS peut être permanente, d’annulation ou temporaire.

Pour vérifier la taille du fichier de données, le quota maximum que vous avez configuré et si la fonctionnalité autoextend est activée, exécutez l'une des requêtes suivantes.

Pour les tablespaces permanents et d’annulation, exécutez la requête suivante :

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 :

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 commandes précédentes peuvent renvoyer les sorties suivantes :

  • Si la fonctionnalité 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 est de 8 K, 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 Tio.

Pour récupérer les informations requises sur le tablespace à partir du langage de description de données (DDL), exécutez les commandes suivantes :

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

Augmenter la taille du tablespace

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

Toutefois, si vous activez la fonctionnalité autoextend, puis que vous redimensionnez le tablespace, vous devez effectuer les actions suivantes lors du redimensionnement :

  • Pour les tablespaces bigfile, exécutez la commande suivante pour redimensionner le tablespace :

    ALTER TABLESPACE example-tablespace RESIZE 50G;

    Remarque : Spécifiez la taille en kilooctets, mégaoctets, gigaoctets ou téraoctets. 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 plus d'informations, consultez la page ALTER TABLESPACE sur le site Web d'Oracle.

  • Pour les tablespaces smallfile, exécutez la commande suivante pour ajouter des fichiers de données afin d'augmenter la taille du tablespace :

    ALTER TABLESPACE example-tablespace ADD DATAFILE SIZE 1G AUTOEXTEND ON;
  • Pour les tablespaces smallfile, exécutez la commande suivante pour utiliser la procédure rdsadmin_util.resize_datafile afin de redimensionner un fichier de données d'origine :

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

    Remarque : Remplacez TEST par le nom du tablespace.

    Exemple de sortie de procédure :

    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 d'un tablespace smallfile

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

  1. Utilisez la procédure rdsadmin_util.resize_datafile.
    Remarque : Il n’est pas possible de réduire la taille d'un fichier de données à une valeur inférieure à la limite élevée du fichier de données.
  2. Créez un nouveau tablespace, puis configurez-le en fonction de vos besoins.
  3. Déplacez manuellement toutes vos données vers le nouveau tablespace.

Réduire la taille d'un tablespace bigfile

Si vous utilisez un tablespace bigfile, choisissez l'une des méthodes suivantes pour réduire sa taille.

Tablespaces permanents

Lorsque vous essayez de réduire la taille du tablespace permanent à une valeur inférieure à la limite élevée du tablespace, votre opération de redimensionnement échoue. Puis, vous recevez le message d’erreur suivant :

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

Si la taille du tablespace est supérieure à la limite, vous pouvez réduire la taille du tablespace permanent à la valeur limite.

Par exemple, si la limite élevée est de 40 Go et que la taille du tablespace est de 50 Go, réduisez le tablespace à 40 Go.

Exemple de commande pour redimensionner le tablespace :

ALTER TABLESPACE example-tablespace RESIZE 40G;

Si vous ne parvenez pas à réduire la taille du tablespace à une valeur égale à la valeur limite élevée, effectuez les actions suivantes :

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

Tablespaces temporaires

Exécutez la commande suivante pour réduire un tablespace temporaire :

ALTER TABLESPACE example-tablespace SHRINK SPACE KEEP 100M;

Pour redimensionner le tablespace temporaire dans un réplica en lecture, incluez rdsadmin.rdsadmin_util.resize_temp_tablespace dans la commande suivante :

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

Vous pouvez également créer un autre tablespace temporaire et définir le nouveau tablespace par défaut.

Procédez comme suit :

  1. Exécutez la requête suivante pour afficher le tablespace temporaire par défaut actuel :

    SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';

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

  2. Exécutez la commande suivante pour créer un autre tablespace temporaire et configurez la taille requise :

    CREATE TEMPORARY TABLESPACE example-tablespace TEMPFILE SIZE 100M;
  3. Exécutez la commande suivante pour définir le nouveau tablespace temporaire comme tablespace temporaire par défaut :

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

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

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

    SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS where USERNAME='example_username';
  2. Exécutez la commande suivante pour modifier le tablespace temporaire par défaut :

    ALTER USER example_username TEMPORARY TABLESPACE example-tablespace;

Tablespaces d’annulation

Procédez comme suit :

  1. Exécutez la requête suivante pour identifier le tablespace d'annulation actuellement utilisé :

    SHOW PARAMETER UNDO_TABLESPACE;
  2. Exécutez la commande suivante pour réduire la taille du tablespace d'annulation :

    `ALTER TABLESPACE example-tablespace RESIZE 40G;`

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

  1. Exécutez la commande suivante pour créer un nouveau tablespace d'annulation :

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

    Remarque : Remplacez example-new-tablespace par le nom du nouveau tablespace d'annulation.

  2. Exécutez la commande suivante pour définir le tablespace d'annulation comme tablespace par défaut dans les groupes de paramètres :

    UNDO_TABLESPACE = example-new-tablespace

    Remarque : UNDO_TABLESPACE étant un paramètre dynamique, aucune durée d’indisponibilité ne survient lorsque vous le modifiez. Cependant, il est recommandé de redémarrer l'instance de base de données après avoir modifié un paramètre. Pour plus d'informations, consultez la page Gestion des annulations sur le site Web d'Oracle.

  3. Exécutez la requête suivante pour vérifier que le nouveau tablespace d'annulation est le tablespace par défaut :

    SHOW PARAMETER UNDO_TABLESPACE;
  4. Exécutez la commande suivante pour supprimer l'ancien tablespace d'annulation :

    DROP TABLESPACE example-tablespace INCLUDING CONTENTS AND DATAFILES;

Informations connexes

Comment 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 ?