问题描述
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 * 上没有任何内容显示 “嘿,支持我的索引应该是本地的”。该属性仅属于索引,当您启用约束时,您可以提名它。
对于您所追求的灵活性,您可以执行以下操作:
-创建索引为本地 (不是唯一的)
-使用索引添加约束
当你想禁用约束,你会做:
-改变表...禁用约束保持索引;
-更改索引无法用于相关分区
然后做你的数据维护等
-更改相关分区的索引重建
-改变表...启用使用索引
例如,您可能在非分区表上有以下索引
-x,y列上的IX1
-x,y,z列上的IX2
-y,x列上的IX3
-IX4在x,y列上不可见,在x列上压缩
这些索引中的任何一个都可以用于在 (x,y) 上实现主键,因此我们在约束和索引之间保持 * 分隔 *,而不是将它们 “视为一个”。
因此,在您的分区情况下,* constraint * 上没有任何内容显示 “嘿,支持我的索引应该是本地的”。该属性仅属于索引,当您启用约束时,您可以提名它。
对于您所追求的灵活性,您可以执行以下操作:
-创建索引为本地 (不是唯一的)
-使用索引添加约束
当你想禁用约束,你会做:
-改变表...禁用约束保持索引;
-更改索引无法用于相关分区
然后做你的数据维护等
-更改相关分区的索引重建
-改变表...启用使用索引
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




