Меню

Введение во временные табличные пространства Oracle и временные таблицы

Русские Блоги

Введение во временные табличные пространства Oracle и временные таблицы

Содержание и роль временного табличного пространства
  1. Промежуточный отсортированный результат
  2. Временные таблицы и временные индексы
  3. Временные рабочие места
  4. Временные деревья

Временные табличные пространства содержат некоторые временные данные и используются только в течение короткого времени. Как правило, временные табличные пространства используются чаще при операциях сортировки и при создании временных таблиц. После запуска базы данных по умолчанию создается временное табличное пространство с именем TEMP. После закрытия базы данных содержимое временного табличного пространства автоматически освобождается. Вы также можете использовать инструкцию create tablespace для создания временного табличного пространства вручную. Временное табличное пространство может совместно использоваться несколькими пользователями.

Используйте следующую инструкцию для изменения временного табличного пространства базы данных:

Следующий оператор может запросить имя табличного пространства по умолчанию для базы данных

Когда операция сортировки завершена, экстенты не будут освобождены, но помечены как свободные, а затем повторно использованы для других операций сортировки. Вы можете запросить DBA_TEMP_FREE_SPACE, чтобы увидеть общее выделенное пространство и свободное пространство. Вы также можете вручную уменьшить временные табличные пространства, управляемые локально. Следующие две команды представляют собой операторы для сжатия файлов табличного пространства и временных данных табличного пространства.Размер, указанный параметром keep, будет уменьшен до минимума, если он пропущен и не записан.

Создать локально управляемое временное табличное пространство

Вы можете запросить представления V $ TEMPFILE и DBA_TEMP_FILES, чтобы просмотреть файлы данных временного табличного пространства.

Следующий оператор указывает, что экстент равен 16 МБ (если блок равен 2 КБ, то есть 8000 блоков), временное табличное пространство размером 20 МБ.

Временная группа табличных пространств

Введение группы временных табличных пространств:

  1. Содержать хотя бы одно временное табличное пространство, максимальное количество временных табличных пространств, содержащихся в группе, не ограничено
  2. Имя общего табличного пространства, поэтому оно не может совпадать с именем любого табличного пространства.
  3. При назначении временного табличного пространства по умолчанию для базы данных или временного табличного пространства для пользователя вы можете указать имя группы табличных пространств в любом месте.

Просмотр DBA_TABLESPACE_GROUPS позволяет просматривать связанную с ним информацию.
В следующем примере, если не существует ни group1, ни group2, вы можете использовать оператор create для создания группы, указанной группой tablespace, или вы можете указать группу с помощью оператора alter tablespace.

Вы можете добавить временное табличное пространство во временную группу табличных пространств с помощью следующего оператора. Следующий оператор добавляет Imtemp3 к group 1. В сочетании с приведенным выше оператором group1 содержит lmtemp2 и lmtemp3

Group2 теперь содержит Imtemp и Imtemp2

Удалить временное табличное пространство из группы

Назначьте временную группу табличных пространств в качестве временной табличной области по умолчанию

Если вы указываете временную группу табличных пространств в качестве временной табличной области по умолчанию в базе данных, вы не можете напрямую удалять членов временной группы табличных пространств, вы должны сначала удалить ее из группы временных табличных пространств. Точно так же нельзя удалить одно временное табличное пространство по умолчанию в базе данных.

Создать временную таблицу

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

Используйте инструкцию CREATE GLOBAL TEMPORARY TABLE, чтобы создать временную таблицу. Предложение ON COMMIT указывает, являются ли данные в таблице уровнем транзакции (по умолчанию) или уровнем сеанса, и его значение таково:


Объяснение:
DELETE ROWS создает временную таблицу на основе транзакций. После каждого коммита база данных усекает таблицу (удаляет все строки).
PRESERVE ROWS Создать временную таблицу на основе сеанса; по окончании сеанса обрезать таблицу.

Создайте временную таблицу вещей следующим образом:

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

