使用ALTER SESSION SET CURRENT_SCHEMA后在Oracle表空间中创建索引

时间:2012-09-17 22:15:49

标签: oracle oracle11g

我正在尝试复制某人报告在使用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定义的表空间中创建索引?

2 个答案:

答案 0 :(得分:1)

当语句包含显式模式时,不使用当前模式。

CREATE TABLE c.X (...);

答案 1 :(得分:1)

在索引创建语句中显式设置表空间时,例如

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

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

你可以(正如Brian所说)使用嵌入式模式,索引具有不同的表空间设置(但这些不会出现在模式a或b中)或脚本中有ALTER USER b DEFAULT TABLESPACE x(奇数,但可以设置它来创建索引,然后将其设置回来,例如)。