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.

Estarei primeiramente simulando o 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.

Referência: ‘PLAN_TABLE Is Old Version’ Message When Running EXPLAIN PLAN For Query (Doc ID 758702.1)

%name Corrigindo o erro PLAN TABLE is old version

Autor: Jhonata Lamim

MBA em Banco de Dados Oracle, formado pelo Centro Universitário de Araraquara (UNIARA), graduado em Sistemas de Informação pelo Centro Universitário de Brusque (UNIFEBE).

Atua com Banco de Dados Oracle desde Junho de 2010. Atualmente é DBA Senior na Exímio Soluções em TI (www.eximioti.com.br)

Principais atividade:

Implementação, migração, gerenciamento e suporte a produtos Oracle (10g, 11g, 12c, RAC), multiplataforma;
Monitoramento de ambientes 24×7;
Backup e Recovery;
Performance e Tuning;
Alta disponibilidade (HA);
EM database/grid/cloud control 12c/13c;
Conversão de databases;
Standby database / Oracle Data Guard;
Migração de dados para Oracle;

Experiência:

DBA Oracle Teiko Soluções em TI – Jun/2010 – Abr/2018
DBA Oracle, Outsourcing – Marfrig Group – Set/2013 – Abr/2018
DBA Oracle, Outsourcing – Grupo Notre Dame – Intermédica – Mar/2017 – Abr/2018
DBA Oralce, Outsourcing – Hospital Beneficiência Portuguesa de São Paulo – Set/2015 – Abr/2018
DBA Oracle, Outsourcing – Fundação São Francisco Xavier –  Set/2015 – Fev/2017
DBA Oracle, Outsourcing – Unimed Grande Florianopolis – Set/2014 – Jul/2016
DBA Oracle, Outsourcing – Hospital Moinhos de Vento – Set/2014 – Set/2015
DBA Oracle, Outsourcing – Santa Casa de Misericórdia de Porto Alegre – 2013

Certificações:

OCS 12C – Oracle Real Application Clusters 12c Certified Implementation Specialist
OCS 12C – Oracle Database 12c Certified Implementation Specialist
OCE 11G – Oracle Database 11g: Performance Tuning
OCA 11G – Oracle Certified Associate Administrator
OCP 11G/12C – Oracle Certified Professional Administrator
OCS 11G – Oracle Certified Specialist
OPNCS 11G – Oracle Partner Network Certified Specialist
OCS – Oracle Linux 6 Implementation Essentials

Linkedin: https://www.linkedin.com/in/jhonata-lamim-dba-oracle-61366484/