По умолчанию строки во временной таблице хранятся во временном табличном пространстве по умолчанию пользователя, который ее создал. Однако после создания временной таблицы вы можете использовать предложение TABLESPACE CREATE GLOBAL TEMPORARY TABLE, чтобы выделить временную таблицу другому табличному пространству. Вы можете использовать эту функцию для экономии места, используемого временными таблицами. Таким образом, операции сортировки и временные таблицы хранятся отдельно, чтобы избежать ненужных конфликтов и снижения производительности.

Читайте также:  Таблица для глаз темные

Выполните следующее: создайте временное табличное пространство tbs_t1, а затем используйте временную таблицу admin_work_area

Источник

База данных Oracle Database для начинающих: основы базы данных

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

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

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

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

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

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

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

Ниже перечислены некоторые привлекательные свойства временных таблиц с точки зрения администратора баз данных Oracle.

  • Временные таблицы существенно сокращают объем действий, связанных с журналами повторного выполнения, которые генерируются транзакциями. Журналы повторного выполнения заполняются не так быстро при использовании временных таблиц во время сложных транзакций.
  • Временные таблицы могут быть проиндексированы для повышения производительности.
  • Сеансы могут обновлять, вставлять и удалять данные во временных таблицах точно так же, как и в постоянных.
  • Данные автоматически удаляются из временной таблицы по окончании сеанса или транзакции.
  • На временных таблицах можно определять ограничения.
  • Разные пользователи могут обращаться к одной и той же временной таблице, причем каждый из них видит данные только своего собственного сеанса.
  • Временные таблицы обеспечивают эффективный доступ к данным, поскольку сложные запросы не приходится выполнять многократно.
  • Минимальный объем блокировок временных таблицы означает более эффективную обработку запросов.
  • Структура таблицы сохраняется после удаления данных, что помогает их использовать в будущем.

Создание временной таблицы сеанса

Рассмотрим пример создания временной таблицы Oracle Database на SQL, которая существует на протяжении сеанса; для этого используется опция ON COMMIT DELETE ROWS:

Опция ON COMMIT PRESERVE ROWS в предыдущем примере указывает на то, что данные таблицы сохраняются на протяжении сеанса, а не на протяжении транзакции.

Создание временной таблицы транзакции

В отличие от временной таблицы сеанса, временные таблицы транзакций специфичны для отдельной транзакции. Как только транзакция фиксируется или откатывается, данные из этой таблицы удаляются. Как создать временную таблицу транзакции на языке SQL рассмотрим на примере:

Опция ON COMMIT DELETE ROWS ясно указывает на то, что данные в этой таблице должны оставаться только на протяжении транзакции, использующей эту временную таблицу.

Источник



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

добавлено: 14 окт 12
понравилось:0
просмотров: 83969
комментов: 0

Что же такое временные таблицы, и зачем они нужны?
Давайте разберемся.
Временные таблицы используются в Oracle для хранения данных, которые относятся к одной сессии или одной транзакции.
Причем применение Oracle временных таблиц существенно отличается от применения временных таблиц в том же MS SQL. ORACLE временная таблица это тот же DDL обьект со всеми ограничениями , в MS SQL подобных ограничений нет.
итак подробнее

Читайте также:  ПРИМЕРЫ ОТКРЫТИЯ БУХГАЛТЕРСКИХ СЧЕТОВ

Так, например, целесообразно использовать временные таблицы для хранения данных об открытых неким клиентским приложением или процессом файлах, об открытых дочерних формах. Можно так же сохранять во временных таблицах, данные матриц преобразований в сложных математических задачах.

в общем, временные таблицы(GLOBAL TEMPORARY), а отличие от таблиц регулярных целесообразно использовать в тех случаях , когда сохраняемые данные часто изменяются, и непостоянны.

