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);

在什么情况下不会在为模式a或定义的表空间中创建索引b

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
/

这将覆盖您在数据库或架构级别设置的默认值。

您可以(如 Brian 所说)为索引使用具有不同表空间设置的嵌入式模式(但无论如何这些都不会在模式 a 或 b 中)或者ALTER USER b DEFAULT TABLESPACE x在脚本中有一个(奇怪但可以设置它来创建索引,然后将其设置回来,例如)。

于 2012-09-18T08:05:26.980 回答