En Oracle, ¿por qué los sinónimos públicos se vuelven inválidos cuando se cae una partición de tabla?

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

Pregunta

¿alguien puede decirme por qué ocurre el siguiente comportamiento (Oracle 10.2):

SQL> create table part_test (
        i int primary key,
        d date
)
partition by range (d) (partition part_test_1 values less than (to_date('  2    3    4    5  1980-01-01', 'yyyy-mm-dd')));

create public synonym part_test for part_test;

select object_name, object_type, status from all_objects where object_name = 'PART_TEST';

alter table part_test add partition part_test_2 values less than (to_date('1981-01-01', 'yyyy-mm-dd'));

select object_name, object_type, status from all_objects where object_name = 'PART_TEST';

alter table part_test drop partition part_test_1;

select object_name, object_type, status from all_objects where object_name = 'PART_TEST';

drop public synonym part_test;
drop table part_test;

Table created.

SQL> SQL> 
Synonym created.

SQL> SQL> 
OBJECT_NAME                    OBJECT_TYPE         STATUS
------------------------------ ------------------- -------
PART_TEST                      TABLE               VALID
PART_TEST                      TABLE PARTITION     VALID
PART_TEST                      SYNONYM             VALID

SQL> SQL> 
Table altered.

SQL> SQL> 
OBJECT_NAME                    OBJECT_TYPE         STATUS
------------------------------ ------------------- -------
PART_TEST                      TABLE               VALID
PART_TEST                      TABLE PARTITION     VALID
PART_TEST                      TABLE PARTITION     VALID
PART_TEST                      SYNONYM             VALID

SQL> SQL> 
Table altered.

SQL> SQL> 
OBJECT_NAME                    OBJECT_TYPE         STATUS
------------------------------ ------------------- -------
PART_TEST                      TABLE               VALID
PART_TEST                      TABLE PARTITION     VALID
PART_TEST                      SYNONYM             INVALID

SQL> SQL> 
Synonym dropped.

SQL> 
Table dropped.

SQL> 

El sinónimo se vuelve inválido después de que se eliminan las particiones, y no puedo entender por qué.

Gracias por cualquier comentario.

¿Fue útil?

Solución

Lo probé con Oracle 10.2 y el sinónimo se vuelve inválido, pero cuando otro usuario usa el sinónimo haciendo

seleccione recuento (*) de parte_prueba;

Oracle compila automáticamente el sinónimo y el sinónimo se vuelve válido.

Es lo mismo con los paquetes, procedimientos y funciones. Cuando los ejecute y no sean válidos, Oracle intentará compilarlos automáticamente.

Otros consejos

No lo hace en 11.1.0.6 Podría haber sido un error que se solucionó. Puede haber sido algo que era necesario (por ejemplo, para revalidar una vista basada en un sinónimo ...) pero donde se ha utilizado una técnica mejorada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top