Perché la mia istanza database Amazon RDS per Oracle utilizza più spazio di archiviazione del previsto?
Ho un'istanza database Amazon Relational Database Service (Amazon RDS) per Oracle che utilizza più spazio del previsto. Desidero sapere se posso liberare spazio nell'istanza.
Breve descrizione
Più componenti utilizzano l'archiviazione per le istanze Amazon RDS per Oracle. Tra questi rientrano i tablespace, i log di archivio, i file dei log, i file dei log redo online e i file di data pump.
Per gestire l'aumento di dimensioni dell’archiviazione nell'istanza, intraprendi le seguenti azioni per identificare la quantità di spazio di archiviazione utilizzata dai componenti:
- Individua la quantità di spazio allocata ai dati in tutti i tablespace, compresi oggetti come i tablespace temporanei.
- Controlla lo spazio allocato ai log di archivio o ai file di traccia.
- Controlla lo spazio allocato alla directory data pump.
Nota: lo spazio di archiviazione allocato a un'istanza RDS rappresenta il volume di dati. Quando crei un'istanza, Amazon RDS associa l'archiviazione allocata al volume di dati. Questo processo utilizza anche una piccola percentuale dello spazio su disco non allocato per creare il filesystem oltre al volume di archiviazione fisico.
Risoluzione
Crea una directory archivelog
Per creare una directory archivelog, esegui questo codice SQL:
EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;
Individua la quantità di spazio allocata ai dati nei tablespace
Per determinare la distribuzione dello spazio allocato ai diversi componenti del database Oracle, esegui questo codice SQL:
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);
Per determinare la distribuzione dello spazio allocato a diverse directory utente del database Oracle, esegui questo comando:
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; /
Per impostazione predefinita, le istanze database Amazon RDS per Oracle attivano l'estensione automatica per tutti i tablespace. Tra questi rientrano i tablespace di dati, i tablespace undo e i tablespace temporanei. Ogni tipo di tablespace aumenta di dimensioni per contenere più dati. I tablespace aumentano di dimensioni fino a quando non hai bisogno di più spazio di archiviazione o finché le tabelle non utilizzano tutto lo spazio di archiviazione allocato.
Ridimensiona i tablespace
Tablespace di dati e tablespace undo
Per ridimensionare i tablespace di dati e i tablespace undo, consulta Come posso ridimensionare il tablespace per la mia istanza database Amazon RDS per Oracle?
Tablespace temporaneo
Per ridimensionare i tablespace temporanei, completa i seguenti passaggi:
-
Per visualizzare informazioni sull'utilizzo dei tablespace temporanei, esegui questo comando nella vista DBA_TEMP_FREE_SPACE:
SELECT * FROM dba_temp_free_space;
-
Per ridimensionare il tablespace temporaneo, esegui questo comando in base all'output della query sull'utilizzo del tablespace:
ALTER TABLESPACE temp RESIZE 10G;
Nota: sostituisci 10G con la dimensione che desideri impostare. Il comando precedente ha esito negativo quando il tablespace allocato supera la soglia di 10 GB.
-
Se il comando precedente ha esito negativo, esegui questo comando per ridurre lo spazio nel tablespace temporaneo:
ALTER TABLESPACE temp SHRINK SPACE KEEP 10g;
-
Per verificare la presenza di sessioni di lunga durata che eseguono l'ordinamento attivo su disco e hanno allocato segmenti temporanei, esegui questo comando:
SELECT * FROM v$sort_usage;
-
Se la logica dell'applicazione consente di terminare la sessione, termina la sessione. Al termine della sessione, ridimensiona nuovamente il tablespace temporaneo.
Se non riesci a terminare le sessioni, crea un nuovo tablespace temporaneo. Dopo aver creato il tablespace, impostalo come tablespace predefinito.
Quindi rimuovi il tablespace temporaneo precedente: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;
-
Se la classe dell'istanza database dispone di un'archiviazione SSD basata su NVMe, crea tablespace temporanei Oracle in un archivio dell'istanza per risparmiare spazio di archiviazione RDS. Per ulteriori informazioni, consulta Archiviazione di dati temporanei in un instance store RDS per Oracle.
Controlla l'allocazione dello spazio per i log di archivio o i file di traccia
Completa i seguenti passaggi:
-
Per verificare la conservazione corrente del log di archivio, esegui questo comando SQL:
SELECT value FROM rdsadmin.rds_configuration WHERE name ='archivelog retention hours';
Nota: nelle istanze Amazon RDS per Oracle, la conservazione dei log di archivio è impostata su 0 per impostazione predefinita. Dopo il caricamento dei log di archivio in Amazon S3, Amazon RDS elimina automaticamente i log dall'host sottostante. Per utilizzare i log di archivio con altri servizi, come Oracle LogMiner o GoldenGate, aumenta la conservazione dei log di archivio.
-
Calcola lo spazio utilizzato dai log di archivio nell'host sottostante.
Innanzitutto, esegui questo comando per creare una directory archivelog:EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;
Quindi esegui questo comando per identificare lo spazio utilizzato dal log di archivio in un'istanza RDS:
SELECT SUM(FILESIZE)/1024/1024/1024 archivelog_usage_GiB FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'ARCHIVELOG_DIR'));
-
Se lo spazio allocato è superiore a quello previsto, aggiorna il valore della policy di conservazione. Quindi consenti all'automazione Amazon RDS di cancellare i file dei log di archivio meno recenti.
Il seguente esempio di comando configura l'istanza RDS per Oracle in modo che 24 ore di log di archivio:BEGIN rdsadmin.rdsadmin_util.set_configuration(name => 'archivelog retention hours', value => '24'); END; / COMMIT;
Per ulteriori informazioni, consulta Eliminazione di file di traccia.
Controlla l'allocazione dello spazio per la directory data pump
Completa i seguenti passaggi:
-
Se lo spazio allocato nella directory data pump è superiore a quello previsto, individua i file .dmp che puoi rimuovere. Esegui questo comando:
SELECT * FROM TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER BY mtime;
-
Se il comando precedente individua file .dmp, eliminali eseguendo questo comando per ogni file:
EXEC utl_file.fremove('DATA_PUMP_DIR', 'file_name');
Nota: nel comando precedente, sostituisci file_name con i nomi dei tuoi file .dmp.
Informazioni correlate
Utilizzo dello storage per le istanze DB di Amazon RDS
Video correlati


Contenuto pertinente
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 10 mesi fa
- AWS UFFICIALEAggiornata 4 mesi fa
- AWS UFFICIALEAggiornata un mese fa