hyeonga_code

Database_65_DML 응용_FLASHBACK 본문

Oracle Database

Database_65_DML 응용_FLASHBACK

hyeonga 2023. 8. 20. 08:59
반응형

-- 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 문이 실행될 때 자동으로 동작하는 프로그램 단위입니다.
            -- 트리거 : 데이터베이스 이벤트에 반응하여 실행되는 프로그램 단위입니다.

반응형