在Oracle中,为啥删除表分区时公共同义词会失效
Posted
技术标签:
【中文标题】在Oracle中,为啥删除表分区时公共同义词会失效【英文标题】:In Oracle, why do public synonyms become invalid when a table partition is dropped在Oracle中,为什么删除表分区时公共同义词会失效 【发布时间】:2009-01-13 22:07:46 【问题描述】:谁能告诉我为什么会出现以下行为(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>
删除分区后同义词无效,我不知道为什么。
感谢您的任何想法。
【问题讨论】:
【参考方案1】:我已经用 Oracle 10.2 对其进行了测试,同义词确实无效,但是当其他用户通过这样做来使用同义词时
从part_test中选择count(*);
Oracle 自动编译同义词,同义词生效。
包、过程和函数也是如此。当您执行它们并且它们无效时,Oracle 将尝试自动编译它们。
【讨论】:
【参考方案2】:11.1.0.6 中没有 这可能是一个已修复的错误。这可能是必要的(例如,基于同义词重新验证视图......)但使用了改进的技术。
【讨论】:
我很想接受这个答案,但我只能接受一个,所以我会选择与我的 Oracle 版本相关的那个。塔加里。以上是关于在Oracle中,为啥删除表分区时公共同义词会失效的主要内容,如果未能解决你的问题,请参考以下文章