집에서 사용할 제대로된 머그컵이 없어서 디앤샵에서 구입..
집보다는 회사에서 쓰기 좋을꺼 같긴한데..
회사에 사용하는 컵도 있고 해서.. ㅋㅋ
일단 가격도 괜찮고.. 깔끔해서.. 구입..
근데.. 손잡이 있는걸 살껄 그랬나?

'Story > Diary' 카테고리의 다른 글

Can't take my eyes off you~  (1) 2011.03.17
화이트데이 선물!!  (0) 2011.03.16
바이킹스 시식권  (0) 2011.03.12
오향족발...  (0) 2011.01.26
펑펑 눈이 내리는 날!  (0) 2011.01.11

아가씨 생일로 가게 되었던 안산쪽에 있던 바이킹스인데..
거기 계산하면서 내 명함을 넣었는데..
이런 이벤트에 걸릴 줄이야.. ㅋㅋㅋ
난 원래 이런거에 잘 걸리지 않기 때문에.. 설마 했던건데.. ㅋㅋ
명함을 딱히 쓸 때도 없고.. ㅋㅋ 훗.. 이제부터 열심히 넣어야겠어..
그래서 생긴 샐러드바 시식권으로 다시 한번 오게 되었다.
머 둘이서 샐러드바만 먹고 갔다.
그다지 크게 먹을껀 없지만 또 공짜로 생겼는데.. 와야지.. ㅋㅋ

이런건 자주자주 걸렸으면 하네~ ㅋㅋ

'Story > Diary' 카테고리의 다른 글

화이트데이 선물!!  (0) 2011.03.16
머그컵 구입  (0) 2011.03.16
오향족발...  (0) 2011.01.26
펑펑 눈이 내리는 날!  (0) 2011.01.11
털복숭이 ㅋㅋ  (2) 2011.01.09

지하철 경춘선이 생기면서 기차가 아니라 지하철로 춘천까지 갈 수 있게 되었는데...
노선이 생긴지 좀 되긴했지만 한번도 그쪽으로는 가본적이 없어서 낭군이랑 주말에 가기로 했다.
근데.. 그게.. 여행이였다.. 집이 산본이라.. 경춘선까지 올라가는데도.. 두어시간은 가야했고..
막상 경춘선을 타도.. 역 간격이 길어서. 한시간은 간거 갔다. ㅋㅋ
글구.. 경춘선에 왠 사람이 그렇게 많은지.. ㅋㅋ
다들 춘천으로 놀러가는거 갔긴했지만..
그렇게.. 3시간 가량을 간거 갔다.. ㅋㅋ


그렇게 오랜 시간을 지하철을 탔더니, 아침 10시에 나왔는데.. 이미 점심때고.. ㅋㅋ
결국 둘이 배고파서.. 가다 보이는 식당으로 바로 직행..
그래도 여기까지 왔는데.. 닭갈비는 먹어야지..
아주 진지하게 볶아서 다 먹었음. ㅋㅋ


그러고는 다들 간다는 남이섬으로 갔다.. ㅋㅋ
사실 남이섬은.. 몇번을 다녀오긴했지만.. ㅋㅋ
그렇게 많이 바뀐건 없다.. 날도 아직까지는 춥고..
3월인데.. 무슨.. 날씨가 이런지.. ;;


그리고 온통 중국인이 아니면 일본 관광객.. ;;
주말이라 바글바글.. ㅋㅋ
섬에 들어가고 나가는데.. 30분 이상 기다려서 배를 타야했다. ;;

그러고는 다시 경춘선을 타고 춘천 시내로 들어가서..
역을 한정거장 잘못내려서.. 쫌... 걸었지만.. 한시간 걸었나?
낭군 이러기야? 내가 내리자고 했잖아.. ㅡㅡ++
결국 그렇게 걸어서 찾아간 닭갈비 골목으로 가서.. 닭갈비는 안먹고.. 막국수만 한대접 저녁으로 먹음..
캬.. 막국수가 맛나드라고.. ㅋㅋ 사람도 완전 많고.. ㅋㅋ
식당 아줌마는 왜 닭갈비를 안먹냐고 했지만..
우린 점심으로 먹어서 사실. ㅋㅋㅋ

그렇게 배를 채우고.. 3시간 가량.. 집으로 왔다..
아.. 급피곤.. 집에오니.. 밤 10시...
죽을꺼 같음. ㅠㅠ

'Story > Trip' 카테고리의 다른 글

