Many of the resources protected by local locks in single-instance Oracle require global exposure in a parallel server database. Whenever one of these local locks is needed, a corresponding instance lock must be held as well, to protect the resource across all instances. The instance locks used to protect local locks globally are called global locks . However, the term is sometimes used informally as a synonym for all instance locks generally.
Row cache instance locks correspond directly to local row cache enqueue locks. They do not supersede the local locks, but give them global exposure.
When a process needs a row cache instance lock, it posts the LCK0 background process to obtain the lock on behalf of the instance, and waits on a row cache lock wait. This same wait is also recorded when waiting for the corresponding local lock. LCK0 obtains the instance lock asynchronously. When LCK0 receives the acquisition or conversion AST from LMDn, it posts the waiting process.
When the local process releases its row cache enqueue lock, the dictionary row remains cached, and so the instance lock is not released but downgraded to null mode in the background by the LCK0 process. However, the row cache instance lock is released if the dictionary cache entry is flushed from the shared pool.
Although dictionary cache entries and row cache enqueue locks are dynamically allocated in the shared pool, the lock state information for the corresponding instance locks ...