http://blog.naver.com/nclovehs/150015593029
Oracle Flashback 테크놀로지
Oracle Flashback 테크놀로지를 이용하여 복구 시간을 수 시간 대에서 수 분 대로 단축할 수 있습니다.
여러 연구 결과에 의하면, 40%의 애플리케이션 장애가 운영자 또는 사용자의 실수 때문에 발생한다고 합니다. 사람은 실수할 수 밖에 없는 존재입니다. 이러한 실수를 피하기는 어려우며, 적절한 계획과 테크놀로지가 준비되어 있지 않은 이상 실수로부터 복구하기는 더더욱 어렵습니다. 사용자와 관리자의 실수는 "논리적" 데이터 손상을 초래하거나, IT 인프라스트럭처의 컴포넌트에 다운타임을 발생시킵니다. 개별 컴포넌트에 발생한 문제를 해결하는 것은 그리 어렵지 않습니다. 하지만 논리적 데이터 손상을 발견, 복구하는 것은 매우 많은 작업 시간을 필요로 하며 비즈니스 생산성에 막대한 피해를 끼칩니다. 전형적인 사용자 실수의 예로 중요한 데이터를 실수로 삭제하거나, 잘못된 데이터 또는 테이블을 삭제하는 경우를 들 수 있습니다.
사용자 실수에 대한 대처The Oracle Database 10g 아키텍처는 사용자 실수를 복구하기 위한 최신 테크놀로지를 제공하고 있습니다. Oracle Flashback 테크놀로지는 특정 시간을 기준으로 데이터를 확인할 수 있게 하는 새로운 기능입니다. Flashback 기능을 이용하면 과거 버전의 스키마 오브젝트 조회, 히스토리 데이터의 쿼리, 변경 분석 등의 작업을 수행하거나 온라인 상태에서 논리적 오류를 복구하기 위한 셀프-서비스 작업을 실행할 수 있습니다. Oracle Database 10g Flashback 테크놀로지는 사용자의 실수를 바로 만회할 수 있는 기회를 제공합니다!
Oracle9i에서 처음 소개된 Flashback Query는 사용자 에러로부터 복구하기 위한 단순하면서도 강력한 온라인 메커니즘을 제공합니다. 사용자는 데이터베이스의 구조를 변경하지 않은 상태에서 과거의 특정 시점을 기준으로 데이터를 조회할 수 있습니다. Oracle Database 10g는 Flashback Technology의 기능을 개선하여 데이터베이스, 테이블, 로우, 트랜잭션 레벨의 신속하고 편리한 복구 환경을 구현하였습니다. Flashback Technology는 변경된 데이터에만 작업을 실행할 수 있는 혁신적인 복구 기능을 제공합니다. 에러를 복구하는데 소요되는 시간은 에러가 발생하는데 걸린 시간과 동일합니다. Oracle 10g Flashback 테크놀로지는 Flashback Database, Flashback Table, Flashback Drop, Flashback Versions Query, Flashback Transaction Query 등의 기능을 포함하고 있습니다.
Flashback Database
Flashback Database는 오라클 데이터베이스를 과거 시점으로 되돌리고, 논리적인 데이터 손상 또는 사용자 실수로 인해 발생한 문제를 해결할 수 있게 합니다. Flashback Database는 데이터베이스를 위한 '되감기 버튼'과도 같습니다. 데이터베이스 백업본을 이용하여 복구 작업을 수행하지 않고도 데이터베이스를 과거의 시점으로 되돌릴 수 있습니다. 포인트-인-타임 복구 작업에는 테이프에 저장된 데이터베이스 백업을 복구하는 시간이 불필요하므로, 한층 신속한 복구가 가능합니다.
Flashback Database 기능은 RMAN, SQL*Plus에서 FLASHBACK DATABASE 커맨드를 이용하여 실행되며, 그 효과 면에서 일반적인 포인트-인-타임 복구 방식과 매우 유사합니다. 이 기능을 이용하면 과거 특정 시점으로 데이터베이스의 상태를 되돌릴 수 있습니다. Flashback Database 기능을 활성화하려면, 먼저 Flash Recovery Area를 설정해야 합니다. Flash Recovery Area는 Oracle Database 10g에 추가된 새로운 기능으로, 오라클 데이터베이스 복구 관련 파일 및 작업을 위한 통합적인 저장 공간으로 활용됩니다. 복구 영역에는 Flash Database 로그 이외에도 아카이브 리두 로그, RMAN 백업 등이 저장됩니다. Flash Recovery Area에 대한 자세한 정보는 "Oracle Backup and Recovery" 문서를 참고하시기 바랍니다.
오라클은 Flash Recovery Area 내에 Flashback Log를 자동 생성/관리합니다. Flash Recovery Area에는 쿼타(quota)가 설정되며, 따라서 Flashback Log에는 공간 제한이 적용됩니다. Flashback Log의 사이즈는 로그 저장 기간 동안의 데이터베이스 변경 과정에서 발생한 읽기/쓰기 작업량에 따라 크게 달라집니다. 오래된 블록 버전의 복사본은 Flashback Log에 기록됩니다. 하루 동안 10%의 데이터베이스 블록이 업데이트되었다면, 24 시간 동안의 Flashback Log 사이즈는 전체 데이터베이스 용량의 10 분의 1 수준이 될 것입니다. 데이터베이스를 과거 시점으로 복구하는 과정에서 더 많은 디스크 공간이 필요한 경우, DBA는 디스크 쿼타를 다이내믹하게 확장할 수 있습니다.
Flashback은 Data Guard 환경의 신속한 사용자 에러 복구를 지원합니다. Flashback Database는 프라이머리/스탠바이 데이터베이스에서 모두 사용 가능합니다. 관리자가 스탠바이 데이터베이스로 페일오버를 시도했지만 (Real Time Apply가 활성화되어 있어) 사용자가 실수한 작업 내용이 이미 스탠바이 데이터베이스에 반영되어 버렸다면, 관리자는 스탠바이 데이터베이스에서 바로 포인트-인-타임 복구를 수행할 수 있습니다.
Flashback Database를 활성화하는 경우 수반되는 성능 오버헤드는 2% 미만에 불과합니다. 운영 데이터베이스의 성능을 조금이라도 희생하는 것을 원하지 않는 관리자들도 있겠지만, Flashback Database가 제공하는 혜택을 먼저 고려해 보아야 합니다. 데이터베이스를 수 시간이 아닌 수 분 내에 복구할 수 있다면, 그리고 수백만 달러에 달하는 회사의 매출 손실을 방지할 수 있다면, 2%의 리소스를 Flashback Database에 주는 것이 아깝다고 할 수 있을까요? Flashback Database 기능이 제공하는 혜택이 아래와 같습니다.
백업 복구 시간의 단축. . 데이터베이스가 심각한 문제로 인해 다운되었을 때 복구에 오랜 시간이 걸린다면 엄청난 매출 손실이 발생할 수 있습니다.
스탠바이 데이터베이스에 리두 로그를 적용하는데 걸리는 지연 요소를 제거. Flashback Database는 Data Guard와 긴밀하게 통합되어 있습니다. 스탠바이 데이터베이스를 쉽고 빠르게 임의의 과거 시점으로 "플래시백" 처리하는 것이 가능합니다. 따라서 리두 로그를 적용하는 작업이 불필요합니다.
예기치 않은 에러의 해결. Flashback Database는 오라클 데이터베이스의 연속적인 스냅샷을 제공합니다. 데이터베이스는 특정 SCN 또는 타임스탬프의 시점으로 복구될 수 있습니다.
Flashback Table
사용자 또는 애플리케이션 에러가 발생했을 때, 문제가 발생하기 이전의 특정 시점으로 하나 또는 여러 개의 테이블을 복구해야 할 수 있습니다. Flashback Table은 테이블을 과거의 특정 시점으로 쉽고 빠르게 (온라인 상태에서) 복구하는 기능을 제공합니다. Flashback Table은 테이블을 복구하면서 인덱스, 트리거, 제약조건 등의 속성을 자동으로 유지합니다. 그러므로 DBA가 애플리케이션 레벨의 속성을 별도로 복구해 줄 필요가 없습니다. Flashback Table을 이용하면 (상대적으로 복잡한) 포인트-인-타임 복구 작업을 수행할 필요가 없습니다. ORDERS, ORDER_ITEMS 테이블을 7월 7일 오후 2:33 시점으로 복구하는 명령의 예가 아래와 같습니다.
FLASHBACK TABLE orders, order_items TO TIMESTAMP (JUL-07-2003, 02:33:00);
Flashback Query와 마찬가지로, Flashback Table은 언두(undo) 데이터를 이용하여 테이블을 복구합니다. 따라서 Flashback Table 작업이 성공적으로 실행되려면 언두 데이터가 사용 가능해야 합니다. Automatic Undo Management 기능의 UNDO_RETENTION 초기화 매개변수를 이용하면 언두 데이터를 얼마나 오랫동안 보존할 것인지 설정할 수 있습니다. 이 매개변수와 언두 테이블스페이스의 사이즈를 적절하게 설정함으로써, Flashback Table을 이용하여 테이블을 복구할 수 있는 시간 여유를 조정할 수 있습니다.
Flashback Table은 사용자 실수를 복구하기 위한 DBA 툴로 활용되는 한편으로, 사용자에 의해 자신의 실수를 복구하기 위한 셀프-서비스 툴로 활용될 수도 있습니다. 애플리케이션 개발자는 Flashback Table 기능을 커스텀 애플리케이션에 구현할 수 있습니다. 미디어를 이용한 복구 방식과 비교했을 때, 이 방법은 사용 편의성, 가용성, 신속성 등의 측면에서 한층 뛰어난 효과를 제공합니다. Flashback Table의 혜택:
온라인 복구 작업의 수행
타임스탬프 또는 SCN을 기준으로 테이블의 모든 데이터를 과거의 시점으로 복구
인덱스, 트리거 등 애플리케이션과 관련된 전체 테이블 속성을 자동으로 복구
분산 환경의 원격 상태 정보를 유지. 예를 들어, 복제 작업에서 요구하는 모든 테이블의 변경 작업을 플래시백 처리.
제약조건을 통해 정의된 데이터 무결성을 보장. 오라클은 모든 종속 오브젝트 정보와 참조 무결성을 보존함.
플래시백 작업 이후 다시 원래 상태로 복구하는 것이 가능함.
Flashback Drop사용자와 DBA 모두에게 있어 실수로 오브젝트를 드롭(drop) 처리하는 경우는 흔하게 발생합니다. 사용자들이 실수를 깨달았을 때에는 이미 때가 늦습니다. 과거에는 이렇게 드롭 처리된 테이블, 인덱스, 제약조건, 트리거 등을 쉽게 복구할 수 있는 방법이 없었습니다. Flashback Drop은 Oracle Database 10g 환경의 오브젝트 드롭 작업을 위한 안전망을 제공합니다. 사용자가 테이블을 드롭하면, 오라클은 드롭된 오브젝트를 Recyble Bin에 보관합니다.
Recycle Bin이란 무엇입니까?
Recyble Bin은 드롭된 오브젝트가 저장되는 가상 컨테이너입니다. 실제로 드롭된 오브젝트들은 이전과 동일한 공간을 점유하고 있습니다. 예를 들어 EMP 테이블이 USERS 테이블 스페이스에서 생성되었다면, EMP 테이블은 드롭된 이후에도 USERS 테이블스페이스에 위치합니다. 드롭된 테이블과 인덱스, 제약조건, 네스티드 테이블(nested table), 기타 종속 오브젝트들은 이동되지 않으며, 다만 "BIN$$"라는 접두어를 사용하여 이름만 변경됩니다. 드롭된 테이블의 데이터에 액세스하는 것도 가능하며, 심지어 Flashback Query를 수행할 수도 있습니다. 각 사용자는 Recycle Bin의 오브젝트에 대해 드롭되기 전의 상태와 동일한 접근 권한을 가집니다. 드롭된 오브젝트는 RECYCLEBIN 뷰를 통해 조회할 수 있습니다. Recycle Bin의 오브젝트는 드롭된 오브젝트의 오너(owner)가 PURGE 커맨드를 이용하여 영구적으로 삭제할 때까지 보존됩니다. Recycle Bin 오브젝트는 사용자 쿼타에 포함되어 계산됩니다. 하지만 Flashback Drop은 관리 부담을 수반하지 않습니다. 사용자가 새로운 테이블을 추가하거나 테이블 스페이스가 CREATE/INSERT 작업 중에 파일 사이즈를 확장하여 쿼타가 초과되는 경우, 공간 재확보를 위한 프로세스가 실행되고
Recycle Bin의 오브젝트들은 자동으로 삭제 처리됩니다.
the tablespace needs to extend its file size to accommodate create/insert operations.
엉뚱한 테이블을 드롭 처리하셨습니까? 걱정하지 마십시오. Flashback Drop을 이용하면 간단하게 복구할 수 있습니다.
Flashback Query
Oracle9i에서 처음 소개된 Flashback Query는 과거 시점의 데이터를 조회하는 기능을 제공합니다. 기본적으로 데이터베이스는 가장 최근에 커밋된 데이터를 기준으로 작업을 수행합니다. 하지만 과거의 특정 시점을 기준으로 데이터베이스를 조회하고자 한다면, Flashback Query 기능을 이용할 수 있습니다. Flashback Query는 특정 시점 또는 SCN(System Change Number)을 기준으로, 해당 시점에 커밋된 데이터를 조회할 수 있게 합니다. Flashback Query 메커니즘은 Automatic Undo Management를 이용하는 경우 가장 효과적으로 동작합니다.
오라클 데이터베이스는 언두(undo)를 중요한 데이터베이스 오브젝트로 관리합니다. 언두 데이터는 영구적으로 저장/관리되며 데이터베이스 시스템에 크래쉬, 셧다운이 발생하는 경우에도 유지됩니다. 또 다른 데이터베이스 오브젝트와 함께 데이터베이스 버퍼 캐시를 공유하므로 성능 보장이 가능합니다. 오라클 데이터베이스는 트랜잭션이 커밋된 이후에도 언두 데이터를 관리하고, 필요한 경우 논리적 손상으로부터 복구할 수 있게 합니다.
오라클 데이터베이스의 관리자는 보존할 언두 데이터의 양을 명시적으로 지정할 수 있습니다. 시스템은 새로운 트랜잭션의 언두 데이터를 생성하기 위해 만료된 언두 데이터를 자동으로 삭제합니다. 언두 데이터의 보존 기간은 롱-러닝(long-running) 쿼리의 실행 시간 또는 논리적 손상에 대한 복구 요구사항에 따라 다르게 설정됩니다. 또는 언두 보존 기간을 설정하지 않고 데이터베이스가 알아서 최적의 보존 정책을 관리하도록 할 수도 있습니다. 그러면 데이터베이스는 롱-러닝 쿼리에 대한 실행 시간과 논리적 손상의 복구를 최대한 보장할 수 있는 방안을 자동으로 적용합니다. 디폴트 상태에서 언두 데이터의 보존은 보장되지 않습니다. 시스템은 현재 진행 중인 트랜잭션의 언두 데이터 기록을 위해 필요한 경우, 언제든 오래된 언두 데이터를 만료 처리할 수 있습니다.
Oracle Database 10g Release 1부터는 UNDO_RETENTION이 5 일 이상으로 지정되어 있는 경우, 5 일 또는 그 이상 경과한 과거의 데이터를 쿼리할 수 있는 기능이 추가되었습니다. 오라클은 Undo Tablespace 데이터파일에 충분한 공간이 남아 있는 한, 언두 데이터를 유지합니다. 데이터베이스에서 Flashback Query와 기타 언두 데이터 관련 플래시백 기능을 활성화하기 위한 방법이 아래와 같습니다:
데이터베이스가 Undo Tablespace를 사용하고 있는지 확인합니다. Undo Tablespace를 사용하려면 UNDO_MANAGEMENT 초기화 매개변수를 AUTO로 설정해 놓아야 합니다.
가장 긴 실행 시간을 갖는 쿼리를 성공적으로 복구할 수 있는 시간, 또는 사용자 에러로부터 복구하기에 충분한 시간으로 UNDO_RETENTION 초기화 매개변수를 설정합니다.
만료되지 않은 언두 데이터가 덮어씌워지지 않도록, 언두 테이블스페이스에 RETENTION GUARANTEE 조건을 추가합니다.
Flashback Query 기능을 이용하면 과거의 데이터 시점의 데이터를 확인할 수 있을 뿐 아니라 데이터를 처리하는 방법을 선택하는 것도 가능합니다. 분석 작업을 수행한 후에 모든 변경 작업을 취소하거나, 변경 데이터를 캡처하여 다른 작업에 활용할 수도 있습니다. Flashback Query 메커니즘은 다양한 상황에서 활용될 수 있는 유연성을 제공합니다. 몇 가지 활용 예가 아래와 같습니다:
과거 시점의 데이터를 조회.
현재 데이터와 과거 데이터를 비교. (개별 로우를 비교하거나 Intersection, Union 등의 조건을 이용하여 복잡한 비교 작업을 수행할 수도 있습니다.)
삭제, 변경된 데이터의 복구.
Flashback Versions Query
Flashback Versions Query는 테이블 로우에 대한 감사(audit) 작업을 수행하거나, 로우를 변경한 트랜잭션에 대한 정보를 조회하기 위해 사용됩니다. Flashback Versions Query는 쿼리가 실행된 시점과 과거의 특정 시점 사이에 존재했던 모든 커밋된 버전의 로우를 가져옵니다. 이를 위해 Automatic Undo Management가 활용됩니다.
Flashback Versions Query는 SQL의 확장 기능으로, 일정 기간 동안 특정 테이블에 존재했던 여러 버전의 로우를 한꺼번에 조회할 수 있게 합니다. 테이블에서 COMMIT 구문이 실행될 때마다 새로운 버전의 로우가 생성됩니다. Flashback Versions Query는 사용자가 정의한 기간 동안에 존재했던 모든 로우의 버전을 반환합니다. Flashback Version Query 기능을 사용하려면 SELECT 구문에 VERSIONS BETWEEN 절을 사용해야 합니다.
Flashback Versions Query는 로우 데이터에 대한 트랜잭션 상세 정보를 저장한 별도의 컬럼들을 제공합니다. DBA는 이 컬럼 정보를 이용하여 오라클 데이터베이스의 데이터가 어떻게 변경되었는지 확인할 수 있습니다.
VERSIONS_XID - 해당 로우 버전을 생성한 트랜잭션의 ID
VERSIONS_OPERATION - 해당 로우 버전을 생성한 작업(DELETE, INSERT, UPDATE 등)
VERSIONS_STARTSCN - 로우 버전이 처음 발생한 SCN
VERSIONS_ENDSCN -- 로우 버전이 변경된 SCN.
Flashback Versions Query는 DBA의 분석 및 감사 작업을 위한 강력한 툴로 활용됩니다. 또 DBA가 수작업에 의한 분석을 수행할 때에도 도움이 되지만, 애플리케이션 개발자에 의해서도 유용하게 사용될 수 있습니다. 예를 들어 감사를 목적으로 한 커스텀 애플리케이션을 구현하는 것이 가능합니다. 이렇게 구현된 애플리케이션을 이용하면 사용자들이 자신의 행동에 전적인 책임을 갖도록 할 수 있습니다.
Flasbhack Transaction Query
테이블의 데이터 변경 작업이 잘못 수행되었음을 나중에야 발견하는 경우가 있습니다. 변경 내역을 조사하기 위해, DBA는 플래시백 쿼리를 실행하여 특정 시점의 로우 데이터를 조회할 수 있습니다. 또는 좀 더 효율적인 방법으로, Flashback Versions Query 기능을 이용하여 일정 기간 동안의 로우 변경 내역과 트랜잭션 ID를 한꺼번에 확인할 수도 있습니다. 이때 DBA는 SELECT 구문에 VERSIONS BETWEEN 절을 적용하고, SCN 또는 타임스탬프를 기준으로 일정 기간의 로우 변경 히스토리를 조회합니다.
문제가 되는 트랜잭션을 발견했다면, 다시 Flashback Transaction Query 기능을 이용하여 해당 트랜잭션에 의해 수행된 다른 변경 사항을 확인합니다. 그리고 변경 사항을 복구하기 위한 언두(undo) SQL을 요청합니다. 이때 트랜잭션 히스토리와 언두 SQL을 확인하기 위해 사용되는 것이 바로 FLASHBACK_TRANSACTION_QUERY 뷰입니다.
잘못 실행된 트랜잭션을 완전히 취소하기 위해, 언두 SQL 구문을 수동으로 실행하고 사용자/애플리케이션 에러를 쉽게 복구할 수 있습니다. Flashback Transaction Query는 데이터베이스의 온라인 진단 범위를 확장하고, 분석 및 트랜잭션 감사 환경을 개선할 수 있게 합니다.
Oracle Database 10g Release 2의 새로운 기능
복구 포인트(Restore Point) 오라클 데이터베이스의 포인트-인-타임 복구 작업을 수행할 때, DBA는 먼저 데이터가 롤백할 시점 또는 SCN을 결정해야 합니다. Oracle Database 10g Release 2에서 지원되는 복구 포인트(restore point)를 이용하면 포인트-인-타임 복구 작업을 단순화할 수 있습니다. 복구 포인트는 SCN 또는 특정 시간을 대체하는 사용자 정의 이름(user-defined name)으로, Flashback Database, Flashback Table, Recovery Manager(RMAN) 등에 의해 사용되며, 커맨드라인, SQL*Plus, RMAN, 또는 Enterprise Manager에서 생성할 수 있습니다. 복구 포인트는 트랜잭션의 SCN 또는 실행 시점을 확인할 필요 없이, 사용자가 북마크한 데이터베이스 트랜잭션 이벤트를 바로 참조할 수 있게 합니다. 개런티드 복구 포인트(guaranteed restore point)를 이용하면 해당 복구 포인트로 되돌아가기에 충분한 플래시백 로그가 상시 유지됨을 보장할 수 있습니다. 다시 말해 개런티드 복구 포인트에 의해 참조되는 플래시백 로그는, 해당 복구 포인트가 삭제되기 전까지는 Flash Recovery Area에서 삭제되지 않습니다. 데이터베이스 배치 작업 또는 스키마 업그레이드와 같은 중요한 데이터베이스 변경 작업 수행 시 개런티드 복구 포인트를 활용하고, 변경 작업의 취소가 필요한 경우 바로 적용할 수 있습니다.
RESETLOGS와 무관한 Flashback Database 지원 "RESETLOGS와 무관한 Flashback Database"란, RESETLOGS 작업 이전에 생성된 플래시백 로그를 Flashback Database 작업에 활용할 수 있음을 의미합니다. Oracle Database 10g Release 2부터, RESETLOGS를 이용하여 데이터베이스를 오픈한 뒤에도 플래시백 로그가 유지됩니다. 이 기능은 RESETLOGS가 수행된 이후에 논리적인 오류를 발견했을 때 매우 유용합니다. Oracle Data Guard 환경에서 이 기능을 이용하면, 읽기/쓰기가 가능하도록 오픈된 물리적 스탠바이 데이터베이스에서 변경 사항을 플래시백 처리하고 다시 스탠바이 모드로 쉽게 돌아갈 수 있습니다. 스위치오버 작업 이후에 논리적 오류가 발견된 경우, 프라이머리/스탠바이 데이터베이스는 스위치오버 작업 이전의 SCN 또는 특정 시점으로 동시에 플래시백 처리될 수 있습니다.
요약
사용자 실수는 시스템 장애의 가장 중요한 원인 중 하나입니다. 이러한 실수를 피하기는 어려우며, 적절한 계획과 테크놀로지가 준비되어 있지 않은 이상 실수로부터 복구하기는 더더욱 어렵습니다. 여기서 '적절한' 테크놀로지란 바로 Oracle RAC 10g를 의미합니다. 왜 실행 시점에는 몇 조밖에 걸리지 않은 에러를 복구하는데 몇 시간, 몇 일씩 걸리는 것일까요? Flashback 테크놀로지는 변경된 데이터에 대해서만 즉각적으로 작업을 실행할 수 있는 혁신적인 복구 기능을 제공합니다. 결국 단 하나의 커맨드를 이용하여, 사용자 실수로 인해 발생한 논리적 오류를 완전하게 복구하는 것이 가능합니다. Flashback 테크놀로지는 복구 작업의 복잡성을 줄여줄 뿐 아니라, 예기치 않은 사용자의 실수로부터 복구하는데 걸리는 시간을 단축해 줍니다.