Глобальная временная таблица Oracle/вопрос взаимодействия PHP

StackOverflow https://stackoverflow.com/questions/123039

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Как передаются данные:Предполагая постоянные соединения с Oracle через PHP с использованием oci8.Привязаны ли данные к идентификатору базы данных?это сделано на основе демонов Apache httpd?Или каждый отдельный запрос уникален?

Когда данные сеанса удаляются из глобальной временной таблицы?Я предполагаю (или, скорее, надеюсь), что это произойдет при выходе из php-скрипта.В качестве альтернативы, если нет, я предполагаю, что мне нужно будет удалить его перед выходом из сценария.

Это было полезно?

Решение

Глобальная временная таблица — это просто логическое определение структуры таблицы (имя, имена столбцов, типы данных столбцов и т. д.).Когда сеанс ссылается на него путем вставки данных, во временном табличном пространстве создается сегмент данных, в котором будут храниться только данные этого сеанса.Таким образом, разные сеансы могут ссылаться на одно и то же определение логической таблицы, поскольку каждый из них имеет свой собственный выделенный сегмент данных, который можно легко очистить при фиксации или при отключении сеанса, не затрагивая другие сеансы.

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

Полезной альтернативой GTT является предложение факторинга подзапроса («WITH»), в котором вы можете создать несколько отношений, которые могут ссылаться на отношения, ранее объявленные в этом операторе SQL.Они могут быть материализованы как сегменты данных во временном табличном пространстве либо автоматически Oracle, когда они превышают определенное использование памяти, либо вручную с помощью подсказки оптимизатора MATERIALIZE.

Другие советы

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

По крайней мере, я так думаю.:D

Как здесь написано:http://www.oracle-base.com/articles/8i/TemporaryTables.php

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

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

Извините за мой плохой английский.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top