Oracleで、テーブルパーティションが削除されたときにパブリックシノニムが無効になるのはなぜですか

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

質問

次の動作が発生する理由を誰かに教えてもらえますか(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にはありません 修正されたバグかもしれません。必要なものであったかもしれませんが(例:同義語に基づいてビューを再検証するために...)、改善された手法が使用されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top