• Brusque/SC
  • (47) 3053-7082
-
-

Blog

21 de agosto de 2019

Corrigindo o erro 'PLAN_TABLE' is old version

Quando é executado um explain e o mesmo utiliza uma PLAN_TABLE com uma versão inferior a versão do Oracle, é apresentada a mensagem 'PLAN_TABLE' is old version e o resultado do explain pode, em alguns casos não apresentar a informação do tempo de execução do comando .

O problema de 'PLAN_TABLE' is old version ocorre geralmente após o processo de upgrade da base onde o produto foi atualizado, porém o usuário ainda está usando uma versão antiga do PLAN_TABLE.

O primeiro passo que estarei realizando é a simulação do erro:

conn scott/tiger@teste</pre>
SQL> explain plan for
 2 select sysdate from dual;
Explained.
SQL> /
Explained.
SQL> set lines 190
set pages 50
select * from table(dbms_xplan.display);SQL> SQL>
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1388734953
-----------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 (0)| 00:00:01 |
| 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------
- 'PLAN_TABLE' is old version

 

Para resolver este problema é necessário identificar todas as tabelas PLAN_TABLE, remove-las e executar o script catplan.sql para recriar a PLAN_TABLE.

select owner, object_type, object_name
from all_objects
where
object_name like 'PLAN_TABLE%';
OWNER                          OBJECT_TYPE         OBJECT_NAME
------------------------------ ------------------- -----------
SYS                             TABLE              PLAN_TABLE$
PUBLIC                         SYNONYM             PLAN_TABLE
SCOTT                           TABLE              PLAN_TABLE
connect sys as sysdba
drop table plan_table$;
table dropped.
drop table SCOTT.PLAN_TABLE;
table dropped.
SQL> @?/rdbms/admin/catplan
create type dbms_xplan_type
 *
ERROR at line 1:
ORA-00955: name is already used by an existing object
create type dbms_xplan_type_table
 *
ERROR at line 1:
ORA-00955: name is already used by an existing object
Grant succeeded.
Grant succeeded.
create type sql_plan_row_type
 *
ERROR at line 1:
ORA-00955: name is already used by an existing object
Synonym created.
Grant succeeded.
create type sql_plan_table_type
 *
ERROR at line 1:
ORA-00955: name is already used by an existing object
Synonym created.
Grant succeeded.
create sequence ora_plan_id_seq$
 *
ERROR at line 1:
ORA-00955: name is already used by an existing object
drop table plan_table$
 *
ERROR at line 1:
ORA-00942: table or view does not exist
Table created.
Grant succeeded.
Synonym created.
create type sql_plan_stat_row_type
 *
ERROR at line 1:
ORA-00955: name is already used by an existing object
Synonym created.
Grant succeeded.
create type sql_plan_allstat_row_type
 *
ERROR at line 1:
ORA-00955: name is already used by an existing object
Synonym created.
Grant succeeded.
SQL> 

 

Os erros que ocorreram na execução acima, podem ser desconsiderados pois estão relacionados a tentativa de criação de objetos já existentes na base.

Agora irei realizar um novo explain para mostrar que o erro não ocorre novamente.

conn scott/tiger@teste
SQL> explain plan for
 2 select sysdate from dual;
Explained.
SQL> /
Explained.
SQL> set lines 190
set pages 50
select * from table(dbms_xplan.display);SQL> SQL>
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1388734953
-----------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 (0)| 00:00:01 |
| 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------
8 rows selected.

 

É importante destacar, que este processo precisa ser realizado com cada usuário que será usado para gerar o explain.

 

Postado por: Jhonata Lamim
Fonte: My Oracle Support - Doc ID 758702.1
197 visualizações

Compartilhe este post

Converse com a equipe Exímio

Encontre a melhor solução para sua empresa
Agende uma conversa com a nossa equipe!

Conteudo

Newsletter

Receba todas as nossas
novidades no seu e-mail