Временные таблицы (GLOBAL TEMPORARY TABLE) отличаются от обычных регулярных таблиц тем, что эти таблицы предназначены только для хранения временных для некоторой сессии данных.
Данные во временной таблицы будут видны только в той сессии, которая вставила эти данные в таблицу.

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

Место в соответствующем сегменте под данные, выделяется динамически, в момент обращения первой команды манипулирования данными — DML (select, insert, update) к этой временной таблице.

Временная таблица описывается таким же образом, что и обычная регулярная таблица, но сегменты таблицы, и все данные такой таблицы, подразделяются :
— данные используемые только в данной сессии
— или же данные используемые только в данной транзакции

Специфику поведения данных относительно сессии определяет ключевые слова ON COMMIT и ON PRESERVE в команде CREATE TABLE

Можно использовать операторы определения данных DDL такие как ( ) для временных таблиц, но только тогда когда сессия не обращается к временной таблице, не связана с ней. Сессия связана с временной таблицей и при выполнении команды INSERT над данными таблицы.

Существует несколько способов, чтобы сделать сессию несвязанной с временной таблицей:
1. Использовать команду truncate для данной таблицы.
2. Аннулировать данную сессию
3. Использовать команды фиксации работы транзакции COMMIT или ROLLBACK

Ограничения для временных таблиц в ORACLE
На временные таблицы в ORACLE распространяются следующие ограничения :
1. Временная таблица в Oracle не может быть партицирована particioned, кластеризована clustered, или быть организованной по индексу index organized.
2. Нельзя связывать вторичные ключи с колонками временной таблицы
3. Временная таблица не может включать в себя вложенных таблиц (nested table)
4. Нельзя использовать в описании временных таблиц следующие команды :LOB_storage_clause: TABLESPACE, storage_clause, или logging_clause
5. Подсказка Parallel и параллельные запросы не поддерживаются во временных таблицах
6. Распределенные транзакции так же не могут работать с временными таблицами
7. Сегментирование не работает в временных таблицах

Создание временной таблицы
Синтаксис для создания временных таблиц практически аналогичен синтаксису для создания регулярных таблиц, но есть некоторые операторы, которые используются только для временных таблиц:
ОN COMMIT DELETE ROWS используется во временных таблицах, данные которой существуют в пределах одной транзакции.

Oracle удаляет все строки — все данные из временной таблицы после завершения транзакции, после выполнения команды COMMIT.
Данная инструкция подразумевается по умолчанию, то есть при создании временной таблицы — она всегда будет ОN COMMIT DELETE ROWS

ОN COMMIT PRESERVE ROWS используется во временных таблицах, данные которой существуют в пределах одной сессии. СУБД Oracle удаляет все строки из временной таблицы — очищает таблицу после завершения сессии.

Данные примеры продемонстрируют создание и использование временных таблиц, отличия временных таблиц ОN COMMIT DELETE ROWS и ОN COMMIT PRESERVE ROWS, отличие временных таблиц от таблиц регулярных.

Все примеры построены на основе стандартной демонстрационной схемы SCOTT БД ORACLE

Пример создания временной таблицы:

Данный пример демонстрирует создание временной таблицы, данные которой, относятся к сессии.

Пример создания временной таблицы с использованием запроса

Данный пример демонстрирует создание временной таблицы на основе запроса, заполненные данные для этой таблицы актуальны только для текущей сессии. Если попробовать прочитать таблицу min_salesemp из другой сессий, то таблица будет пустой.

Пример создания временной таблицы с объектным типом колонки

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

Использование индексов во временных таблицах

Данный пример показывает, что во временных таблицах можно использовать индексы и ограничения — CONSTRAINT , как и в регулярных таблицах.
Отличие временной таблицы от таблицы регулярной
Демонстрация отличия временной таблицы, от таблицы регулярной.
Соединяемся с БД, создаем две таблицы
временную

Читайте также:  Схема подкормок цветов ПАМЯТКА дачнику цветоводу

— Не будем нагружать скрипты излишним синтаксисом
Добавляем данные

