2022. 7. 25. 18:55ㆍServer의 세계/Oracle 관리실무
데이터의 값은 어떤 복잡한 경우에라도 생성자가 생성한 값이 유지되어야 한다.
모든 관계형 데이터베이스는 하드웨어 실패가 발생한 경우에 데이터베이스를 복구할 수 있도록 로깅 시스템을 사용한다. 이러한 유형의 복구 범위는 트랜잭션 단위로 묶여 있다. 트랜잭션은 데이터베이스 작업을 가장 작은 다위로서 INSERT, UPDATE, DELETE,SELECT 같은 하나 이상의 문장을 포함한다. 관계형 데이터베이스에 문제가 발생하였다면 복구과정에서 커밋되지 않은 트랜잭션들이 롤백된 후 데이터베이스에는 모두 커밋된 트랜잭션들만 남게 된다.
트랜잭션의 역할
1. 여러 사용자들에 의해서 발생하는 데이터 무결성을 위협하는 행동으로부터 데이터 무결성을 보호하는데 사용한다.
데이터 무결성을 위해, 데이터베이스는 한 사용자와 다른 사용자가 같은 데이터를 수정하는 경우 한 사용자가 개별적으로 해당 데이터를 변경할 수 있도록 해야 한다. 이를 위해 데이터베이스는 "락(LOCK)"을 사용한다. 문을 자물쇠로 잠그는 처럼 락은 데이터에 엑세스하는 특정 유형의 트랜잭션을 방지한다.
락(Lock)의 목적: 데이터의 일관된 무결성 유지. 즉, 성능저하는 발생시키지 않고 데이터의 질은 절대로 손상시키지 않으면서 데이터 무결성을 보장하기 위해서 시스템에 락을 사용하는 것이다.
일반적으로 데이터베이스에는 두 유형의 락이 존재한다.
1) 베타적인 락(Exclusive Lock) : 일반적으로 특정 데이터의 모든 엑세스를 금지하는 것이다. 또한 배타적인 락은 데이터 쓰기(Write) 작업을 위해서 사용자가 획득해야 하므로 쓰기 락(Write Lock)으로도 알려져 있다.
2) 공유락(Shared Lock) : 사용자가 데이터를 액세스할 때 일반적으로 사용한다. 많은 사용자들은 데이터 무결성을 위협하지 않고 동시에 같은 데이터를 액세스할 수 있으므로, 대부분의 사용자들은 동일 데이터에 공유락을 획득할 수 있다. 그러나 사용자가 변경 작업을 위해 특정 데이터를 액세스한 상태라면 변경은 되었으나 커밋이 되지 않았기 때문에, 해당 데이터에 공유 락이 설정되어 쓰기 작업을 위한 다른 사용자는 해당 데이터에 대해 배타적 락을 획득 할 수 없게 된다
같은 부분의 데이터를 액세스 하기 위해 경합하는 동안 사용자들이 락을 기다리는 유형의 문제를 "경합"이라고 한다.
오라클에서는 2가지 기본방법으로 락 경합으로 인해 미칠 영향을 감소시킨다.
첫번째, 락의 범위와 해당 락을 관리하는데에 필요한 오버헤드를 감소시키는 것이다.
오라클의 모든 표준 읽기/쓰기 작업을 위해서 오라클은 최소한 하나 이상의 블록을 액세스해야한다. 그리고 각 블록은 일반적으로 여러개의 데이터 row를 포함한다. 오라클에서는 수정되지 않았거나 락이 설정된 로우에 대해 해당 블록 안에 읽기 작업만 수행된 로우가 존재할 수 있으므로 전체 블록에 락을 수행하지 않는다. (이러한 특징을 로우 레벨 락킹(Row Level Locking)이라 하고 이는 다른 데이터베이스에서도 사용하는 개념이다.) 그리고 많은 양의 로우레벨 락은 관리의 오버헤드가 발생하므로 로우레벨 락에 의해 리소스를 많이 사용하면 락 매니저는 로우레벨 락이 아닌 더 큰 단위의 락으로 전환하는데 이를 락에스컬레이션(Lock Escalation) 정책이라 한다.
오라클은 이를 간단하게 락이 사용되고 있는 같은 블록에 저장한다. 데이터 블록에 액세스가 발생하여 메모리에 존재한다면 블록에 존재하는 로우의 락 또한 메모리에 존재하게 된다. 락 매니저의 리소스 소비가 없어 리소스를 절약하기 위한 락 에스컬레이션도 필요하지 않게 된다.
두번째, 멀티버전 읽기 읽관성 또는 MVRC(Multiversion Read Consistency)가 있다.
MVRC는 오라클에서 공유 락 사용의 필요성을 완벽하게 제거하는 효과가 있다. 공유 락은 변경 중인 데이터를 읽는 동안에 쓰기 작업을 금지하는 기능이다.
MVRC가 없는 경우의 집계 | MVRC의 작업 방식 |
![]() |
![]() |
3번째 칼럼 값이 삭제 되었다고 하면 MVCR가 없는 경우는 중간이 반영되어 60으로 나오지만 MVRC를 이용한 데이터의 경우는 집계쿼리 작업이 수행된 이후에 발생했으므로 집계 작업은 해당 로우의 이전 값을 포함하게 된다.
MVRC는 쿼리가 시작했을 때 로우의 SCN(System Change Number)을 획득한다. 쿼리가 더 큰 SCN을 만난다면, 쿼리는 해당 로우가 쿼리 시작 이후에 변경 되었다는 정보이므로 오라클은 특정 시점의 일관된 데이터를 추출하기 위해서 해당 로우의 이전 버전을 이용한다. 오라클은 항상 읽기 lock, lock 관리 등으로 발생할 수 잇는 경합에 대한 오버헤드 없이 데이터의 일관된 스냅샷 정보를 보여준다.
MVRC로 집계 작업을 수행하면, 읽기 작업은 쓰기 작업을 금지 하지 않고 쓰기 작업도 읽기 작업을 금지 하지 않는다. 또한 쿼리는 항상 일관된 데이터를 추출하게 된다. 이 MVRC는 오라클 데이터 베이스만의 중요한 특징이라고 할 수 있다.
플래시백(Flashback)
플래시백은 일정시점의 데이터를 쿼리해 볼 수 있는 기능으로 MVRC로 구현하며 사용되는 구조를 활용한 부가기능이다. 이전 특정 시점으로 데이터베이스를 이전시킬 수 있으며, 몇몇 플래시백 기능은 오라클 11g에서만 사용할 수 있다.
특징
- 1. 플래시백 쿼리는 표준 SQL 문장에서 몇 개의 키워드를 이용하여 과거에 발생했던 쿼리들을 실행 할 수 있다.
- 2. 플래시백 데이터베이스 관리자에게 이전 특정 시점으로 전체 데이터베이스를 이전시킬 수 있는 기능을 제공한다.
- 3. 플래시백은 데이터베이스 오브제그를 실수로 삭제하는 것과 같이 불운한 장애 상황 때문에 시스템에 영향이 발생하는 것을 제거할 수 있다.
이 있으며 내용이 많은 기술이므로, 플래시백은 자세히 다루는 글을 추가로 작성하도록 하겠다.
'Server의 세계 > Oracle 관리실무' 카테고리의 다른 글
[Oracle] Cache Fusion 이란? (RAC 구조/DB Buffer Cache와 관계) (0) | 2022.08.04 |
---|---|
[Oracle] RAC(Real Application Clusters)란? (0) | 2022.07.25 |
[Oracle] Image Copy와 Backup Set (0) | 2022.07.20 |
[Oracle] RMAN의 개념과 명령어 이해 (0) | 2022.07.20 |
[Oracle] 초기화 파라미터 파일(Parameter file/Spfile/Pfile) (0) | 2022.07.20 |