programing

오라클 테이블에서 삭제된 행 복구

instargram 2023. 7. 21. 20:33
반응형

오라클 테이블에서 삭제된 행 복구

오라클 테이블에서 삭제된 행을 복구할 수 있습니까?내 데이터는 MANUAL_TRANSACTIONs 테이블에 저장됩니다. 스키마 이름은 CCO입니다.테이블에서 실수로 50만 행을 삭제하고 커밋도 했습니다.이제 저는 그들을 되찾고 싶습니다.저는 Oracle 11g R2를 사용하고 있습니다.감사해요.

오라클 Flashback Query를 사용하여 세부 정보를 복구할 수 있습니다.삭제 전 시점의 표 내용을 쿼리하여 손실된 데이터를 확인하고 필요한 경우 데이터베이스에 손실된 데이터를 다시 삽입할 수 있습니다.다음은 샘플 쿼리입니다.

select * from MANUAL_TRANSACTION as of timestamp to_timestamp('28-APR-2014 12:30:00', 'DD-MON-YYYY HH:MI:SS') where ' clause based on your deleted data';

출처: http://docs.oracle.com/cd/B19306_01/backup.102/b14192/flashptr002.htm

이미 위에서 배운 내용대로 답변이 제공됩니다. 플래시백은 DBA(아마도 )만 수행할 수 있지만 아래 쿼리를 사용할 수 있습니다.

 Insert into MANUAL_TRANSACTIONS
    (SELECT * FROM MANUAL_TRANSACTIONS AS OF 
    TIMESTAMP TO_TIMESTAMP('2018-07-23 06:41:59', 'YYYY-MM-DD HH:MI:SS'));

또는 하루 레코드에 대해쿼리를 실행할 수 있습니다.

Insert into MANUAL_TRANSACTIONS
(SELECT * FROM MANUAL_TRANSACTIONS AS OF 
TIMESTAMP TO_TIMESTAMP('2018-07-23', 'YYYY-MM-DD'));
select * from MY_TABLE as of timestamp to_timestamp('04-MAY-2017 12:30:00', 'DD-MON-YYYY HH:MI:SS') where ID=1822904;   --- 12Hr  Clock 

위의 질문은 저에게 도움이 됩니다.아래 쿼리를 사용하여 24시간 시간을 검색할 수도 있습니다.

select * from MY_TABLE as of timestamp to_timestamp('04-MAY-2017 13:30:00', 'DD-MON-YYYY HH24:MI:SS') where ID=1822904;

예, 플래시 백 쿼리를 사용할 수 있습니다.Oracle Flashback Query(SELECT ASOF) 사용은 실행 취소 공간이 충분히 크고 실행 취소 보존이 충분하다고 가정합니다.실행 취소가 이미 해제된 경우 복제본 데이터베이스에서 복원 및 복구를 수행하고 데이터를 원래 데이터베이스에 복사해야 할 수 있습니다.TSPITR, TableSpace Point In Time Recovery도 선택합니다.이것은 데이터베이스가 보관 로그 모드에서 실행되고 백업이 사용 가능한 경우에만 가능합니다.

를 사용할 수 .Table Point In Time Recovery(PITR):

RECOVER TABLE 'SCHEMA'.'TAB_NAME'
  UNTIL TIME xxxxyyy
  AUXILIARY DESTINATION '/u01/aux'  
  REMAP TABLE 'SCHEMA'.'TAB_NAME':'TAB_NAME_PREV';

해당 시점의 데이터를 사용할 수 있습니다.

SELECT * FROM SCHEMA.TAB_NAME_PREV;

TABLE_NAME에 삽입(타임스탬프 기준으로 TABLE_NAME에서 * 선택)(Sysdate - 4/24)

에 Oracle을 수 좋은 restore pointPro Oracle Database 12C Administration book에 따르면 테이블에 대한 작업을 수행하기 전에restore point다음 행을 사용합니다.

CREATE RESTORE POINT <your_key_point_name>;

복원 지점이 있는 복구 테이블의 경우 다음을 사용할 수 있습니다.

FLASHBACK TABLE <[your_schema.]your_table_name> TO RESTORE POINT <your_key_point_name>;

이 외에도 위의 모든 대답은 "사용하여 복구하는 것에 대한 것입니다.FLASHBACK두 가지 핵심 사항을 고려하는 것을 잊었습니다.

  1. 사용하기 위한FLASHBACK.
  2. 행을 복구하기 전에FLASHBACK테이블에서 행 이동을 활성화해야 합니다(사용).ALTER TABLE <[your_schema.]your_table_name> enable ROW MOVEMENT). 오라클 문서 링크에 따르면:

Flashback Table을 사용하려면 먼저 테이블에서 행 이동을 활성화하여 플래시백하거나 이전 상태로 되돌려야 합니다.

FLASHBACK TABLE <TABLE_NAME> TO TIMESTAMP(TO_DATE('27-APR-2014 23:59:59','DD-MON-YYYY HH24: MI: SS'));

테이블의 데이터를 지정된 시간으로 복원합니다(테이블이 잘리지 않은 경우).

당신의 경우:

플래시백 테이블 Manual_Transactions To Timestamp(TO_DATE('27-APR-2014 23:59:59', DD-MON-YYYH24:MI:SS');

이 쿼리를 사용합니다.

Insert into MANUAL_TRANSACTIONS
(SELECT * FROM MANUAL_TRANSACTIONS AS OF 
TIMESTAMP TO_TIMESTAMP('2014-04-27 11:59:59 PM', 'YYYY-MM-DD HH:MI:SS PM'))

몇 가지 옵션이 있습니다.

  1. 다음으로 플래시백 쿼리

    TIMESTAMP XX의 테이블에서 *를 선택하여 _delete 앞에 테이블 생성;

  2. 로그마이너: Oracle 보충 로그가 활성화된 경우 삭제 문에 대한 undo sql을 얻을 수 있습니다.

로그 파일을 다시 전환하여 최소 redo 작업 변경 시스템 스위치 로그 파일을 가져옵니다.

마지막으로 작성된 보관 로그 마이닝

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';
  1. Oracle PRM-DUL이 마지막 옵션입니다.Oracle 블록에서 삭제된 행 조각은 항상 삭제된 마스크로 행 플래그로 표시되며 Oracle 데이터 블록 스캔을 통해 행 조각을 읽을 수 있습니다. PRM-DUL은 전체 테이블을 스캔하여 삭제된 모든 레코드/행 조각을 찾아 플랫 파일에 쓸 수 있습니다.

당신이 시도할 수 있는 것은:

  1. ora-01555 스냅샷이 너무 오래되어 Oracle 10g에서 사용할 수 있는 플래시백 쿼리가 실패할 수 있습니다.
  2. redo logminer, mine redo, 그리고 undo sql을 찾을 수 있습니다.
  3. 오라클 블록을 검색하고 삭제된 행 조각까지 찾을 수 있는 prm-recovery 툴(오라클용 상용 복구 툴)

언급URL : https://stackoverflow.com/questions/23334495/recovering-deleted-rows-from-oracle-table

반응형