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