중화사전망 - 구한말 사전 - 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;

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') ) 듀얼에서;