9 Replies Latest reply: Dec 6, 2012 4:11 AM by asahide RSS

    スキーマ・オブジェクトとパブリック・シノニムの名前の競合について

    978057
      こんにちは。
      標記の件ご教示頂きたく投稿致しました。

      現在、10g EnterpriseEditionの環境から11g StandardEditionOneの環境に移行中です。

      10gの環境では、任意のスキーマXから参照されているパブリック・シノニムSと同名の
      ユーザ定義型Sを任意のスキーマYに作成することが可能でした。

       スキーマX : シノニムSを参照している
       スキーマY : ユーザ定義型S ← 作成が可能
       PUBLIC : シノニムS

      ところが、11gの環境では、このようなスキーマ・オブジェクトは
      作成することができません。次のエラーメッセージが返ってきます。

       ORA-02306: すでに有効な依存関係のある型を作成できません。

      質問は2点です。
      ・10gから11gにて仕様変更がありましたでしょうか。それとも、エディションの違いが原因でしょうか。
      ・11gでこの問題を回避する方法はないでしょうか。

      ご回答何卒よろしくお願いいたします。
        • 1. Re: スキーマ・オブジェクトとパブリック・シノニムの名前の競合について
          asahide
          >・10gから11gにて仕様変更がありましたでしょうか。それとも、エディションの違いが原因でしょうか。

          仕様変更はわかりません。。
          エディションの違いは<<http://docs.oracle.com/cd/E16338_01/license.112/b56284/editions.htm#CJACGHEB>>にありますが、特にそのような点には言及されてませんね。

          >・11gでこの問題を回避する方法はないでしょうか。

          11.2.0.3 on Linuxで試してみましたが、普通に作成できるようです。。。
          (YがHOGE2、SがHOGEHOGE、XがHOGE1です、Xは出てませんが作成はしてます)
          <pre>
          HOGE2@orcl> select owner, object_name, object_type from all_objects where object_name ='HOGEHOGE';
          OWNER OBJECT_NAM OBJECT_TYP
          ========== ========== ==========
          PUBLIC HOGEHOGE SYNONYM
          HOGE2 HOGEHOGE TYPE
          </pre>

          YユーザのALL_OBJECTS辺りを再度確認されてみては如何でしょうか。
          • 2. Re: スキーマ・オブジェクトとパブリック・シノニムの名前の競合について
            978057
            ash_0317 さん

            ご回答ありがとうございます。
            実験して頂いた内容で1点確認させてください。

            スキーマXの任意のオブジェクトは、パブリックシノニムSを参照していますでしょうか。

            説明が不足していましたが、「同名のパブリックシノニムが存在する」だけであれば、
            スキーマYにユーザ定義型Sは作成することができます。

            済みませんが、ご回答のほど、よろしくお願いします。
            • 3. Re: スキーマ・オブジェクトとパブリック・シノニムの名前の競合について
              asahide
              スキーマX(HOGE1)にてVIEWを作成しました。

              create view hogeview as select * from hogehoge;
              (HOGEHOGEはパブリックシノニムSを想定)


              その後、TYPEを作成しましたが、正常に完了してます。
              例えばパブリックシノニムを一旦削除してTYPEを作成してからシノニム再作成してみてはどうでしょうか?
              • 4. Re: スキーマ・オブジェクトとパブリック・シノニムの名前の競合について
                978057
                何度も何度も済みません。。条件の説明が不足していました。

                パブリックシノニムSが指しているのは、X, Yとは別のスキーマZが持つユーザ定義型になります。
                このシノニムSを利用して、スキーマXにテーブルを作成したのち、スキーマYにユーザ定義型Sを
                作成するという手順になります。

                お手数おかけします。。
                • 5. Re: スキーマ・オブジェクトとパブリック・シノニムの名前の競合について
                  asahide
                  すみません、整理して頂けませんでしょうか?
                  また、ご確認させて頂いた点は試されてますでしょうか?
                  • 6. Re: スキーマ・オブジェクトとパブリック・シノニムの名前の競合について
                    978057
                    ・スキーマX:パブリックシノニムSを参照してテーブルを作成
                    ・スキーマZ:ユーザ定義型T
                    ・パブリック:スキーマZのユーザ定義型TへのシノニムS

                    上記の条件のもと、

                    ・スキーマY:ユーザ定義型S → 作成できない

                    という状態になっています。

                    例えばパブリックシノニムを一旦削除してTYPEを作成してからシノニム再作成してみてはどうでしょうか?
                    ご提示いただいた方法ですが、当方の環境では、上記のスキーマYのようなデータを
                    定期的に作成することになっていますため、毎度「削除」と「作成」を繰り返すのは
                    できれば防ぎたいと考えています。
                    • 7. Re: スキーマ・オブジェクトとパブリック・シノニムの名前の競合について
                      asahide
                      環境:Oracle 11.2.0.3@OEL6.3

                      確認できました、同じ事をするとtypeの作成時点でエラー出ました。
                      <code>
                      ORA-02306: cannot create a type that already has valid dependent(s)
                      </code>

                      パブリックシノニムを削除したところ、Typeは問題なく作成できました。
                      11gR2では他でも結構チェックが厳しくなっているので、仕様変更されたような気がしますが、正確なところ(仕様か不具合か)はオラクル社に確認しないとわからないと思います。


                      回避策になるかどうかはわかりませんが。。。
                      ・スキーマXにプライベートシノニムとしてシノニムSを作成し、それを参照するテーブルを作成
                      ・スキーマYに定義Sを作成
                      とする事で一応エラーは出ませんでした。
                      他からも参照されているのであればたくさんプライベートシノニムを作成しなければいけませんが。。
                      #もしくはシノニム経由しないか?
                      • 8. Re: スキーマ・オブジェクトとパブリック・シノニムの名前の競合について
                        978057
                        ご確認ありがとうございます。
                        当方の環境だけでなく再現することが確認できてよかったです。
                        11gR2では他でも結構チェックが厳しくなっているので、仕様変更されたような気がしますが、
                        正確なところ(仕様か不具合か)はオラクル社に確認しないとわからないと思います。
                        ご提案ありがとうございます。
                        オラクル社に確認させていただきます。
                        他からも参照されているのであればたくさんプライベートシノニムを作成しなければいけませんが。。
                        まさにそのような状況でして、影響調査が大変です。


                        ご対応いただきまして誠にありがとうございました。
                        確認が取れましたら、こちらにも情報展開いたします。
                        • 9. Re: スキーマ・オブジェクトとパブリック・シノニムの名前の競合について
                          asahide
                          >確認が取れましたら、こちらにも情報展開いたします。

                          サポート等からの回答は守秘義務等があるような気がしますので、展開できる情報をご展開頂ければと存じます。。