Подтвердить что ты не робот

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

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

В чем разница между двумя?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

Демо от 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