2013-03-11 2 views
2

나는 테이블에서 일부 행을 빠르게 삭제했으며 커밋도 수행했습니다. 지금 그들을 복구하고 싶습니다.삭제 된 레코드 복구

사용중인 DB는 Oracle 11g R2입니다.

나는 삭제 된 레코드 얻기 위해 다음 쿼리를 사용 :

SELECT * FROM MY_TABLE AS OF TIMESTAMP ('13-MAR-11 8:50:58','DD-MON-YY HH24: MI: SS') 

을하지만 실행하는 동안이 없다는 오류를 제공합니다 :

Error at Command Line:3 Column:75 
Error report: 
SQL Error: ORA-00907: missing right parenthesis 
00907. 00000 - "missing right parenthesis" 
*Cause:  
*Action: 

을하지만이 queury에서 문제를 이해할 수 없었다.

누구나 도움이 될 수 있습니까?

답변

5

실제 시간 소인 (또는 날짜)이 필요하므로 한 쌍의 값을 전달합니다.

보십시오 : (. 당신의 시간 형식 지정자 중 하나 정확하지 않은 당신의 날짜 문자열과 일치하지 않음)

SELECT * FROM MY_TABLE 
AS OF TIMESTAMP TO_DATE('13-MAR-11 08:50:58','DD-MON-YY HH24:MI:SS') 

예를 들어

+0

그건 매력처럼 작동합니다 ... 대단히 감사합니다. 나는 하나의 작은 질문이 더 있습니다. 커밋을 한 후에 두 번의 삭제 작업을 수행한다고 가정 해보십시오. 첫 번째 삭제 된 지점으로 이동할 수 있습니까? 또는 마지막으로 삭제 된 지점까지만 갈 수 있습니까? – KTB

+1

이전에 여러 커밋으로 돌아갈 수 있습니다. 주된 요소는 커밋을 롤백하는 데 필요한 실행 취소 블록이 실행 취소 테이블 공간에 여전히 존재하는지 여부입니다. 'undo_retention' 매개 변수와 플래쉬 백 (Flashback) 쿼리 문서 (플래쉬 백 데이터베이스 또는 좀 더 극단적 인 접근을위한 토탈 리콜)을 조사해야합니다. – Mat

1

:

SELECT * FROM EMP AS OF TIMESTAMP 
    TO_TIMESTAMP('2005-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS') 
    WHERE name = 'JOHN'; 

그러나 플래시백 쿼리 ORA-1555, 다른 옵션으로 실패 할 수 있습니다 :

Logmine R

오라클 보충 로그를 사용하는 경우, 당신은 마지막 옵션이 될 것이다 DELETE 문

-- switch again logfile to get a minimal redo activity alter system switch logfile; 

-- mine the last written archived log 
exec dbms_logmnr.add_logfile('archivelog/redologfile', options =>dbms_logmnr.new); 
exec dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog); 
select operation, sql_redo from v$logmnr_contents where seg_name = 'EMP'; 

오라클 PRM-DUL

PRM-DUL에 대한 SQL을 취소 할 수 있습니다. 심지어 오라클 블록에서 삭제 된 행 조각은 항상 삭제 된 마스크와 행 플래그를 표시, 행 조각 여전히 스캔 오라클 데이터 블록을 통해 읽을 수 있습니다. PRM-DUL은 전체 테이블을 스캔하고, 삭제 된 것으로 표시된 모든 레코드/행 조각을 찾아 플랫 파일에 기록 할 수 있습니다.