sql—是否可以从时态表中恢复?

um6iljoc  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(332)

是否可以从时态表中恢复?
我定义了两个这样的表:

  1. create table lib.x(
  2. "ID" INTEGER GENERATED ALWAYS AS IDENTITY (
  3. START WITH 1 INCREMENT BY 1
  4. NO MINVALUE NO MAXVALUE
  5. NO CYCLE NO ORDER
  6. CACHE 20
  7. ),
  8. char char(1),
  9. row_start TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW BEGIN IMPLICITLY hidden,
  10. row_end TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW END IMPLICITLY hidden,
  11. row_id TIMESTAMP(12) GENERATED ALWAYS AS TRANSACTION START ID IMPLICITLY hidden,
  12. PERIOD SYSTEM_TIME(row_start, row_end)
  13. );
  14. create table lib.x_history like lib.x;
  15. alter TABLE lib.x
  16. ADD VERSIONING USE HISTORY TABLE lib.x_history;

然后我做了这个:

  1. insert into lib.x(char) values('a'), ('b'), ('c');
  2. delete from lib.x where id = 2;

是否可以还原id为2的字符“b”?

fquxozlt

fquxozlt1#

是和否。这不是一个系统还原,但您当然可以查询旧状态并使用它插入到常规表中。请参阅db2文档中的“查询系统周期时态数据”一节。
您首先要构造一个查询来搜索。稍后,可以将其用作insert语句的输入。因此,您可以恢复该值,但它被视为删除该值并将其作为新的插入。

相关问题