今天同事打电话说通过如下语句查看表:
select * from sm.sm_qftjmx as of timestamp to_timestamp('2010-12-30 7:00:00','YYYY-MM-DD HH24:MI:SS')
时系统报如下错误
该系统有Oracle Data guard 方式实现的灾备中心,因此通过对如下语句建立了dblink
CREATE DATABASE LINK test_standby
CONNECT TO system IDENTIFIED BY kuqlan
USING 'standby';
将管理模式的standby数据库切换至只读模式
$sqlplus “/as sysdba”
SQL>alter database recover managed standby database cancel;
SQL>alter database open read only;
在备库执行语句如下as of timestamp后没有报错。
select * from sm.sm_qftjmx as of timestamp to_timestamp('2010-12-30 7:00:00','YYYY-MM-DD HH24:MI:SS')
在生产库通过如下语句生成了“过去”的记录表:
create table sm.sm_qftjmx_befor7 as select * from sm.sm_qftjmx@test_standby as of timestamp to_timestamp('2010-12-30 7:00:00','YYYY-MM-DD HH24:MI:SS')
将只读模式standby数据库切换至管理模式
$sqlplus “/as sysdba”
SQL>alter database recover managed standby database disconnect from session;
通过如下语句删除临时创建的db link
DROP DATABASE LINK test_standby
最遗憾的是同事说我恢复过来的sm.sm_qftjmx_befor7 表和生产库的原表一样…
看来物理data guard对as of timestamp没有报错,但是还是去当前值。
既然read only 模式打开,因此原则上不需UNDO表空,再说物理DG环境下对UNDO好像没有特别的说明,为什么还要不报错了,是不是read only模式根本不查询old block version?
做个记录,后面慢慢研究吧;