2

呼び出しを使用した後、正しいテーブルスペースにインデックスを作成できないと誰かが報告している問題を再現しようとしていALTER SESSION SET CURRENT_SCHEMAます。

システムとして接続し、ddl.sqlを呼び出します。

sqlplus system/pass@//host/sid @ddl

ddl.sqlに含まれるもの:

-- setup schema a and user a
@new-db/a_schema_setup
-- setup schema b and user b
@new-db/b_schema_setup

-- creates tables and indexes in schema a
ALTER SESSION SET CURRENT_SCHEMA=a;
@new-db/a_ddl

-- creates tables and indexes in schema b
ALTER SESSION SET CURRENT_SCHEMA=b;
@common/b_ddl

b_ddl.sqlには、次のようなDDLステートメントが含まれています

CREATE TABLE X (...);

CREATE UNIQUE INDEX IDX_X_PK ON X(ID);

どのような条件下で、スキーマ用に定義されたテーブルスペースにインデックスが作成されないのでしょうab

4

2 に答える 2

1

ステートメントに明示的なスキーマが含まれている場合、現在のスキーマは使用されません。

CREATE TABLE c.X (...);
于 2012-09-17T23:12:54.197 に答える
1

インデックス作成ステートメントでテーブルスペースを明示的に設定した場合。

CREATE INDEX table_name_i1
ON table_name (column_one, column_two)
TABLESPACE indexes
/

これにより、データベースまたはスキーマレベルで設定したデフォルトが上書きされます。

(ブライアンが言うように)インデックスに異なるテーブルスペース設定を持つ埋め込みスキーマを使用するか(ただし、これらはスキーマaまたはbには含まれません)ALTER USER b DEFAULT TABLESPACE x、スクリプトにを含めることができます(奇妙ですが、これを作成用に設定することは可能です)たとえば、インデックスを作成してから元に戻します)。

于 2012-09-18T08:05:26.980 に答える