거제섬꽃축제  (0) 2011.11.05
경기 물향기수목원  (0) 2011.10.29
휴식이 필요해~  (0) 2010.08.07
[부산-태종대] 여기는 태종대~  (0) 2010.05.22
[부산-해운대] 올해의 마지막 황금연휴.. ㅠㅠ  (0) 2010.05.21

Oracle Flashback 기능 이란?

  DB 관리중에 실수로 데이타를 삭제하거나 데이타의 값을 잘못 변경 하는 실수가 가끔 발생을 합니다.

  이러한 오류를 바로 인식할 경우는 Rollback이라는 명령으로 바로 전에 수행한 작업을 원상복귀시킬 수 있지만, COMMIT을 한 이후 시점이나, 한참 시간이 지난 후에 알았다면 간단하게 복구하기가 난감 합니다.

  이러한 경우에 특정한 시간 또는 시점으로 되돌릴 수 있는 기능이 Oracle Flashback 기능 입니다.

  간단하게 말해서 Flashback 기능은 특정한 과거시점의 질의를 실행할 수 있게 해 줍니다. 데이타베이스에 구조적인 변화를 가하지 않고 과거 일정 시점의 데이타 상태를 확인할 수 있는 기능 입니다.

  일종의 오라클에서 지원하는 타임머신이라고 할 수 있죠.

Flashback을 사용하기 위한 요구조건

  자동 언두 관리 시스템을 사용해야 합니다. (UNDO_MANAGEMENT 파라미터를 AUTO로 설정)
    - UNDO_MANAGEMENT = AUTO

  이전의 어느 시점까지의 언두(UNDO)정보를 보유하여 Flashback Query를 수행할것인지 UNDO_RETENTION 파라미터를 설정해야 합니다.
    - ALTER SYSTEM SET UNDO_RETENTION=1800

  일반사용자가 Flashback 기능을 이용하기 위해서 DBMS_FLASHBACK 패키지에 대한 EXECUTE권한이 있어야 합니다.

Flashback 사용하기

  Flashback의 사용 방법은 과거시점의 특정 시간으로 사용하는 방법과 SCN(System Change Number)을 사용하는 방법이 있습니다.

  과거시점의 시간 사용: DBMS_FLASHBACK.ENABLE_AT_TIME(query_time IN TIMESTAMP);

  SCN 사용 : DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(query_scn IN NUMBER);

  과거시점의 시간을 지정하여 Flashback 기능을 사용 할 경우 오라클은 내부적으로 이를 SCN으로 전환하여 처리 합니다. 시간 정보를 SCN으로 Mapping하는 시간이 필요한데 통상 5분 주기로 이루어 집니다. 따라서, 시간으로 지정할때는 현재보다 5분이상 차이가 나는 과거시점을 지정해야 합니다.

  또한 Flashback 기능은 무한대로 이전의 데이터를 조회할 수 있는 기능이 아니고, 관리자가 UNDO_RETENTION 파라미터를 통해서 정해준 시간(초) 동안의 데이터를 조회할 수 있습니다. 디폴트 UNDO_RETENTION 시간은 10800(3시간) 입니다.

  그리고 Flashback data를 참고하는 경우엔 DML, DDL등의 작업을 직접 수행 할 수 없습니다.

Flashback 사용을 위한 환경설정

 
C:\> SQLPLUS /NOLOG
 
 
-- SYSDBA 권한으로 접속
SQL> CONN / AS SYSDBA
 
 
-- UNDO MANAGEMENT MODE 확인
SQL> SHOW PARAMETER UNDO;
NAME                        TYPE        VALUE
--------------------------- ----------- ---------
undo_management             string       AUTO
undo_retention              integer      10800
undo_suppress_errors        boolean      FALSE
undo_tablespace             string       UNDOTBS1
 
   
-- undo_management가 MANUAL로 되어있을경우 아래와 같이 변경하고 
-- UNDO 테이블스페이스를 생성하고 지정합니다..
SQL> ALTER SYSTEM SET UNDO_MANAGEMENT = AUTO
     SCOPE=SPFILE;
 
 
-- UNDO 테이블 스페이스 생성
SQL> CREATE UNDO TABLESPACE UNDOTBS2
     DATAFILE 'D:\oracle\oradata\oracle\UNDOTBS2.dbf' 
     SIZE 1000M;
 
 
