1

1/ 是否使用相同FLASHBACK的历史来源回退到?这个问题与第二个问题有关。SELECT AS OF/ VERSION BETWEEN

2/ 我知道FLASHBACK在 DDL 更改之前无法返回。

我的问题是SELECT AS OF,它是否能够在 DDL 更改之前选择一些东西。举个例子

CREATE TABLE T
(col1 NUMBER, col2 NUMBER)
INSERT INTO T(col1, col2) VALUES('1', '1')
INSERT INTO T(col1, col2) VALUES('2', '2')
COMMIT;
SLEEP(15)
ALTER TABLE T DROP COLUMN col2;
SELECT * FROM T
AS OF SYSTIMESTAMP - INTERVAL '10' SECOND;

选择会返回 2 列还是 1 ?

请原谅我手头没有数据库可以测试。

4

2 回答 2

1

任何改变表结构的 DDL 都会使表的任何现有撤消数据无效。因此,您将收到错误“ORA-01466”无法读取数据 - 表定义已更改。

这是一个简单的测试

CREATE TABLE T
(col1 NUMBER, col2 NUMBER);
INSERT INTO T(col1, col2) VALUES('1', '1');
INSERT INTO T(col1, col2) VALUES('2', '2');
COMMIT;
SLEEP(15)
ALTER TABLE T DROP COLUMN col2;


SELECT * FROM T
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' SECOND);

ERRROR ORA-01466在执行上述选择语句时。

但是,更改表的存储属性的 DDL 操作不会使撤消数据无效,因此您仍然可以使用闪回查询。

于 2016-04-22T15:49:02.003 回答
1

1)FLASHBACK TABLESELECT .. AS OF使用相同的来源,UNDO。还有FLASHBACK DATABASE- 虽然它使用相同的机制,但它使用单独的源,必须可选配置的闪回日志。

2)如果启用闪回存档,闪回表和闪回查询可以在 DDL 更改之前返回。

要使用该功能,请在示例代码中添加一些语句:

CREATE FLASHBACK ARCHIVE my_flashback_archive TABLESPACE users RETENTION 10 YEAR;
...
ALTER TABLE t FLASHBACK ARCHIVE my_flashback_archive;

现在此语句将返回 1 列:

SELECT * FROM T;

此语句将返回 2 列:

SELECT * FROM T AS OF SYSTIMESTAMP - INTERVAL '10' SECOND;
于 2016-04-25T00:39:06.383 回答