Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Come posso ridimensionare il tablespace per la mia istanza database Amazon RDS per Oracle?
Voglio sapere come gestire o ridimensionare il tablespace per la mia istanza database Amazon Relational Database Service (Amazon RDS) per Oracle.
Breve descrizione
Il tipo di tablespace predefinito per le istanze database Amazon RDS per Oracle è bigfile. Non è consigliabile utilizzare tablespace smallfile per le istanze database RDS per Oracle.
Un'istanza database RDS per Oracle che utilizza un tablespace smallfile presenta le seguenti limitazioni:
- Non puoi eseguire il comando ALTER DATABASE per ridimensionare o modificare le configurazioni del file di dati. Per ulteriori informazioni, consulta Limitazioni per i privilegi DBA in RDS per Oracle.
- Devi gestire manualmente il parametro db_files per definire il numero massimo di file di dati nel database. Se il numero di file di dati è vicino alla sua quota, devi modificare il parametro db_files.
Quando crei tablespace e non specifichi una dimensione del file di dati, Amazon RDS attiva AUTOEXTEND ON per impostazione predefinita. La dimensione massima dei tablespace bigfile è 16 TiB. Quando inserisci dati nel tablespace, la dimensione del tablespace aumenta fino alla quota massima configurata o alla quota massima per lo spazio di archiviazione allocato.
Se lo spazio di archiviazione allocato per l'istanza database RDS per Oracle è pieno, l'istanza passa allo stato STORAGE_FULL e i tablespace non possono essere estesi. Per risolvere il problema, devi aggiungere spazio di archiviazione all'istanza. Per maggiori informazioni, consulta Come posso risolvere i problemi che si verificano quando le istanze database Amazon RDS esauriscono lo spazio di archiviazione?
Quando elimini dati da un tablespace, la dimensione del tablespace non diminuisce. Quando inserisci nuovi dati, puoi riutilizzare i blocchi liberi. Devi ridimensionare manualmente il tablespace per recuperare lo spazio inutilizzato.
Risoluzione
Nota: nei comandi seguenti, sostituisci TABLESPACE_NAME or example-tablespace con il nome del tuo tablespace.
Verifica la configurazione del tablespace
Per identificare il tipo di tablespace, esegui questa query:
SELECT TABLESPACE_NAME, CONTENTS, BIGFILE FROM DBA_TABLESPACES;
Il comando precedente potrebbe restituire il seguente output:
- La colonna BIGFILE può avere un valore YES per BIGFILE o NO per SMALL FILE.
- La colonna CONTENTS può essere permanente, undo o temporaneo.
Per verificare la dimensione del file di dati, la quota massima configurata e l'attivazione della funzionalità autoextend, esegui una di queste query.
Per i tablespace permanenti e undo, esegui questa query:
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;
Per i tablespace temporanei, esegui questa query:
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;
I comandi precedenti potrebbero restituire i seguenti output:
- Se la funzionalità autoextend non è attivata, il valore di MAX_GB è uguale a 0.
- Se il tipo di tablespace è smallfile, il valore MAX_GB dipende dalla dimensione del blocco utilizzata per creare il tablespace. Ad esempio, se la dimensione del blocco è 8 K, il valore MAX_GB è 32 GB. Per ulteriori informazioni, consulta Nonstandard block sizes (Dimensioni di blocco non standard) sul sito web Oracle.
- Se il tipo di tablespace è bigfile, il valore MAX_GB appare come 32 TB. La dimensione massima di un singolo file su RDS per le istanze database Oracle è 16 TiB.
Per recuperare le informazioni richieste sul tablespace dal linguaggio di descrizione dei dati (DDL), esegui questi comandi:
SET LINESIZE 400;
SET LONG 99999;
SELECT DBMS_METADATA.GET_DDL('TABLESPACE','example-tablespace') FROM DUAL;
Aumenta la dimensione del tablespace
Se attivi la funzionalità autoextend, non devi necessariamente aumentare la dimensione del tablespace.
Tuttavia, se attivi la funzionalità di autoextent e ridimensioni il tablespace, devi eseguire queste azioni durante il ridimensionamento:
-
Per i tablespace bigfile, esegui questo comando per ridimensionare il tablespace:
ALTER TABLESPACE example-tablespace RESIZE 50G;Nota: specifica la dimensione in kilobyte, megabyte, gigabyte o terabyte. Il tablespace bigfile ha un singolo file di dati e il comando ALTER TABLESPACE ridimensiona il file di dati che appartiene al tablespace. Per ulteriori informazioni, consulta ALTER TABLESPACE sul sito web Oracle.
-
Per i tablespace smallfile, esegui questo comando per aggiungere file di dati in modo da aumentare la dimensione del tablespace:
ALTER TABLESPACE example-tablespace ADD DATAFILE SIZE 1G AUTOEXTEND ON; -
Per i tablespace smallfile, esegui questo comando per utilizzare la procedura rdsadmin_util.resize_datafile in modo da poter ridimensionare un file di dati originale:
select file_id,file_name, bytes/1024/1024/1024 gb from dba_data_files where tablespace_name='TEST';Nota: sostituisci TEST con il nome del tablespace.
Esempio di output della procedura:
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
Riduci la dimensione di un tablespace smallfile
Per ridurre la dimensione di un tablespace smallfile, completa i seguenti passaggi:
- Utilizzare la procedura rdsadmin_util.resize_datafile.
Nota: non puoi ridurre la dimensione di un file di dati a un valore inferiore al high water mark del file di dati. - Crea un nuovo tablespace, quindi configura lo spazio in base alle esigenze.
- Sposta manualmente tutti i dati nel nuovo tablespace.
Riduci la dimensione di un tablespace bigfile
Se utilizzi un tablespace bigfile, scegli uno dei seguenti metodi per ridurre la dimensione del tablespace.
Tablespace permanenti
Quando tenti di ridurre la dimensione di un tablespace permanente a un valore inferiore al limite massimo del tablespace, l'operazione di ridimensionamento non riesce. In tal caso, ricevi il seguente errore:
"ORA-03297: file contains used data beyond requested RESIZE value."
Se la dimensione del tablespace è maggiore del water mark, puoi ridurre la dimensione del tablespace permanente al valore del water mark.
Ad esempio, se il high water mark è 40 GB e la dimensione del tablespace è 50 GB, riduci il tablespace a 40 GB.
Esempio di comando per ridimensionare il tablespace:
ALTER TABLESPACE example-tablespace RESIZE 40G;
Se non riesci a ridurre la dimensione del tablespace a un valore uguale al limite massimo, esegui queste azioni:
- Riorganizza gli oggetti nel tablespace.
- Crea un nuovo tablespace e sposta tutti gli oggetti nel nuovo tablespace. Quindi elimina il vecchio tablespace.
Tablespace temporanei
Esegui questo comando per ridurre un tablespace temporaneo:
ALTER TABLESPACE example-tablespace SHRINK SPACE KEEP 100M;
Per ridimensionare il tablespace temporaneo in una replica in lettura, includi rdsadmin.rdsadmin_util.resize_temp_tablespace in questo comando:
EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('example-tablespace','100M');
Oppure crea un altro tablespace temporaneo e imposta il nuovo tablespace come predefinito.
Completa i seguenti passaggi:
-
Esegui questa query per visualizzare il tablespace temporaneo predefinito corrente:
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';Nota: per ulteriori informazioni, consulta Viewing information about tablespaces (Visualizzazione delle informazioni sui tablespace) sul sito web Oracle.
-
Esegui questo comando per creare un altro tablespace temporaneo e configurare la dimensione richiesta:
CREATE TEMPORARY TABLESPACE example-tablespace TEMPFILE SIZE 100M; -
Esegui questo comando per impostare il nuovo tablespace temporaneo come tablespace temporaneo predefinito:
EXEC RDSADMIN.RDSADMIN_UTIL.ALTER_DEFAULT_TEMP_TABLESPACE(TABLESPACE_NAME => 'example-tablespace');
Per modificare un tablespace temporaneo per un utente specifico, completa i seguenti passaggi:
-
Esegui questa query per visualizzare il tablespace temporaneo predefinito corrente per l'utente:
SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS where USERNAME='example_username'; -
Esegui questo comando per modificare il tablespace temporaneo predefinito:
ALTER USER example_username TEMPORARY TABLESPACE example-tablespace;
Tablespace undo
Completa i seguenti passaggi:
-
Esegui questa query per identificare il tablespace undo attualmente in uso:
SHOW PARAMETER UNDO_TABLESPACE; -
Esegui questo comando per ridurre la dimensione del tablespace undo:
`ALTER TABLESPACE example-tablespace RESIZE 40G;`
Se la query non viene eseguita, completa i seguenti passaggi:
-
Esegui questo comando per creare un nuovo tablespace undo:
CREATE UNDO TABLESPACE example-new-tablespace DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 100G;Nota: sostituisci example-new-tablespace con il nome del nuovo tablespace undo.
-
Esegui questo comando per impostare il tablespace undo come tablespace predefinito nei gruppi di parametri:
UNDO_TABLESPACE = example-new-tablespaceNota: poiché UNDO_TABLESPACE è un parametro dinamico, non si verificano tempi di inattività quando lo modifichi. Tuttavia, è consigliabile riavviare l'istanza database dopo aver modificato un parametro. Per ulteriori informazioni, consulta Managing undo (Gestione dell'undo) sul sito web Oracle.
-
Esegui questa query per verificare che il nuovo parametro undo tablespace sia il tablespace predefinito:
SHOW PARAMETER UNDO_TABLESPACE; -
Esegui questo comando per eliminare il vecchio tablespace undo:
DROP TABLESPACE example-tablespace INCLUDING CONTENTS AND DATAFILES;
Informazioni correlate
- Lingua
- Italiano
Video correlati

