从文档来看,我不太清楚参考分区表是否支持闪回:
闪回表的限制
本声明受以下限制:
闪回表操作对于以下类型无效 对象:属于集群一部分的表、物化视图、 高级队列 (AQ) 表、静态数据字典表、系统 表、远程表、对象表、嵌套表或单独的表 表分区或子分区。
以下 DDL 操作会更改表的结构,使得 您随后不能使用 TO SCN 或 TO TIMESTAMP 子句来刷新 该表返回到操作之前的时间:升级、移动、 或截断表;给表添加约束,添加表 到一个集群;修改或删除列;更改列 加密密钥;添加、删除、合并、拆分、合并或 截断分区或子分区(除了添加 范围划分)。
但是当我测试它时,它看起来很糟糕:
CREATE TABLE PARENT
(
ID INT PRIMARY KEY
) PARTITION BY RANGE (ID)
(
PARTITION P1 VALUES LESS THAN (MAXVALUE )
);
CREATE TABLE CHILD
(
ID INT PRIMARY KEY,
PARENT_ID INT NOT NULL,
CONSTRAINT FK_PARENT FOREIGN KEY (PARENT_ID) REFERENCES PARENT (ID)
) PARTITION BY REFERENCE (FK_PARENT);
ALTER TABLE CHILD
ENABLE ROW MOVEMENT;
ALTER TABLE PARENT
ENABLE ROW MOVEMENT;
FLASHBACK TABLE PARENT, CHILD TO RESTORE POINT BASE;
CHILD
失败:
ORA-08199 Flashback Table operation is not supported on this object.
所以答案似乎是明显的“否”,但话又说回来,从文档来看它并不是那么明显。还有其他我没有考虑过的方法吗?
背景:我想在自动化系统测试期间使用闪回快速重置容器化 Oracle 数据库中的所有表。
是的,不支持;我正在努力更新文档。
如果您想重置所有表,您可以使用闪回数据库来解决这个问题。这会将整个数据库恢复到还原点。
假设您使用可插入数据库,请以
sysdba
用户身份连接到根容器并运行:
alter pluggable database <pdbname> close;
flashback pluggable database <pdbname> to restore point base;
alter pluggable database <pdbname> open resetlogs;