В Oracle почему общедоступные синонимы становятся недействительными при удалении раздела таблицы - PullRequest
3 голосов
/ 14 января 2009

Может кто-нибудь сказать мне, почему происходит следующее поведение (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> 

Синоним становится недействительным после удаления разделов, и я не могу понять, почему.

Спасибо за любые мысли.

Ответы [ 2 ]

6 голосов
/ 14 января 2009

Я протестировал его с Oracle 10.2, и синоним действительно становится недействительным, но когда другой пользователь использует синоним, выполнив

выберите количество (*) из part_test;

Oracle автоматически компилирует синоним, и синоним становится действительным.

То же самое с пакетами, процедурами и функциями. Когда вы выполните их, и они недействительны, Oracle попытается скомпилировать их автоматически.

2 голосов
/ 14 января 2009

Не в 11.1.0.6 Это могла быть ошибка, которая была исправлена. Возможно, это было что-то, что было необходимо (например, для повторной проверки представления на основе синонима ...), но там, где использовался улучшенный метод.

...