플래시백 데이터 아카이브는 지정된 데이터베이스 개체에 대한 트랜잭션 데이터 변경 사항을 자동으로 추적하고 아카이브하는 기능을 제공합니다.
설명
플래시백 데이터 아카이브는 여러 테이블스페이스로 구성되며 추적된 테이블에 대한 모든 트랜잭션의 기록 데이터를 저장합니다. 데이터는 내부 기록 테이블에 저장됩니다. 실행 취소 데이터의 장기 저장을 제공하여 실행 취소 기반 플래시백 작업을 장기간에 걸쳐 수행할 수 있습니다. 내부 기록 테이블에 대한 엄격한 보호를 유지하고 기록 데이터를 단기간 유지하기 위해 그리고 장기간, Flash Data Archive는 히스토리 백업을 복원하지 않고 불러올 수 있는 옵션입니다.
실행에 필요한 권한
- FLASHBACK ARCHIVE ADMINISTER 시스템 권한이 있는 스키마는 PL/SQL 프로시저의 연결 해제 및 재연결을 실행할 수 있습니다.
- 테이블이 연결 해제되면 일반 사용자는 테이블에 대해 필요한 권한이 있는 경우 DDL 및 DML 문을 수행할 수 있습니다.
- FLASHBACK ARCHIVE ADMINISTER 시스템 권한에는 플래시백 데이터 아카이브를 생성해야 합니다.
- 플래시백 데이터 아카이브를 생성하려면 CREATE TABLESPACE 시스템 권한이 있어야 합니다.
- 기록 정보가 상주할 테이블스페이스에 대한 충분한 할당량을 확인합니다.
컨텍스트 정보는 트랜잭션 데이터와 함께 저장되므로 DBMS_FLASHBACK_ARCHIVE.SET_CONTEXT_LEVEL 프로시저를 사용하여 다음 매개변수 값 중 하나를 전달해야 합니다.
- 일반:USERENV 컨텍스트의 기본 감사 속성만 저장됩니다.
- ALL:SYS_CONTEXT 함수를 통해 사용자가 사용할 수 있는 모든 컨텍스트가 저장됩니다.
- 없음:컨텍스트 정보가 저장되지 않습니다.
이 경우 USERENV 및 사용자 정의 컨텍스트 값을 캡처하려면 ALL을 사용하십시오.
CONN sys@surya AS SYSDBA
EXEC DBMS_FLASHBACK_ARCHIVE.set_context_level('ALL');
테스트 및 구현
다음 예에서는 테이블스페이스 수준에서 FDA를 활성화하고 여러 테이블스페이스에 대해 특정 기간 동안 보존을 설정합니다. 또한 보존 기간 사이에 삭제된 플래시백 데이터 아카이브에서 데이터를 검색합니다. 의도는 FAD로 쉽게 과거 데이터를 얻는 것입니다. 이 기능을 활성화하지 않으면 기록 데이터를 얻기 위해 전체 데이터베이스를 복원해야 합니다. 복잡성을 가중시키는 것은 대규모 데이터베이스 시스템의 경우입니다.
예:
• 테이블스페이스 생성 명령어
SQL> CREATE TABLESPACE FBA DATAFILE size 500m autoextend on next 100m ;
테이블스페이스가 생성되었습니다.
• 기본 플래시백 데이터 아카이브(FDA)를 생성하려면 다음 명령을 실행하십시오.
SQL> CREATE FLASHBACK ARCHIVE DEFAULT FLA1 TABLESPACE FBA QUOTA 500M RETENTION 1 YEAR;
플래시백 아카이브가 생성되었습니다.
• Non-Default FDA 생성을 위해 다음 단계를 완료하십시오.
SQL> CREATE FLASHBACK ARCHIVE FLA2 TABLESPACE users QUOTA 400M RETENTION 6 MONTH;
플래시백 아카이브가 생성되었습니다.
• 생성된 FDA 목록 가져오기
소유자 이름 선택, flashback_archive_name,
flashback_archive#,
retention_in_days,
TO_CHAR(create_time, 'DD-MON-YYYY HH24:MI:SS') AS create_time,
TO_CHAR(last_purge_time, 'DD-MON-YYYY HH24:MI:SS') AS last_purge_time,
status
dba_flashback_archive에서
ORDER BY owner_name, flashback_archive_name;
OWNER_NAME FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# RETENTION_IN_DAYS CREATE_TIME LAST_PURGE_TIME 상태
SYS FLA1 1 365 16-DEC-2021 19:28:53 16-DEC-2021 19:28:53 DEFAULTSYS FLA2 2 180 16-DEC-2021 19:29:14 16-DEC-92021:피>
• 기본 FDA 설정 및 세부 정보 얻기
SQL> ALTER FLASHBACK ARCHIVE FLA1 SET DEFAULT ;
플래시백 아카이브가 변경되었습니다.
SELECT flashback_archive_name,
flashback_archive#,
tablespace_name,
quota_in_mb
dba_flashback_archive_ts
에서 ORDER BY flashback_archive_name;
FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# TABLESPACE_NAME QUOTA_IN_MB
FLA1 1 FBA 500
FLA2 2 사용자 400
SQL> SELECT *
FROM DBA_FLASHBACK_ARCHIVE_TABLEs
WHERE TABLE_NAME='EMPLOYEES'
AND OWNER_NAME='HR' ;
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME 상태
EMPLOYEES HR FLA1 SYS_FBA_HIST_92593 활성화됨
다음 테스트를 수행하고 작동 방식을 확인하십시오.
SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
세션이 변경되었습니다.
SQL>SQL> DUA에서 SYSDATE 선택;
SYSDATE
2021/12/16 19:39:31
SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
GET_SYSTEM_CHANGE_NUMBER
1964623
Employees 테이블에서 레코드 삭제 및 업데이트를 시도합시다.
SQL> DELETE FROM HR.EMPLOYEES WHERE EMPLOYEE_ID=192;
1행이 삭제되었습니다.
SQL> 커밋;
커밋이 완료되었습니다.
SQL>SQL>SQL>SQL> UPDATE HR.EMPLOYEES SET SALARY=12000 WHERE EMPLOYEE_ID=168;
커밋;
UPDATE HR.EMPLOYEES SET SALARY=12500 WHERE EMPLOYEE_ID=168;
커밋;
UPDATE HR.EMPLOYEES SET SALARY=12550 WHERE EMPLOYEE_ID=168;
COMMIT;1행이 업데이트되었습니다.
SQL> SQL>커밋 완료.
SQL> SQL>1행이 업데이트되었습니다.
SQL> SQL>커밋 완료.
SQL> SQL>1행이 업데이트되었습니다.
SQL> SQL>
커밋이 완료되었습니다.
- FDA를 사용하여 데이터를 비교하는 단계를 따르십시오.
SQL> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM HR.EMPLOYEES
AS OF TIMESTAMP TO_TIMESTAMP('2021/12/16 19:39:31','YYYY/MM/DD HH24:MI:SS')
MINUS
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM HR.EMPLOYEES;
EMPLOYEE_ID FIRST_NAME LAST_NAME
192 Sarah Bell
여기에서 FDA에서 삭제된 행을 볼 수 있습니다. VERSION_STARTSCN pseudcoumns를 사용하여 데이터를 가져올 수도 있습니다.
• SCN이 지정된 데이터
SQL> COL VERSIONS_STARTTIME FORMAT A40
SELECT VERSIONS_STARTTIME,
VERSIONS_STARTSCN,
FIRST_NAME,
LAST_NAME,
SALARY
FROM HR.EMPLOYEES VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2021/12/16 19:39:31','YYYY/MM/DD HH24:MI:SS') AND
SYSTIMESTAMP
WHERE
EMPLOYEE_ID=168;
VERSIONS_STARTTIME VERSIONS_STARTSCN FIRST_NAME LAST_NAME 급여
16-DEC-21 07.40.08.000000000 PM 1964648 LISA OZER 1250016-DEC-21 07.40.08.000000000 PM 1964646 LISA OZER 12000LISA OZER 1150016-DEC-21 07.40.08.00000000000 PM 1964650 LISA 12550
500 값 차이가 있는 급여 열에 대한 업데이트 문을 수행한 것처럼 급여 열에서 동일한 데이터에 대해 다른 버전의 행을 볼 수 있습니다.
DDL 문에 대한 제한 및 해결 방법(녹음의 발전 과정 캡처)
연결 해제/연결
더 복잡한 DDL(업그레이드, 테이블 분할 등)의 경우 PL/SQL 연결 해제 및 연결 절차를 사용하여 지정된 테이블에서 플래시백 데이터 아카이브를 일시적으로 비활성화할 수 있습니다. 연결 프로시저는 연결 후 스키마 무결성을 적용합니다. 기본 테이블과 기록 테이블 스키마는 동일해야 합니다. 연결 해제 및 연결 절차에는 FLASHBACK ARCHIVE ADMINISTER 권한이 필요합니다.
o 열 추가, 삭제, 이름 바꾸기 또는 편집o 파티션 삭제 또는 자르기
o 테이블 이름 바꾸기 또는 자르기(FBA 삭제가 있는 테이블은 ORA-55610 오류로 실패)
o 일부 변경(예:MOVE / SPLIT / CHANGE PARTITIONS) 메소드를 수행하려면 DBMS_FLASHBACK_ARCHIVE 패키지가 필요합니다.
다음 예에서 과거 데이터에 대한 FDA 테이블에서 DDL 활동을 수행하는 방법을 볼 수 있습니다. 제약 조건을 추가하는 데모 테이블 EMPLOYEES_FBA 생성
SQL> CREATE TABLE HR.EMPLOYEES_FBA AS SELECT * FROM HR.EMPLOYEES;
테이블이 생성되었습니다.
SQL> ALTER TABLE HR.EMPLOYEES_FBA ADD CONSTRAINT employee_pk PRIMARY KEY (employee_id);
표가 변경되었습니다.
데모 테이블에서 FDA를 활성화하고 일부 기록을 업데이트합니다.
SQL> ALTER TABLE HR.EMPLOYEES_FBA FLASHBACK ARCHIVE;
표가 변경되었습니다.
SQL> UPDATE HR.EMPLOYEES_FBA SET SALARY=10000 WHERE EMPLOYEE_ID=203;
1행이 업데이트되었습니다.
COMMIT;
커밋이 완료되었습니다.
테이블 제약 조건을 비활성화 및 활성화할 때 ORA-55610 프롬프트가 과거 트랙 데이터 테이블을 방지합니다.
SQL> ALTER TABLE HR.EMPLOYEES_FBA DISABLE CONSTRAINT EMPLOYEE_PK;
표가 변경되었습니다.
SQL> SQL> ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK;
ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK
*오류 1행:ORA-55610:기록 추적 테이블의 잘못된 DDL 문
이제 이러한 제한을 받을 때 진행하는 방법
*참고:테이블에 제약 조건(기본 키, 고유 키, 외래 키 또는 검사 제약 조건)을 추가하면 밑줄이 그어진 SYS_FBA_ 아카이브 테이블에 직접 액세스하지 않고 기록 데이터를 자동으로 읽을 수 없습니다.** 제약 조건 관리 및 테이블 기록 추적에 매우 주의하세요*
SQL> SELECT * FROM DBA_FLASHBACK_ARCHIVE_TABLES WHERE TABLE_NAME='EMPLOYEES_FBA';
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME 상태
EMPLOYEES_FBA HR FLA1 SYS_FBA_HIST_93946 활성화됨
DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA의 도움으로 우리는 이것을 달성할 수 있습니다.
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('HR','EMPLOYEES_FBA');
PL/SQL 절차가 성공적으로 완료되었습니다.
이제 다시 제약 조건을 활성화해 보세요.
SQL> ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK;
표가 변경되었습니다.
이제 DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA의 도움으로 제한을 다시 활성화하십시오.
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('HR','EMPLOYEES_FBA');
PL/SQL 절차가 성공적으로 완료되었습니다.
특정 시간 동안의 과거 데이터 삭제 SQL> ALTER FLASHBACK ARCHIVE FLA1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);
플래시백 아카이브가 변경되었습니다.
FDA 비활성화
SQL> ALTER TABLE HR.EMPLOYEES NO FLASHBACK ARCHIVE;
SQL> ALTER TABLE HR.EMPLOYEES_FBA NO FLASHBACK ARCHIVE;
FDA 중단
SQL> DROP FLASHBACK ARCHIVE FLA1;
결론
Flashback Data Archive 기능은 데이터 기록을 관리 및 유지하기 위한 중앙 집중식 통합 인터페이스와 새로운 규정을 준수하거나 변화하는 비즈니스 요구 사항에 적응하기 위해 이 기록 데이터를 추적하는 데이터베이스 관리를 위한 극적인 솔루션을 제공하는 자동화된 정책 기반 관리를 제공합니다.
전문가가 데이터베이스 여정을 안내해 드립니다.
피드백 탭을 사용하여 의견을 작성하거나 질문하십시오. 저희와 대화를 시작할 수도 있습니다.