Oracle 11g Wie schätze ich den benötigten TEMP-Tablespace?

Wir führen ein erstes Massenladen einiger Tabellen durch (Quelle und Ziel sind Oracle 11g). Der Prozess ist wie folgt: 1. Abschneiden, 2. Löschen von Indizes (der PK und ein eindeutiger Index), 3. Masseneinfügen, 4. Erstellen von Indizes (erneut der PK und der eindeutige Index). Jetzt habe ich folgenden Fehler bekommen:

alter table TARGET_SCHEMA.MYBIGTABLE
add constraint PK_MYBIGTABLE primary key (MYBIGTABLE_PK)
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP

Offensichtlich ist der TEMP-Tabellenbereich für die PK-Erstellung zu klein (zu Ihrer Information: Die Tabelle enthält 6 Spalten und ungefähr 2,2 Milliarden Datensätze). Also habe ich das gemacht:

explain plan for
select line_1,line_2,line_3,line_4,line_5,line_6,count(*) as cnt
from SOURCE_SCHEMA.MYBIGTABLE
group by line_1,line_2,line_3,line_4,line_5,line_6;

select * from table( dbms_xplan.display );
/*
-----------------------------------------------------------------------------------------------
| Id  | Operation          | Name             | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |                  |  2274M|    63G|       |    16M  (2)| 00:05:06 |
|   1 |  HASH GROUP BY     |                  |  2274M|    63G|   102G|    16M  (2)| 00:05:06 |
|   2 |   TABLE ACCESS FULL| MYBIGTABLE       |  2274M|    63G|       |   744K  (7)| 00:00:14 |
-----------------------------------------------------------------------------------------------
*/

Bestimmt dies, wie viel TEMP-Tablespace für die PK-Erstellung benötigt wird (in meinem Fall 102 GB)? Oder würden Sie die Schätzung anders machen?

Zusätzlich: Die PK existiert nur auf dem Zielsystem. Aber fairer Punkt, also starte ich deine Abfrage auf der Ziel-PK:

explain plan for
select MYBIGTABLE_PK 
from TARGET_SCHEMA.MYBIGTABLE
group by MYBIGTABLE_PK ;

-------------------------------------------------------------------------------------------
| Id  | Operation          | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |                      |     1 |    13 |     3  (34)| 00:00:01 |
|   1 |  HASH GROUP BY     |                      |     1 |    13 |     3  (34)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| MYBIGTABLE           |     1 |    13 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------

Wie müsste ich das jetzt lesen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage