오라클은 매우 정교하게 로우 레벨의 락 메커니즘을 제공하지만, 사용자의 동시 변경으로부터 데이터를 보호하기 위해 블록 단위로 락을 거는 일은 거의 없다. 그러나, 오라클의 I/O가 블록 단위로 이루어 진다는 사실 때문에 블록 단위의 락은 반드시 필요하다.
다른 사용자가 같은 블록에 있는 서로 다른 로우에 대해 변경을 하려고 할 때 논리적으로는 전혀 문제가 되지 않지만, 두 개의 로우가 같은 블록에 있다는 물리적인 제한으로 인해 블록을 변경하는 행위 자체는 동시에 이루어져서는 안 되기 때문이다.
각 사용자는 로우를 변경하기 위한 TX 락을 exclusive하게 획득했다 하더라도 현재 자신만이 블록을 변경하고 있다는 것을 보장 받아야 한다.
이 경우에 획득해야 하는 락이 버퍼 락(buffer lock)이다. 버퍼 락은 cache buffers chains 래치, TX 락과 함께 버퍼의 변경을 동기화하는 역할을 한다
참고
버퍼 락에는 (shared/exclusive) 모드가 있다.
버퍼를 읽는 과정에는 shared 모드의 락을 획득하고 변경하는 과정에는 exclusive모드의 락을 획득 해야 한다.
추상적인 레벨에서, 하나의 로우를 변경하기 위해서 래치나 락을 획득하는 과정은 다음과 같다.