-- UNDO 테이블 스페이스 지정
SQL> ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2
 
 
-- UNDO_RETENTION 시간을 변경하시면 
-- 실제 적용을 위해 5분정도 기다려야 합니다.
SQL> ALTER SYSTEM SET UNDO_RETENTION=1800
 
 
-- scott유저에게 DBMS_FLASHBACK EXEUCTE 권한 부여 
SQL> GRANT EXECUTE ON DBMS_FLASHBACK TO SCOTT;  
    

Flashback 사용예제

 
-- 테스트를 위해서 scott 유저에 접속을 합니다. 
SQL> CONN scott/tiger
 
 
-- emp 테이블 14건의 데이터 확인
SQL> SELECT * FROM emp;
14 개의 행이 선택되었습니다...
  
 
-- 데이터 삭제하기전의 날짜를 확인 합니다. 
-- Flashback을 이용하여 이 시점에서 데이터를 조회, 복구 할 것입니다. 
SQL> SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') 
     FROM DUAL;
 
TO_CHAR(SYSDATE,'YY
-------------------
2006-01-21 17:16:51
 
 
-- 데이터를 삭제 합니다. 
SQL> DELETE FROM emp;
14 행이 삭제되었습니다.
 
 
-- commit 수행
SQL> COMMIT;
 
 
-- 데이터 확인
SQL> SELECT * FROM emp;
선택된 레코드가 없습니다.
 
 
-- Flashback 과거시점의 시간사용 모드 Enable로 데이터 확인
SQL> EXEC DBMS_FLASHBACK.ENABLE_AT_TIME
     (TO_TIMESTAMP('2006-01-21 17:16:51', 'YYYY-MM-DD HH24:MI:SS'))'
 
 
-- 데이터를 확인 할 수 있습니다.
SQL>SELECT * FROM emp;
14 개의 행이 선택되었습니다.
 
 
-- Flashback Disable로 변경
SQL> EXEC DBMS_FLASHBACK.DISABLE;
PL/SQL 처리가 정상적으로 완료되었습니다.
 
 
-- Flashback Disable로 변경하면 데이터를 확인 할 수 없습니다.
SQL>SELECT * FROM emp;
선택된 레코드가 없습니다.
 
 
-- Flashback Disable 상태에서도 이전데이터를 보기위해서는 
-- 데이터 복구 작업을  진행해야 합니다. 
-- 아래는 삭제된 데이터 복구 예제 입니다.   
    

삭제된 데이터 복구

  Oracle9i Database Release 2이상 버전에서는 SELECT...AS OF 명령을 사용하여 쉽게 Flashback 데이터를 복구 할 수 있습니다.

  Oracle9i Database Release1 버전에서는 DBMS_FLASHBACK프로시저를 이용해서 데이터를 복구해야 합니다.

 
-- 삭제된 데이터 복구(오라클 버전 Release 9.2.0.1.0 실행)
SQL>INSERT INTO emp
    (SELECT * 
     FROM emp AS OF TIMESTAMP 
          TO_TIMESTAMP('2006-01-21 17:16:51', 'YYYY-MM-DD HH24:MI:SS'))
 
 
-- 복구된 데이터 확인
SQL>SELECT * FROM emp;
14 개의 행이 선택되었습니다.
 
  
-- 위에 복구된 데이타를 Rollback으로 지우고 DBMS_FLASHBACK 패키지를 이용해서 복구해 봅니다. 
-- 삭제된 데이터 복구
SQL> DECLARE 
    
     CURSOR emp_cursor is
       SELECT * FROM emp;
     
      v_emp emp%ROWTYPE;
      
    BEGIN
    
     DBMS_FLASHBACK.ENABLE_AT_TIME
     (TO_TIMESTAMP('2006-01-21 17:16:51', 'YYYY-MM-DD HH24:MI:SS'));
     
     OPEN emp_cursor;
     
     -- Flashback을 Disable했지만 커서(test_cursor)는 
     -- 여전히 과거시점의 데이터를 가지고 있습니다.
     DBMS_FLASHBACK.DISABLE;
                             
     LOOP
        FETCH emp_cursor INTO v_emp;
            EXIT WHEN emp_cursor%NOTFOUND;
            INSERT INTO emp 
            VALUES (v_emp.empno, v_emp.ename, v_emp.job, v_emp.mgr, 
                    v_emp.hiredate, v_emp.sal, v_emp.comm, v_emp.deptno);
     END LOOP;
     CLOSE emp_cursor;
     COMMIT;
    END;
    /
 
PL/SQL 처리가 정상적으로 완료되었습니다.

-- 복구된 데이터 확인
SQL>SELECT * FROM emp;
14 개의 행이 선택되었습니다. 

+ Recent posts