Oracle DB: Временные таблицы

Материал из sysadm
Перейти к навигации Перейти к поиску

Важные факты о временных таблицах

  • В отличие от постоянных таблиц, временной таблице не выделяется сегмент данных во время создания таблицы, он выделяется при первом добавлении данных.
  • Для временных таблиц запрещены операции DDL (кроме TRUNCATE), если есть хоть одна сессия связанная с данной таблицей
  • При откате данные временных таблиц всегда теряются
  • Временная таблица, зависящая от транзакции, одновременно допускает только одну транзакцию. При наличии нескольких автономных транзакций в пределах одной транзакции каждая автономная транзакция может использовать таблицу только после фиксации (commit) предыдущей транзакции.
  • Каждая сессия может видеть и изменять только собственные данные временной таблицы
  • не может быть партиционирована (particioned), кластеризована (clustered) или организована по индексу (index organized)
  • нельзя связывать поля с вторичными ключами (foreing keys)
  • нельзя создавать вложенные таблицы (nested table)
  • (???) нельзя использовать в описании временных таблиц следующие команды :LOB_storage_clause: TABLESPACE, storage_clause, или logging_clause
  • не поддерживается распаралеливание запросов
  • не поддерживаются распределенные тарнзакции

Области видимости временных таблиц

  • GLOBAL - постоянный объект базы данных, определение сохраняется на диске и видно всем сессиям, каждая сессия видит только свой набор данных.
  • PRIVATE - временный объект базы данных, сохраняется в памяти и виден только в рамках создавшей его сессии.

Типы временных таблиц

  • Transaction-specific (ON COMMIT DELETE ROWS) - данные таблицы хранятся до завершения транзакции
  • Session-specific (ON COMMIT PRESERVE ROWS) - данные таблицы хранятся до завершения сессии
  • cursor-duration - автоматически создаются базой данных для определенных типов запросов

Ссылки по теме: