暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 当我在分区表上启用具有隐式本地索引的唯一约束 (constr.被创建为带有子句 “using index local”) 时,创建的索引是全局的。它是正确的?

ASKTOM 2020-12-02
693

问题描述



drop table p_table;

从产品 _ 组件 _ 版本中选择 *;

提示创建分区表P_TABLE
创建表p_table
(
期间日期不为空,
身份证号码 (10) 不为空
)
按范围划分 (周期)
间隔 (NUMTOYMINTERVAL(1,'月'))
(
分区P_0值小于 (TO_DATE('2000-01 00:00:00','syyyy-MM-DD HH24:MI:SS','nls_calendar = 格雷戈里安 '))
日志记录
无压缩
)
;

提示使用 “隐式” 本地索引 (使用 “使用索引本地”) 创建UC
ALTER TABLE p_table ADD (
约束PTAB_PER_ID_UK
唯一 (期间、id)
使用索引本地
启用验证)
;

选择index_name,唯一性,从所有索引中分区,其中index_name = 'pab_per_id_uk '; -索引是本地的

禁用约束后提示,索引将被删除,这是预期/必需的行为
alter table P_TABLE禁用约束PTAB_PER_ID_UK; -- 索引将被删除
选择index_name,唯一性,从所有索引中分区,其中index_name = 'pab_per_id_uk ';

提示启用约束
alter table P_TABLE enable constraint pab_per_id_uk; -- 将创建索引,bat不在本地
启用约束后提示,创建索引,但不是本地的
选择index_name,唯一性,从所有索引中分区,其中index_name = 'pab_per_id_uk ';

从我的角度来看,这不是预期的behivor。它是错误或存在一些会话/实例配置或 “东西” 选择期望 “正确” 类型的隐式索引?
提示是,我可以使用显式子句 “使用索引本地” 启用约束
提示是的,我可以创建单独的唯一本地索引



专家解答

这是设计使然,因为我们还支持的一项功能是使用任何可用的索引来实现约束。

例如,您可能在非分区表上有以下索引

-x,y列上的IX1
-x,y,z列上的IX2
-y,x列上的IX3
-IX4在x,y列上不可见,在x列上压缩

这些索引中的任何一个都可以用于在 (x,y) 上实现主键,因此我们在约束和索引之间保持 * 分隔 *,而不是将它们 “视为一个”。

因此,在您的分区情况下,* constraint * 上没有任何内容显示 “嘿,支持我的索引应该是本地的”。该属性仅属于索引,当您启用约束时,您可以提名它。

对于您所追求的灵活性,您可以执行以下操作:

-创建索引为本地 (不是唯一的)
-使用索引添加约束

当你想禁用约束,你会做:

-改变表...禁用约束保持索引;
-更改索引无法用于相关分区

然后做你的数据维护等

-更改相关分区的索引重建
-改变表...启用使用索引

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论