데이터베이스/오라클

[Oracle] TimeStamp 시점 데이터 복구

Unipiz 2020. 11. 26. 16:17

 

결론

TimeStamp Query 복사 후 사용 

select * from temp as of timestamp(systimestamp-interval '120' minute)
--두 시간 전 데이터 조회
select * from temp as of timestamp(systimestamp-interval '2' hour)

as 부터 끝까지 복사해서 table 뒤에 붙여서 사용

 

 

원리 - `undo data`

작업을 하기 전 상태로 되돌릴 수 있는 데이터

데이터를 수정하거나 지우고 commit 했다면 `undo segment에 저장` 하게 된다.

Timestamp 를 사용하면 이 저장된 곳을 참조한다.

활성화된 undo segment 조회.

select * from v$rollname

 

undo segment는 기본적으로 자동으로 관리되게 설정되어있다.

show parameter undo;

AUTO

 

 

 

undo segment 설정

alter system set undo_management=auto scope=spfile;
alter system set undo_management=manual scope=spfile;

*spfile은 파라미터 파일로 오라클 운영에 있어서 필요한 설정 정보들이 들어있는 파일들이다.

그리고 db 복구시에 필요한 파일이다.

EX) *.undo_tablespace='UNDOTBS1'

근데 spfile은 바이너리 파일이라 우리가 해석할 수 없고, 대신 pfile로 뽑아서 설정할 수 있다.

create pfile = '?\database\initYJ.ORA' from spfile;

해당 폴더에 initYJ.ORA로 추출되고 확인할 수 있다.

 

 

 

해당 tablespace 조회

select tablespace_name, contents from dba_tablespaces;

 

 

undo tablespace 생성 & 변경

create undo tablespace undotbs2
datafile '/home/oracle/undotbs2.dbf' size 100m;

alter system set undo_tablespace=undotbs2;

 

 

 

retention 설정

alter system set undo_retention=10800;
--3시간 undo tada 보관

alter tablespace undotbs2 retention guarantee;
--기본값은 noguarantee

 

 

 

 

Flashback

timestamp를 써서 insert를 다시하거나 update를 수행하는데, 

Flashback를 사용하면 해당 시점으로 바로 되돌릴 수 있지만, 더 많은 돈이 필요했다.

* ORA-00439: 기능이 사용으로 설정되지 않음: Flashback Table

alter table temp enable row movement;
flashback table temp to timestamp (systimestamp - interval '2' hour);
alter table temp disable row movement;

 

select * from v$version

오라클 버전을 조회해보자.

Oracle Database 11g Release 11.2.0.4.0 - 64bit Production

Production 은 지원 안해주고 Enterprise Edition 만 지원해준다.

 

row movement는 파티션 운영 중에 키 커럼의 데이터가 변경되어 이동 시 에러가 날 수 있는데,

파티션간 로우의 이동이 안되게 설정 되어 있기 때문이다. 

풀어주고 막아주자.