В чем разница между временной таблицей и глобальной временной таблицей в Oracle?

Я слышал, что эти два термина «временная таблица» и «глобальная временная таблица» используются почти в одном контексте.

Какая разница между двумя?


person MOZILLA    schedule 06.01.2009    source источник
comment
Полезно знать: в Oracle можно создавать индексы для глобальных временных таблиц.   -  person tuinstoel    schedule 07.01.2009
comment
также полезно знать: индексы, уже созданные для существующей (постоянной) таблицы, добавляются автоматически при выполнении CREATE GLOBAL TEMPORARY TABLE AS SELECT из индексированной таблицы.   -  person noogrub    schedule 17.11.2011


Ответы (6)


В Oracle нет никакой разницы. Когда вы создаете временную таблицу в базе данных Oracle, она автоматически становится глобальной, и вам необходимо включить ключевое слово «Глобальная».

Стандарт SQL, который определяет, как интерпретируется термин «ГЛОБАЛЬНАЯ ВРЕМЕННАЯ ТАБЛИЦА», допускает либо ЛОКАЛЬНУЮ, либо ГЛОБАЛЬНУЮ область действия. Это позволит использовать таблицу для конкретного пользователя (LOCAL) или для всех (GLOBAL). Oracle реализует только ГЛОБАЛЬНУЮ версию.

Данные, которые вы помещаете во временную таблицу Oracle, зависят от вашего сеанса. То есть только вы можете видеть свои данные, даже если 100 пользователей используют одну и ту же таблицу, и ваши данные удаляются из таблицы при отключении (или при совершении текущей транзакции) в зависимости от настроек таблицы.

Сравните это с MS SQL-Server, где временные таблицы являются локальными. Если вы создадите ее, никто, кроме вас, не узнает, что ваша временная таблица существует. В Oracle создание временной таблицы позволяет всем (точнее, всем, у кого есть доступ к вашей схеме) видеть таблицу. Когда вы выходите из сеанса, таблица SQL-Server удаляется, и ее необходимо будет создать заново для следующего сеанса. В Oracle временная таблица теперь является постоянной частью вашей схемы, даже если данные ею не являются.

person Thomas Jones-Low    schedule 06.01.2009
comment
А... понял. Informix предоставляет локальные временные таблицы; вы должны создавать их в каждом сеансе, но это может сделать любой. Глобальная временная таблица избавляет вас от необходимости создавать таблицу в каждом сеансе; он «существует», но он пуст, и его содержимое уникально (и приватно) для каждого сеанса. Спасибо. - person Jonathan Leffler; 07.01.2009

Сравните это с MS SQL-Server, где временные таблицы являются локальными. Если вы создадите ее, никто, кроме вас, не узнает, что ваша временная таблица существует. В Oracle создание временной таблицы позволяет всем (точнее, всем, у кого есть доступ к вашей схеме) видеть таблицу. Когда вы выходите из сеанса, таблица SQL-Server удаляется, и ее необходимо будет создать заново для следующего сеанса. В Oracle временная таблица теперь является постоянной частью вашей схемы, даже если данные не являются (если нет, вы можете решить, сохранять ли ее). Oracle поддерживает только глобальную временную таблицу, что избавляет вас от необходимости создавать таблицу в каждом сеансе; он «существует», но он пуст, и его содержимое уникально (и приватно) для каждого сеанса.

person Joby Thomas    schedule 30.04.2010
comment
На нашем предприятии мы считаем целесообразным УДАЛИТЬ, а затем повторно СОЗДАТЬ глобальную временную таблицу для наших целей отчетности (мы используем SQR), поскольку используемые нами временные таблицы создаются КАК ВЫБРАТЬ из других таблиц в системе. Если эти таблицы изменятся, то мы уверены, что наши временные таблицы им соответствуют. - person noogrub; 17.11.2011

Имейте в виду, что глобальная временная таблица не имеет связанной с ней статистики, поэтому проверьте, должен ли быть установлен уровень динамической выборки для экземпляра, чтобы обеспечить выборку неанализируемых таблиц во время синтаксического анализа. В противном случае эвристика может привести к скверному плану выполнения.

person David Aldridge    schedule 07.01.2009

Просто чтобы добавить к существующим ответам о локальных и глобальных временных таблицах, от Oracle 18c будет действительно Частные временные таблицы:

Частные временные таблицы — это временные объекты базы данных, которые автоматически удаляются в конце транзакции или сеанса. Частная временная таблица хранится в памяти и видна только для создавшего ее сеанса.

Частная временная таблица ограничивает область действия временной таблицы сеансом или транзакцией, обеспечивая тем самым большую гибкость в кодировании приложений, упрощая обслуживание кода и улучшая готовые к использованию функциональные возможности.

Демонстрация из Oracle Live SQL: частные временные таблицы 18c:

-- Private temporary tables must be prefixed as per the database parameter 
-- 'private_temp_table_prefix' 

create private temporary table ORA$PTT_MY_TT ( x int );

-- The table is truly private. 
-- It does not even exist in the the data dictionary, only your session 

-- By default, the moment you commit, the table ceases to exist 
commit;

select * from ORA$PTT_MY_TT;
-- ORA-00942: table or view does not exist

-- This can be changed by specifying that the definition should be preserved 
create private temporary table ORA$PTT_MY_TT ( x int )  
on commit preserve definition;

insert into ORA$PTT_MY_TT  
select rownum from dual  
connect by level <= 30;

commit;

select count(*) from ORA$PTT_MY_TT;
-- 30 

демонстрация db‹›fiddle

person Lukasz Szozda    schedule 18.02.2018

Кроме того, временные таблицы Oracle (глобальные) очень полезны, когда каждому из ваших пользователей/сеансов необходимо видеть разные наборы данных. Просто ВСТАВЬТЕ записи в свою глобальную временную таблицу и позвольте Oracle управлять набором одного пользователя от другого, а также очисткой. Вам не нужно запрашивать их с идентификатором пользователя, идентификатором сеанса или чем-то еще.

Мы находим их очень удобными.

person Stew S    schedule 07.01.2009

Там нет временной таблицы, только глобальная временная таблица. Идея глобальной временной таблицы заключается в том, что определение существует и может быть просмотрено всеми, но данные являются частными для каждого сеанса. Вы также можете настроить, очищаются ли данные при фиксации или только после завершения сеанса.

person Nisar    schedule 05.06.2014