오라클에서는 테이블 파티션이 떨어질 때 왜 공개 동의어가 유효하지 않습니까?
-
22-07-2019 - |
문제
누군가 다음 행동이 왜 발생하는지 말해 줄 수 있습니까 (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>
파티션이 삭제 된 후 동의어가 유효하지 않으며 그 이유를 해결할 수 없습니다.
어떤 생각에 감사합니다.
해결책
나는 Oracle 10.2로 그것을 테스트했으며 동의어는 실제로 유효하지 않지만 다른 사용자가 동의어를 사용하여 동의어를 사용하면
part_test에서 count (*)를 선택하십시오.
Oracle은 동의어를 자동으로 컴파일하고 동의어가 유효 해집니다.
패키지, 절차 및 기능과 동일합니다. 당신이 그것들을 실행하고 그것들이 유효하지 않으면, Oracle은 자동으로 컴파일하려고합니다.
다른 팁
11.1.0.6은 고정 된 버그 일 수 있습니다. 그것은 필요한 것이 있었을 수도 있지만 (예 : 동의어를 기반으로 한 견해를 재평가하기위한 것입니다 ...) 개선 된 기술이 사용 된 곳.
제휴하지 않습니다 StackOverflow