hyeonga_code
Database_65_DML 응용_FLASHBACK 본문
-- Advanced DML
---------------------------------------------------------------------------------------------------------
-- FLASHBACK
-- RECYCLEBIN 활용
-- FLASHBACK UNDROP
-- COMMIT 하기 전에 복구를 대비하여 UNDO 파일에 저장합니다.
-- UNDO DATA 활용 : 관리자가 UNDO DATA에 접근할 수 있습니다.
-- SELECT에서 UNDO 값을 확인합니다.
-- FLASHBACK QUERY : 특정 시점을 지정해야 합니다.
-- FLASHBACK VERSIONS QUERY : 시간 범위를 지정합니다.
-- FLASHBACK TRANSACTION QUERY : 복구하기 위해 실행해야 하는 명령어를 제공합니다.(UNDO SQL)
-- FLASHBACK TABLE : UNDO DATA가 존재하는 경우 특정 과거 시점을 지정하여 되돌릴 수 있습니다.
-- 유료 옵션입니다.
-- UNDO DATA ARCHIVE 활용 : 유료 옵션입니다.
-- FLASHBACK DATA ARCHIVE(Total Recall)
-- ARCHIVE_아카이브 : 보관, 백업
-- 목적
-- 감사용
-- 시세 등
-- 필수
-- 아카이브 전용 파일을 생성해야 합니다.
-- 준수 사항에 따라 분류해야 합니다.
-- 데이터를 업데이트하는 경우 이전 데이터를 자동으로 분류하여 저장되게 합니다.
-- FLASHBACK LOG FILE 활용 : DB 장애 복구 시 사용합니다.
-- FLASHBACK DATABASE : DB 전체에 대한 FLASHBACK을 지원합니다.
-- 사용할 수 있는 기능을 확인합니다.
SELECT *
FROM v$option
WHERE parameter LIKE 'Flashback%';
---------------------------------------------------------------------------------------------------------
-- FLASHBACK
-- FLASHBACK QUERY
-- 지정된 시점의 모든 데이터를 QUERY합니다.
-- FLASHBACK VERSION QUERY
-- 두 시간대 사이에 있는 행의 모든 버전을 확인합니다.
-- 행을 변경한 트랜잭션을 확인합니다.
-- FLASHBACK TRANSACTION QUERY
-- 트랜잭션에 의해 수행된 모든 변경 사항을 보고 필요한 경우 "UNDO" 명령으로 트랜잭션을 롤백합니다.
-- 수행할 사용자에게 권한을 설정하고 추가 로그를 활성화해야 합니다.
-----< 관리자 >-----
-- 실습 준비
ALTER database ADD SUPPLEMENTAL log data;
/*
Database이(가) 변경되었습니다.
*/
ALTER database ADD SUPPLEMENTAL log data (primary key) columns;
/*
Database이(가) 변경되었습니다.
*/
GRANT EXECUTE ON dbms_flashback TO hr;
/*
Grant을(를) 성공했습니다.
*/
GRANT SELECT ANY TRANSACTION TO hr;
/*
Grant을(를) 성공했습니다.
*/
-----< 인사 관리 >-----
-- 178번 사원의 급여를 조회합니다.
SELECT salary FROM employees
WHERE employee_id=178;
-- 급여를 12000으로 수정합니다.
UPDATE employees
SET salary=12000
WHERE employee_id=178;
/*
1 행 이(가) 업데이트되었습니다.
*/
-- 178번 사원의 급여를 조회합니다.
SELECT salary FROM employees
WHERE employee_id=178;
-- COMMIT합니다.
COMMIT;
/*
커밋 완료.
*/
-- 5분 전의 급여를 조회합니다.
SELECT salary FROM employees
AS OF TIMESTAMP sysdate-5/(24*60)
WHERE employee_id=178;
-- 커밋된 값을 되돌릴 수 있습니다.
UPDATE employees
SET salary=( SELECT salary FROM employees
AS OF TIMESTAMP sysdate-5/(24*60)
WHERE employee_id=178)
WHERE employee_id=178;
/*
1 행 이(가) 업데이트되었습니다.
*/
-- 178번 사원의 급여를 조회합니다.
SELECT salary FROM employees
WHERE employee_id=178;
-- FALSHBACK VERSIONS QUERY
-- 178번 직원의 급여를 수정합니다.
UPDATE employees
SET salary=10000
WHERE employee_id=178;
/*
1 행 이(가) 업데이트되었습니다.
*/
-- 178번 사원의 급여를 조회합니다.
SELECT salary FROM employees
WHERE employee_ID=178;
-- 커밋합니다.
COMMIT;
/*
커밋 완료.
*/
-- 버전 쿼리를 확인합니다.
SELECT versions_starttime, versions_endtime, salary, versions_xid
FROM employees
versions BETWEEN timestamp minvalue AND maxvalue
WHERE employee_id=178;
-- 전 상태로 되돌릴 수 있는 명령어를 알 수 있습니다.
SELECT undo_sql FROM flashback_transaction_query
WHERE xid='06001F0002020000';
-- 현재 실습 환경 사용자이름 : AA
-- 명령어를 그대로 실행합니다.
UPDATE "AA"."EMPLOYEES" SET "SALARY"='7000' WHERE ROWID='AAAE/tAAEAAABiEAAO';
/*
1 행 이(가) 업데이트되었습니다.
*/
-- 178번 사원의 급여를 조회합니다.
SELECT salary FROM employees
WHERE employee_id=178;
-- 커밋합니다.
COMMIT;
/*
커밋 완료.
*/
-- 버전 쿼리를 확인합니다.
SELECT versions_starttime, versions_endtime, salary, versions_xid
FROM employees
versions BETWEEN timestamp minvalue AND maxvalue
WHERE employee_id=178;
-- DML 트리거
-- DML 문이 실행될 때 자동으로 동작하는 프로그램 단위입니다.
-- 트리거 : 데이터베이스 이벤트에 반응하여 실행되는 프로그램 단위입니다.
'Oracle Database' 카테고리의 다른 글
Database_67_Subquery 응용_인라인 뷰_In-Line View_Top-N 분석, WITH 절 (0) | 2023.08.20 |
---|---|
Database_66_Subquery 응용_다중 열 서브쿼리, 쌍 비교, 비쌍 비교, 스칼라 서브쿼리, Correlated 상호관련 서브쿼리, EXISTS 연산 (0) | 2023.08.20 |
Database_64_DML 응용_MERGE UPSERT (0) | 2023.08.20 |
Database_63_DML 응용_PIVOTING INSERT (0) | 2023.08.20 |
Database_62_DML 응용_다중 INSERT, 조건 ALL INSERT, 조건 FIRST INSERT (0) | 2023.08.20 |