7 Replies Latest reply: Jan 24, 2013 7:42 PM by asahide RSS

    export、import の index=yの動きについて

    986018
      お世話になります。

      初めて質問させていただきます。

      以下のような状況で、
      oracle9iのtestTableをindexes=y(デフォルト)でexportし、
      oracle11gのtestTableにindexes=y(デフォルト)でimportした時に、
      exportしたテーブルに索引がない場合は、索引は上書きされ、削除されるのでしょうか?

      oracle9i(export)
      testTable
      索引なし

      oracle11g(import)
      testTable
      索引あり

      既に存在するテーブルに対してimportするときには、
      indexes=yが有効にならないのか、
      oracle11gのtestTableには、索引が付加されたままでした。
      また、テーブルが存在しない場合は、
      exportした索引が付加されるようです。(indexes=yの動き?)

      このような現象について、どこかに記述されている箇所がないか調べているのですが、
      見つかりません。
      ご存じの方はいらっしゃいませんか?

      よろしくお願い致します。
        • 1. Re: export、import の index=yの動きについて
          asahide
          既に存在するテーブルに対してimportするときには、
          indexes=yが有効にならないのか、
          oracle11gのtestTableには、索引が付加されたままでした。
          これは仕様通りの動きで、indexes=yは索引をインポートするかどうか、という動きになると理解してます。
          そのため、既にある場合は特に何も実施されないと考えてます。
          <<http://docs.oracle.com/cd/E16338_01/server.112/b56303/original_import.htm#sthref2206>>
          また、テーブルが存在しない場合は、
          exportした索引が付加されるようです。(indexes=yの動き?)
          exportしたテーブルは「索引なし」ではないのですか?
          • 2. Re: export、import の index=yの動きについて
            986018
            既に存在するテーブルに対してimportするときには、
            indexes=yが有効にならないのか、
            oracle11gのtestTableには、索引が付加されたままでした。
            これは仕様通りの動きで、indexes=yは索引をインポートするかどうか、という動きになると理解してます。
            そのため、既にある場合は特に何も実施されないと考えてます。
            <<http://docs.oracle.com/cd/E16338_01/server.112/b56303/original_import.htm#sthref2206>>
            何もしないという記述がなく、
            「インポート時、ターゲット表にすでに索引が存在する場合は、データ挿入時にターゲット表の索引のメンテナンスを実行します。」
            という記述のみで、結局索引は付加されるのかどうかがわかりませんでした。
            質問に答えて頂き、ありがとうございます。

            また、テーブルが存在しない場合は、
            exportした索引が付加されるようです。(indexes=yの動き?)
            exportしたテーブルは「索引なし」ではないのですか?
            すみません。上記の場合は、以下のような場合です。
            oracle9i(export)(indexes=y)
            testTable
            索引あり

            oracle11g(import)(indexes=y)
            testTableなし

            oracle11gにtestTableが作成され索引が付加されていました。
            • 3. Re: export、import の index=yの動きについて
              asahide
              「インポート時、ターゲット表にすでに索引が存在する場合は、データ挿入時にターゲット表の索引のメンテナンスを実行します。」
              こちらのメンテナンスは、普通にデータが入った時に索引付けられる、という意味でのメンテナンスですね。
              • 4. Re: export、import の index=yの動きについて
                986018
                「インポート時、ターゲット表にすでに索引が存在する場合は、データ挿入時にターゲット表の索引のメンテナンスを実行します。」
                こちらのメンテナンスは、普通にデータが入った時に索引付けられる、という意味でのメンテナンスですね。
                既に存在するテーブルにimportするときは、索引を削除してから速度が速いという記述がありましたが、
                データが入った時に索引が付加されるからですね。
                ありがとうございます。

                つまり、
                export(index=y)
                ①oracle9i
                testTable
                索引なし
                ②oracle9i
                testTable
                索引あり

                import(index=y)
                ③oracle11g
                testTable
                索引あり

                ④oracle11g
                テーブルなし

                ①③、②③の組み合わせでimportした場合は、oracle11gの索引のままで、
                ②④の組み合わせでimporした場合は、oracle9iの索引が付加され、
                ①④の組み合わせでimportした場合は、oracle9iの索引がないので、索引なしになる
                であってますか?
                確認してみます。
                • 5. Re: export、import の index=yの動きについて
                  asahide
                  あっていると思いますが、②③の組み合わせの場合、それぞれで別の索引の場合には9iの索引が付与されることになると考えてます。

                  既に存在するテーブルにimportするときは、索引を削除してから速度が速いという記述がありましたが、
                  データが入った時に索引が付加されるからですね。
                  付加というか、入ったデータにあわせて索引がメンテナンスされるからですね。
                  (認識はあっていると思います)
                  • 6. Re: export、import の index=yの動きについて
                    986018
                    export(index=y)
                    ①oracle9i
                    testTable
                    索引なし
                    ②oracle9i
                    testTable
                    索引あり(index1)

                    import(index=y)
                    ③oracle11g
                    testTable
                    索引あり(index2)

                    ④oracle11g
                    テーブルなし

                    ①③の組み合わせでは、index2
                    ②③の組み合わせでは、index1、index2
                    ①④の組み合わせでは、索引なし
                    ②④の組み合わせでh、index1
                    の索引が付与されました。
                    入ったデータに合わせて索引がメンテナンスされるというのは、
                    indexes=yの索引が既に存在するテーブルに追加されるのですね。
                    ありがとうございます。
                    • 7. Re: export、import の index=yの動きについて
                      asahide
                      参考になったようで、良かったです。
                      解決されたら、ぜひ answered にチェックして頂けるとナレッジシェアできて良いかと考えてますのでお願いします。