(в типичной конфигурации) каждый сеанс, который подключается к базе данных, получает свою собственную память PGA. Следовательно, каждый из этих сеансов может иметь свои собственные данные для глобальной временной таблицы (даже если эта таблица определена только один раз).
Session 1
SQL> create global temporary table GTT
2 ( x int, y int )
3 on commit preserve rows;
Table created.
SQL> insert into gtt values (1,2);
1 row created.
Session 2
SQL> select * from gtt;
no rows selected
Каждый сеанс имеет свои собственные "экземпляры" таблицы и свои данные. входит в область памяти для этого сеанса в одиночку. Итак, выше, сеанс 1 будет использовать несколько байтов PGA для своих 2 строк, а сеанс 2 не будет использовать байты для своей пустой таблицы.
В любом случае данные сохраняются в памяти до такой точки, какбаза данных решает, что слишком много PGA для этого сеанса используется. Затем данные сеансов начнут использовать временный сегмент на диске. Допустим, предел был «1 строка» (очевидно, его больше), тогда в приведенном выше примере сеанс 1 начал бы записывать на диск, а сеанс 2 - нет.
Надеюсь, что это поможет прояснить ситуацию.