Выполняем запрос к временной таблице
Результат

1
2
3

к регулярной таблице
Результат

1
2
3

Закрываем сессию, соединяемся с БД снова. Выполняем запрос к временной таблице
Результат

К регулярной таблице
Результат

1
2
3

Итак, данные во временной таблице сохраняются только в текущей сессии или транзакции в зависимости от выражения ON COMMIT в скрипте создания таблицы.

Отличие временной таблицы ОN COMMIT PRESERVE ROWS от временной таблицы ОN COMMIT DELETE ROWS
Создаем две таблицы ON COMMIT PRESERVE ROWS
Добавляем данные в созданные таблицы
Смотрим

Результат запроса

1
2
3

Выполняем команду COMMIT после чего вновь выполняем запросы

Результат запроса

1
2
3

Результат запроса

Источник

Создание процедуры с временными таблицами

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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

C# и работа с временными таблицами
Добрый вечер. Недели 2 назад решил изучать c#, начал с .net Недавно возникла следующая проблема.

Работа с временными таблицами в VB6.0 + MS Access 20*
Добрый день, формучане. Во время реализации проекта по разработке базы данных склада на Visual.

Разработать приложение, содержащее процедуры, реализующие основные операции над таблицами
Разработать приложение, содержащее процедуры, реализующие основные операции над таблицами.

Сообщение от АЛКС
Сообщение от АЛКС

Создание временной таблицы — CREATE GLOBAL TEMPORARY TABLE.
Работа практически такая же, как с обычной таблицей, за исключением нескольких моментов:
1. данные из таблицы удаляются автоматом при завершении транзакции или при завершении сессии (зависит от опций создания). Хотя при необходимости можно явно выполнить DELETE или TRUNCATE.
2. если с таблицей работают несколько сессий, то у каждой свои данные в этой таблице, общее — только структура таблицы.

Добавлено через 1 минуту

Сообщение от АЛКС

Grossmeister, да, подразумевается также интеграция с BI системами, переменные будут всегда

Ps/ на ms sql подключался к ssrs — запросом ссылаясь на таблицы или процедуры — переменные есть всегда (выбор пользователя д.б.)

Сообщение от АЛКС

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

PS
В SQL-запросе процедура вызываться не может, только функция и то с опред. ограничениями.

вызывал так exec наименование процедуры @per1 = 1, @per2 = 2
м.б. пожалуйста можете продемонстрировать как может выглядеть процедура по выше приведенному примеру

PS/ смысл временных таблиц в использовании — это прежде всего скорость, без временных таблиц бы мог написать через with но потеря в скорости

Сообщение от АЛКС

Grossmeister, да, с большими объемами дольше все грузится, а если есть вычисления на каком либо из этапов то лучше разбивать запрос на несколько частей через временные таблицы (запрос в запросе долго с расчетами)

Можете продемонстрировать, например по выше приведенному примеру если вынести создание этих 2 таблиц, то в запросе д.б. вставка данных какая-то и предварительное удаление данных в этих таблицах и как потом это все собрать без потери скорости обработки данных и в конечном счете отразить информацию?

Сообщение от АЛКС

т.е. точно также, как и в обычную таблицу.
Еще раз — синтаксис SQL при работе с обычными и временными таблицами НЕ ОТЛИЧАЕТСЯ от слова совсем.

По поводу удаления — если нужно, чтобы после каждого отчета таблица очищалась, то можно либо использовать TRUNCATE, либо создать таблицу с опцией ON COMMIT DELETE ROWS и после окончания отчета выдавать COMMIT / ROLLBACK

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

вот это например чтоб не писать постоянно

Добавлено через 43 минуты
Grossmeister, через процедуру получается, но при параллельной очистки таблицы выбивает ошибку

Добавлено через 2 часа 0 минут
Grossmeister, Спасибо!, решил через execute immediate, теперь запуском процедуры очищается таблица и данные затем добавляются

Источник