Pourquoi mon instance de base de données Amazon RDS for Oracle utilise-t-elle plus d'espace de stockage que prévu ?
J’ai une instance de base de données Amazon Relational Database Service (Amazon RDS) for Oracle qui utilise plus d’espace que prévu. Je veux savoir si je peux libérer de l'espace sur l'instance.
Brève description
Plusieurs composants utilisent le stockage pour les instances Amazon RDS for Oracle. Ces composants incluent les tablespaces, les journaux d’archivage, les fichiers journaux, les fichiers de journaux redo en ligne et les fichiers de pompe à données.
Pour gérer la croissance du stockage dans votre instance, prenez les mesures suivantes pour identifier la quantité d'espace de stockage utilisée par vos composants :
- Déterminez la quantité d’espace allouée aux données dans tous les tablespaces, y compris des objets tels que des tablespaces temporaires.
- Vérifiez l’espace alloué aux journaux d’archivage ou aux fichiers de trace.
- Vérifiez l’allocation d’espace pour le répertoire des pompes à données.
Remarque : L’espace de stockage alloué à une instance RDS représente le volume de données. Lorsque vous créez une instance, Amazon RDS mappe le stockage alloué au volume de données. Ce processus utilise également un faible pourcentage d’espace de disque brut pour créer le système de fichiers en plus du volume de stockage physique.
Résolution
Créer un répertoire archivelog
Pour créer un répertoire archivelog, exécutez le code SQL suivant :
EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;
Trouver la quantité d’espace alloué aux données dans les tablespaces
Pour déterminer la répartition de l’espace alloué aux différents composants de la base de données Oracle, exécutez le code SQL suivant :
SET pages 200 SELECT '===========================================================' || CHR(10) || 'Total Database Physical Size = ' || ROUND(redolog_size_gib + dbfiles_size_gib + tempfiles_size_gib + archlog_size_gib + ctlfiles_size_gib, 2) || ' GiB' || CHR(10) || '===========================================================' || CHR(10) || ' Redo Logs Size : ' || ROUND(redolog_size_gib, 3) || ' GiB' || CHR(10) || ' Data Files Size : ' || ROUND(dbfiles_size_gib, 3) || ' GiB' || CHR(10) || ' Temp Files Size : ' || ROUND(tempfiles_size_gib, 3) || ' GiB' || CHR(10) || ' Archive Log Size : ' || ROUND(archlog_size_gib, 3) || ' GiB' || CHR(10) || ' Control Files Size : ' || ROUND(ctlfiles_size_gib, 3) || ' GiB' || CHR(10) || '===========================================================' || CHR(10) || ' Used Database Size : ' || used_db_size_gib || ' GiB' || CHR(10) || ' Free Database Size : ' || free_db_size_gib || ' GiB' || CHR(10) || ' Data Pump Directory Size : ' || dpump_db_size_gib || ' GiB' || CHR(10) || ' BDUMP Directory Size : ' || bdump_db_size_gib || ' GiB' || CHR(10) || ' ADUMP Directory Size : ' || adump_db_size_gib || ' GiB' || CHR(10) || '===========================================================' || CHR(10) || 'Total Size (including Dump and Log Files) = ' || ROUND(ROUND(redolog_size_gib, 2) + ROUND(dbfiles_size_gib, 2) + ROUND(tempfiles_size_gib, 2) + ROUND(archlog_size_gib, 2) + ROUND(ctlfiles_size_gib, 2) + ROUND(adump_db_size_gib, 2) + ROUND(dpump_db_size_gib, 2) + ROUND(bdump_db_size_gib, 2), 2) || ' GiB' || CHR(10) || '===========================================================' AS summary FROM (SELECT sys_context('USERENV', 'DB_NAME') db_name, (SELECT SUM(bytes) / 1024 / 1024 / 1024 redo_size FROM (SELECT bytes FROM v$log UNION ALL SELECT bytes FROM v$standby_log)) redolog_size_gib, (SELECT SUM(bytes) / 1024 / 1024 / 1024 data_size FROM dba_data_files) dbfiles_size_gib, (SELECT NVL(SUM(bytes), 0) / 1024 / 1024 / 1024 temp_size FROM dba_temp_files) tempfiles_size_gib, (SELECT ROUND(SUM(filesize) / 1024 / 1024 / 1024, 3) FROM TABLE(rdsadmin.rds_file_util.listdir('ARCHIVELOG_DIR'))) archlog_size_gib, (SELECT SUM(block_size * file_size_blks) / 1024 / 1024 / 1024 controlfile_size FROM v$controlfile) ctlfiles_size_gib, ROUND(SUM(used.bytes) / 1024 / 1024 / 1024, 3) db_size_gib, ROUND(SUM(used.bytes) / 1024 / 1024 / 1024, 3) - ROUND( free.f / 1024 / 1024 / 1024) used_db_size_gib, ROUND(free.f / 1024 / 1024 / 1024, 3) free_db_size_gib, (SELECT ROUND(SUM(filesize) / 1024 / 1024 / 1024, 3) FROM TABLE(rdsadmin.rds_file_util.listdir('BDUMP'))) bdump_db_size_gib, (SELECT ROUND(SUM(filesize) / 1024 / 1024 / 1024, 3) FROM TABLE(rdsadmin.rds_file_util.listdir('ADUMP'))) adump_db_size_gib, (SELECT ROUND(SUM(filesize) / 1024 / 1024 / 1024, 3) FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR'))) dpump_db_size_gib FROM (SELECT bytes FROM v$datafile UNION ALL SELECT bytes FROM v$tempfile) used, (SELECT SUM(bytes) AS f FROM dba_free_space) free GROUP BY free.f);
Pour déterminer la répartition de l'espace alloué aux différents répertoires utilisateur de la base de données Oracle, exécutez la commande suivante :
SET SERVEROUTPUT ON; DECLARE v_result NUMBER; v_directory_name VARCHAR2(100); BEGIN DBMS_OUTPUT.PUT_LINE(' '); DBMS_OUTPUT.PUT_LINE('------------------------------'); DBMS_OUTPUT.PUT_LINE('ADDITIONAL DIRECTORY FOUND IN DATABASE'); DBMS_OUTPUT.PUT_LINE('------------------------------'); FOR rec IN (SELECT directory_name, directory_path FROM dba_directories WHERE directory_name NOT IN ('OPATCH_INST_DIR','JAVA$JOX$CUJS$DIRECTORY$','RDS$TEMP','DATA_PUMP_DIR','ADUMP','RDS$DB_TASKS','OPATCH_SCRIPT_DIR','OPATCH_LOG_DIR','BDUMP','SDO_DIR_WORK','SDO_DIR_ADMIN','BDUMP_A') ) LOOP v_directory_name := rec.directory_name; -- Output directory details EXECUTE IMMEDIATE 'SELECT ROUND(SUM(filesize) / 1024 / 1024 / 1024, 3) FROM TABLE(rdsadmin.rds_file_util.listdir(''' || v_directory_name || '''))' INTO v_result; DBMS_OUTPUT.PUT_LINE('Directory Name: ' || rec.directory_name); DBMS_OUTPUT.PUT_LINE('Directory Path: ' || rec.directory_path); DBMS_OUTPUT.PUT_LINE('Total Size (GB) for ' || v_directory_name || ': ' || v_result); DBMS_OUTPUT.PUT_LINE('------------------------------'); END LOOP; END; /
Par défaut, les instances de base de données Amazon RDS for Oracle activent l’extension automatique pour tous les tablespaces. Cela inclut les tablespaces de données, les tablespaces UNDO et les tablespaces temporaires. Chaque type de tablespace s'agrandit pour accueillir davantage de données. Vos tablespaces s'agrandissent jusqu'à ce que vous n'ayez plus besoin de stockage ou que les tables utilisent tout l'espace de stockage alloué.
Redimensionner les tablespaces
Tablespace de données et tablespaces undo
Pour redimensionner les tablespaces de données et undo, consultez la section Comment redimensionner le tablespace de mon instance de base de données Amazon RDS for Oracle ?
Tablespace temporaire
Pour redimensionner les tablespaces temporaires, procédez comme suit :
-
Pour afficher des informations sur l’utilisation du tablespace temporaire, exécutez la requête suivante sur la vue DBA_TEMP_FREE_SPACE :
SELECT * FROM dba_temp_free_space;
-
Pour redimensionner le tablespace temporaire, exécutez la commande suivante en fonction de la sortie de la requête d'utilisation du tablespace :
ALTER TABLESPACE temp RESIZE 10G;
Remarque : Remplacez 10G par la quantité que vous souhaitez redimensionner. La commande précédente échoue lorsque l'espace de table alloué dépasse le seuil de 10 Go.
-
Si la commande précédente échoue, exécutez la commande suivante pour réduire l'espace dans le tablespace temporaire :
ALTER TABLESPACE temp SHRINK SPACE KEEP 10g;
-
Pour vérifier s'il existe des sessions de longue durée qui effectuent un tri actif sur le disque et ont alloué des segments temporaires, exécutez la commande suivante :
SELECT * FROM v$sort_usage;
-
Si la logique d'application vous permet de mettre fin à la session, mettez fin à la session. Une fois la session terminée, redimensionnez à nouveau le tablespace temporaire.
Si vous ne pouvez pas mettre fin à vos sessions, créez un tablespace temporaire. Après avoir créé le tablespace, définissez-le comme tablespace par défaut.
Supprimez ensuite le tablespace temporaire précédent :SELECT property_name, property_value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'; CREATE TEMPORARY TABLESPACE temp2; EXEC rdsadmin.rdsadmin_util.alter_default_temp_tablespace(tablespace_name => 'temp2'); SET pages 2000 COLUMN username FRO a30 SELECT username, TEMPORARY_TABLESPACE FROM dba_users; DROP TABLESPACE temp including contents and datafiles;
-
Si votre classe d'instance de base de données dispose d'un stockage SSD basé sur NVMe, créez des tablespaces temporaires Oracle dans un stockage d’instances pour économiser l'espace de stockage RDS. Pour plus d'informations, consultez la section Stockage de données temporaires dans un stockage d'instances RDS for Oracle.
Vérifier l’espace alloué aux journaux d’archivage ou aux fichiers de trace
Procédez comme suit :
-
Pour vérifier la conservation actuelle des journaux d'archivage, exécutez la commande SQL suivante :
SELECT value FROM rdsadmin.rds_configuration WHERE name ='archivelog retention hours';
Remarque : Dans les instances Amazon RDS for Oracle, par défaut, la conservation des journaux d’archivage est définie sur 0. Cela signifie qu’une fois les journaux d’archivage chargés sur Amazon S3, Amazon RDS les supprime automatiquement de l’hôte sous-jacent. Pour utiliser les journaux d'archivage avec d'autres services, tels qu'Oracle LogMiner ou GoldenGate, augmentez la conservation des journaux d'archivage.
-
Calculez l’espace utilisé par les journaux d’archivage sur l’hôte sous-jacent.
Tout d'abord, exécutez la commande suivante pour créer un répertoire archivelog :EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;
Puis, exécutez la commande suivante pour identifier la quantité d'espace utilisée par archivelog sur une instance RDS :
SELECT SUM(FILESIZE)/1024/1024/1024 archivelog_usage_GiB FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'ARCHIVELOG_DIR'));
-
Si l'espace alloué est supérieur à celui que vous attendez, mettez à jour la valeur de la politique de rétention. Puis, autorisez Amazon RDS Automation à effacer les anciens fichiers de journaux d’archivage.
L’exemple de commande suivant configure l’instance RDS for Oracle permettant de conserver les journaux d’archivage pendant 24 heures :BEGIN rdsadmin.rdsadmin_util.set_configuration(name => 'archivelog retention hours', value => '24'); END; / COMMIT;
Pour plus d'informations, consultez la section Purger les fichiers de trace.
Vérifier l’allocation d’espace pour le répertoire des pompes à données
Procédez comme suit :
-
Si l’espace alloué sur le répertoire de la pompe à données est plus important que prévu, recherchez les fichiers .dmp que vous pouvez supprimer. Exécutez la commande suivante :
SELECT * FROM TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY mtime;
-
Si la commande précédente trouve des fichiers .dmp, exécutez la commande suivante pour chaque fichier afin de les supprimer :
EXEC utl_file.fremove('DATA_PUMP_DIR', 'file_name');
Remarque : Dans la commande précédente, remplacez file_name par le nom de vos fichiers .dmp.
Informations connexes
Utilisation du stockage pour les instances de base de données Amazon RDS
Surveillance des métriques dans une instance Amazon RDS
L’instance de base de données Amazon RDS manque d’espace de stockage
Vidéos associées


Contenus pertinents
- demandé il y a 7 moislg...
- demandé il y a 2 moislg...
- demandé il y a 5 moislg...
- demandé il y a 4 moislg...
- AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 6 mois
- AWS OFFICIELA mis à jour il y a un mois