Oracle 在删除列之前选择作为版本
1/是否Oracle 在删除列之前选择作为版本,oracle,oracle11g,version,flashback,Oracle,Oracle11g,Version,Flashback,1/是否FLASHBACK和SELECT AS OF/VERSION BETWEEN使用相同的历史来源来回溯?这个问题与第二个问题有关 2/我知道FLASHBACK无法在DDL更改之前返回 我的问题是,对于自起选择,它是否能够在DDL更改之前选择某些内容。 例如 CREATE TABLE T (col1 NUMBER, col2 NUMBER) INSERT INTO T(col1, col2) VALUES('1', '1') INSERT INTO T(col1, col2) VALUES(
FLASHBACK
和SELECT AS OF/VERSION BETWEEN
使用相同的历史来源来回溯?这个问题与第二个问题有关
2/我知道FLASHBACK
无法在DDL更改之前返回
我的问题是,对于自起选择,它是否能够在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列
对不起,我手头没有要测试的数据库。任何改变表结构的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);
执行上述select语句时出错ORA-01466
但是,更改表的存储属性的DDL操作不会使撤消数据无效,因此您仍然可以使用flashback查询。1)flashback table
和SELECT。。从
开始,使用相同的源,撤消。还有FLASHBACK数据库
——尽管它使用相同的机制,但它使用一个单独的源,FLASHBACK日志必须可选地进行配置
2) 如果启用了
要使用该功能,请在示例代码中添加一些语句:
CREATE FLASHBACK ARCHIVE my_flashback_archive TABLESPACE users RETENTION 10 YEAR;
...
ALTER TABLE t FLASHBACK ARCHIVE my_flashback_archive;
现在,此语句将返回1列:
SELECT * FROM T;
此语句将返回两列:
SELECT * FROM T AS OF SYSTIMESTAMP - INTERVAL '10' SECOND;