更新分区键,不允许行移动

Ps-*_*-kl 1 oracle partitioning database-partitioning sql-update

我想更新分区键。分区如下

PARTITION_NAME  LAST_ANALYZED   NUM_ROWS    BLOCKS  SAMPLE_SIZE HIGH_VALUE
PORTAL_SERVICE_1    12/8/2016   4133    174 4133    1
PORTAL_SERVICE_2    6/8/2016    4474    174 4474    2
PORTAL_SERVICE_3    10/8/2016   29602   2014    29602   3
PORTAL_SERVICE_OTHERS   24/5/2016   0   110     DEFAULT
Run Code Online (Sandbox Code Playgroud)

此分区应用于列 Portal_Service_id。我想将门户服务 ID 的值从 2 更新为 1。

当我尝试

update trans set PORTAL_SERVICE_ID = 1 where ID = 2054;
Run Code Online (Sandbox Code Playgroud)

我收到错误:错误报告 - SQL 错误:ORA-14402:更新分区键列会导致分区更改 14402. 00000 -“更新分区键列会导致分区更改”

我不允许使用启用行移动。

任何人都可以建议更新行的任何替代方法。

如果这可以在场景中使用,任何人都可以解释一下:

UPDATE <table_name> PARTITION (<partition_name>)
SET <column_name> = <value>
WHERE <column_name> <condition> <value>;
Run Code Online (Sandbox Code Playgroud)

小智 9

要解决错误“ORA-14402:更新分区键列会导致分区更改”,您可以按照以下步骤操作

1) 检查您的表是否启用了 row_movement

SELECT owner, table_name, row_movement FROM dba_tables WHERE table_name in ('YOUR_TABLE');

2)如果被禁用,您可以使用此脚本启用移动

alter table YOUR_TABLE enable row movement;
Run Code Online (Sandbox Code Playgroud)

之后,您可以更新分区键列