Oracle изменить глобальную временную таблицу - PullRequest
0 голосов
/ 21 февраля 2019

https://community.oracle.com/message/15070384#15070384

Приветствие Уважаемое сообщество.

Когда мы пытаемся изменить DDL глобальной временной таблицы.Это не позволяет нам даже сессию давно уйти.

Это ошибка ??

Мы используем GTT в приложении с тяжелыми транзакциями с очень высоким требованием времени.

Так что в реальном prd у нас была бы проблема, если бы это происходило все время.

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 0  
PL/SQL Release 12.1.0.2.0 - Production 0  
"CORE 12.1.0.2.0 Production" 0  
TNS for IBM/AIX RISC System/6000: Version 12.1.0.2.0 - Production 0  
NLSRTL Version 12.1.0.2.0 - Production 0


Error starting at line : 27 in command -  
alter table TMP_REPAIR_TRIGGER_ANSWER add (ANSWER_PHRASE varchar2(4000))  
Error report -  
ORA-14450: attempt to access a transactional temp table already in use  
14450. 00000 -  "attempt to access a transactional temp table already in use"  
*Cause:    An attempt was made to access a transactional temporary table that  
           has been already populated by a concurrent transaction of the same  
           session.  
*Action:   do not attempt to access the temporary table until the  
           concurrent transaction has committed or aborted.  


Error starting at line : 27 in command -  
alter table TMP_REPAIR_TRIGGER_ANSWER add (ANSWER_PHRASE varchar2(4000))  
Error report -  
ORA-14450: attempt to access a transactional temp table already in use  
14450. 00000 -  "attempt to access a transactional temp table already in use"  
*Cause:    An attempt was made to access a transactional temporary table that  
           has been already populated by a concurrent transaction of the same  
           session.  
*Action:   do not attempt to access the temporary table until the  
           concurrent transaction has committed or aborted.  


Error starting at line : 11 in command -  
drop table TMP_REPAIR_TRIGGER_ANSWER  
Error report -  
ORA-14452: attempt to create, alter or drop an index on temporary table already in use  
14452. 00000 -  "attempt to create, alter or drop an index on temporary table already in use"  
*Cause:    An attempt was made to create, alter or drop an index on temporary  
           table which is already in use.  
*Action:   All the sessions using the session-specific temporary table have  
   to truncate table and all the transactions using transaction  
           specific temporary table have to end their transactions.  

1 Ответ

0 голосов
/ 21 февраля 2019

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

(Ваше использование фразы «это происходит постоянно» заставляет меня поверитьчто вы постоянно удаляете и воссоздаете глобальные временные таблицы. Если это не так, обновите вопрос.)

Если вы хотите создать временную таблицу, которая является приватной для сеанса, тогда вы хотите использовать приватнуювременная таблица, функция, представленная в 18c.

Если вам действительно нужно постоянно отбрасывать глобальную временную таблицу (возможно, как часть развертывания схемы, которая автоматически удаляет и воссоздает все, хотя это не похоже на процессэто может относиться к производству), вы можете обратиться к документу службы поддержки My Oracle «КАК ДИАГНОСТИРОВАТЬ ORA-14452 ВО ВРЕМЯ КАДРА ВРЕМЕННОЙ ТАБЛИЦЫ (ID документа 800506.1)».Суть документа в следующем: найти все связанные сеансы и уничтожить их (что, вероятно, также является плохой идеей в работе).

...