중화사전망 - 구한말 사전 - Oracle의 플래시백 소개
Oracle의 플래시백 소개
1. 실행 취소 보존 시간은 플래시백이 필요한 데이터를 재구성할 수 있을 만큼 크게 설정되어야 합니다.
ALTER SYSTEM SET UNDO_RETENTION=SECONDS; 초 값은 실행 취소가 수행되는 시간(초)입니다. 데이터는 유지됩니다.
플래시백 보기는 실행 취소 보관 간격에 따라 제한됩니다.
2. DBMS_FLASHBACK 패키지는 수요 인터페이스를 제공합니다
call dbms_flashback.enable_at_time ('2010-10-19:11:00:00');
call dbms_flashback.disable();
-------------------------
enable_at_time: 세션 수준 플래시백 활성화, 이미지 시간은 지정된 타임스탬프에 가장 가까운 scn으로 설정됩니다.
enable_at_system_change_number: 데이터베이스를 지정된 scn 번호로 플래시백합니다.
get_system_change_number: 현재 scn을 반환합니다.
비활성화: 이 저장 프로시저를 사용하면 전체 세션에 대한 플래시백을 중지하고 현재 시점의 데이터 상태로 되돌릴 수 있습니다.
---------
활성 트랜잭션이 있는 경우 dbms_flashback.enable 저장 프로시저를 실행할 수 없으며 이 패키지를 sys ID로 실행할 수 없습니다.
DBMS_FLASHBACK.ENABLE_AT_TIME을 사용하기 전에 NLS_DATE_FORMAT의 정확성을 설정해야 합니다. Oracle의 기본값은 날짜까지 정확합니다.
3. >
실제로 Oracle은 내부적으로 scn을 사용합니다. as를 타임스탬프로 지정하더라도 Oracle은 이를 scn으로 변환합니다. 즉, SYS 아래에 SMON_SCN_TIME 테이블이 있습니다.
시스템은 5분마다 시스템 타임스탬프와 scn 간의 일치 항목을 생성하여 sys.smon_scn_time 테이블에 저장합니다. 이 테이블은 이후 시스템 타임스탬프와 scn 간의 일치하는 레코드 1440개를 기록합니다. 이 테이블에는 가장 최근의 1440개 레코드만 유지되므로, 현재 타임스탬프 방식을 사용하면 최근 5일 이내의 데이터만 플래시백할 수 있습니다(시스템이 중단이나 종료 및 재시작 없이 지속적으로 실행된다는 가정). SYS.SMON_SCN_TIME에는 최대 1440개의 레코드가 있습니다. 최대 레코드 수는 이렇게 계산됩니다. ORACLE은 평균 5분마다 테이블 데이터를 동기화하며, 최근 5일간의 레코드를 최대로 저장하므로 12(시간당 업데이트 수) * 24 * 와 같습니다. 5 = 1440.
SQL로 확인할 수 있습니다:
Sql 코드
select scn, to_char (time_dp, 'yyyy-mm-dd hh24: mi: ss') from sys.smon_scn_time;
10g에서는 타임스탬프와 SCN의 변환을 수행하기 위해 scn_to_timestamp()와 timestamp_to_scn() 두 가지 함수가 제공됩니다.
다음은 플래시백을 사용하여 보여줍니다.
1. 데이터베이스에 로그인합니다.
SQL 코드
C:\sqlplus tivan/tivan
SQL*Plus: 릴리스 10.2.0.1.0 - 10월 19일 화요일 22:24 생산 : 2010년 3월
저작권(c) 1982, 2005, Oracle. 모든 권리 보유.
연결 대상:
Oracle Database 10g Enterprise Edition 릴리스 10.2.0.1 .0 - 프로덕션
파티셔닝, OLAP 및 데이터 마이닝 옵션 사용
2. 테이블의 기록을 봅니다.
SQL 코드
t1의 SQL 선택 개수(*)
2;
COUNT(*)
------------
8302
3. 모든 기록 제출을 삭제합니다.
SQL 코드
t1에서 SQL 삭제
2;
8302개의 행이 삭제되었습니다.
SQL 커밋;
제출이 완료되었습니다.
4. 현재 SCN 얻기
삭제하기 전에 SCN을 정확히 알 수 있다면 플래시백 쿼리를 시도해 볼 수 있습니다.
SQL 코드
SQL은 듀얼에서 dbms_flashback.get_system_change_number를 선택합니다.
GET_SYSTEM_CHANGE_NUMBER
------------ ---------- -------------
1482649
scn 1482600 기준 t1의 SQL 선택 개수(*) ;
COUNT( *)
---------
8302
SCN=1482600일 때 모두 t1 테이블의 레코드는 여전히 존재합니다.
5. 플래시백을 사용하여 데이터를 복구하세요.
확인 및 확인:
SQL 코드
t1에 SQL 삽입 select * from t1 as of scn 1482600;
8302가 되었습니다. 잘 만들어졌습니다.
SQL 커밋;
제출이 완료되었습니다.
결과는 OK
또는 다음과 같이 조작할 수도 있습니다
Sql 코드
SQLflashback table t1 to scn 1482600; p>
SQL 커밋;
커밋이 완료되었습니다.
--드롭 테이블 t1에 대한 작업 플래시백
SQL 드롭 테이블 t1;
SQLCOMMIT ;
SQL 플래시백 테이블 t1to before drop;
SQLcommit;
SCN을 가져오는 방법은 timestamp_to_scn() 함수를 사용할 수 있습니다. 예:
SQL 코드
select timestamp_to_scn(to_timestamp('2010-10-19 21:00:00', 'YYYY-MM-DD HH:MI:SS') ) 듀얼에서;