-- 테이블을 조회하고 UPDATE하려 합니다.
SELECT SALARY -- 3800
FROM HR.EMPLOYEES
WHERE EMPLOYEE_ID = 188;
--이렇게 UPDATE하려 했습니다.
UPDATE HR.EMPLOYEES SET SALARY = SALARY*10
WHERE EMPLOYEE_ID = 188;
-- 그런데 이렇게 UPDATE해 버렸습니다.
UPDATE HR.EMPLOYEES SET SALARY = SALARY*10;
COMMIT;
-- 테이블 전체를 UPDATE하고 COMMIT까지 해 버렸습니다.
SELECT SALARY -- 38000
FROM HR.EMPLOYEES
WHERE EMPLOYEE_ID = 188;
-- 모든 직원의 월급이 10배로 뛰었습니다. 복구해야 지요.(그냥 나둘까요?)
-- ORA_ROWSCN 는 Pseudocolumns 입니다. ORACLE이 만들어 주는 의사 컬럼 입니다.
SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) -- 2015-04-21 12:28:26.000000000
FROM HR.EMPLOYEES;
FLASHBACK TABLE HR.EMPLOYEES TO TIMESTAMP
TO_TIMESTAMP('2015-04-21 12:28:26.000000000', 'YYYY-MM-DD HH24:MI:SS.FF');
-- ORA-08189: 행 이동이 사용으로 설정되지 않았으므로 테이블을 플래시백할 수 없음
-- 위를 실행하면 메세지 같은 오류가 납니다.
ALTER TABLE HR.EMPLOYEES ENABLE ROW MOVEMENT;
-- 위와 같이 테이블을 수정합니다.
FLASHBACK TABLE HR.EMPLOYEES TO TIMESTAMP
TO_TIMESTAMP('2015-04-21 12:28:26.000000000', 'YYYY-MM-DD HH24:MI:SS.FF');
-- 다시 실행하면 복구가 됩니다.
-- 확인하면 UPDATE 이전으로 복구 되었습니다.
SELECT *
FROM HR.EMPLOYEES;
-- 테이블도 원래 상태로 되돌립니다.
ALTER TABLE HR.EMPLOYEES DISABLE ROW MOVEMENT;
감사합니다.
SELECT SALARY -- 3800
FROM HR.EMPLOYEES
WHERE EMPLOYEE_ID = 188;
--이렇게 UPDATE하려 했습니다.
UPDATE HR.EMPLOYEES SET SALARY = SALARY*10
WHERE EMPLOYEE_ID = 188;
-- 그런데 이렇게 UPDATE해 버렸습니다.
UPDATE HR.EMPLOYEES SET SALARY = SALARY*10;
COMMIT;
-- 테이블 전체를 UPDATE하고 COMMIT까지 해 버렸습니다.
SELECT SALARY -- 38000
FROM HR.EMPLOYEES
WHERE EMPLOYEE_ID = 188;
-- 모든 직원의 월급이 10배로 뛰었습니다. 복구해야 지요.(그냥 나둘까요?)
-- ORA_ROWSCN 는 Pseudocolumns 입니다. ORACLE이 만들어 주는 의사 컬럼 입니다.
SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) -- 2015-04-21 12:28:26.000000000
FROM HR.EMPLOYEES;
FLASHBACK TABLE HR.EMPLOYEES TO TIMESTAMP
TO_TIMESTAMP('2015-04-21 12:28:26.000000000', 'YYYY-MM-DD HH24:MI:SS.FF');
-- ORA-08189: 행 이동이 사용으로 설정되지 않았으므로 테이블을 플래시백할 수 없음
-- 위를 실행하면 메세지 같은 오류가 납니다.
ALTER TABLE HR.EMPLOYEES ENABLE ROW MOVEMENT;
-- 위와 같이 테이블을 수정합니다.
FLASHBACK TABLE HR.EMPLOYEES TO TIMESTAMP
TO_TIMESTAMP('2015-04-21 12:28:26.000000000', 'YYYY-MM-DD HH24:MI:SS.FF');
-- 다시 실행하면 복구가 됩니다.
-- 확인하면 UPDATE 이전으로 복구 되었습니다.
SELECT *
FROM HR.EMPLOYEES;
-- 테이블도 원래 상태로 되돌립니다.
ALTER TABLE HR.EMPLOYEES DISABLE ROW MOVEMENT;
감사합니다.
댓글 없음:
댓글 쓰기