在交换分区时,交换的记录是否保留在原始分区中?

阿比

假设我有下表,

create table SRC_TABLE (
ID NUMBER(2),
NAME VARCHAR(20)
) PARTITION BY LIST (ID)
(
    PARTITION "PART_1" VALUES(1),
    PARTITION "PART_2" VALUES(2)
)

以下是SRC_TABLE中的记录

ID         NAME    
-----  ------- 
1          src1    
1          src11   
1          src111  
2          src2    
2          src22  

和其他登台表

create table STAGE_TABLE (
ID NUMBER(2),
NAME VARCHAR(20)
)

以下是STAGE_TABLE中的记录:

ID     NAME    
-----  ------- 
2      2src22  

在运行以下查询时,

ALTER TABLE "SRC_TABLE" EXCHANGE PARTITION "PART_1" WITH TABLE "STAGE_TABLE" WITHOUT VALIDATION

SRC_TABLE的数据变为:

ID     NAME    
-----  ------- 
2      2src22  
2      src2    
2      src22 

那么,现在名称='2src22'的记录(由于交换而来自阶段表)保留在PART_1或PART_2中,因为基于ID它应该出现在PART_2中?

文森特·马尔格拉特

当使用该WITHOUT VALIDATION子句时,您将告诉Oracle:“如果它们满足partition子句,请不要检查新记录,我已经确保它们都满足分区方案”。

基本上,您已经在数据库中引入了损坏的数据,并且已经告诉Oracle不要执行任何检查。您有意取消了保护,因此记录自然会以错误的分区结尾:

SQL> select * from src_table partition (part_1);

 ID NAME
--- ------------------------------------------------------------
  2 2src22

如果将数据放在错误的分区中,我肯定会遇到有趣的错误。某些选择可能会返回不一致/错误的结果。您可能还会遇到异常的错误消息。

例如,简单的分区修剪将给出错误的结果(感谢@Alex Poole):

SQL> SELECT * FROM src_table WHERE ID = 1;

 ID NAME
--- ------------------------------------------------------------
  2 2src22

如果您实际使用验证会发生什么:

SQL> ALTER TABLE "SRC_TABLE" EXCHANGE PARTITION "PART_1" WITH TABLE STAGE_TABLE;

ORA-14099: all rows in table do not qualify for specified partition

您会收到一条不错的错误消息,说明您正在尝试做错什么。不要尝试通过取消保护来解决错误消息。改正您的数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在交换分区时,交换的记录是否保留在原始分区中?

来自分类Dev

在LVM中交换分区?

来自分类Dev

Hive中的分区交换

来自分类Dev

交换分区是否已加密?

来自分类Dev

交换分区是否已加密?

来自分类Dev

在Ubuntu中交换分区与交换文件

来自分类Dev

交换分区与交换文件

来自分类Dev

交换分区与交换文件

来自分类Dev

交换分区不会自动交换

来自分类Dev

当根分区和RAM足够大时是否需要交换分区?

来自分类Dev

虚拟机是否需要交换分区?

来自分类Dev

我的交换分区是否已加密?

来自分类Dev

我是否还需要交换分区?

来自分类Dev

Linux交换分区是否支持修整?

来自分类Dev

删除交换分区时出现问题

来自分类Dev

删除交换分区时出现问题

来自分类Dev

是否可以将现有的交换分区作为逻辑卷合并到新分区中?

来自分类Dev

是否可以将现有的交换分区作为逻辑卷合并到新分区中?

来自分类Dev

无法在Linux Mint上安装Veracrypt分区(元数据保留在Windows缓存中)

来自分类Dev

如何删除 /tmp/ 分区并将其保留在 RAM 中?

来自分类Dev

交换分区使用

来自分类Dev

移动交换分区

来自分类Dev

交换分区的大小增加

来自分类Dev

什么是交换分区

来自分类Dev

ZRAM与常规交换分区

来自分类Dev

交换文件与分区

来自分类Dev

扩展交换分区的大小

来自分类Dev

如何测试交换分区

来自分类Dev

恢复交换分区