Прокручиваемые курсоры созданы на стороне сервера? - PullRequest
1 голос
/ 11 июля 2020

В общем о курсорах как понятии. Когда я запускаю простой запрос select через jdb c, я получаю набор результатов. Этот набор сохраняется на клиенте, верно? Но под СУБД был открыт курсор. Поскольку доступ к базе данных осуществляется через службу Http API / rest без состояния, соединение закрывается, и у меня есть набор результатов в моем клиенте. И если набор результатов сохраняется на клиенте, я могу делать с ним что угодно; go назад, вперед и т.д. c

Так в чем же смысл прокручиваемого курсора? Подразумевает ли это, что соединение с базой данных с отслеживанием состояния и набор результатов хранятся в памяти сервера, а не в памяти клиента? Это сценарий, который происходит с явным открытием курсора, а не с набором на основе SQL?

Означает ли это также блокировку строк?

1 Ответ

2 голосов
/ 11 июля 2020

В Oracle (как минимум до версии 18) прокручиваемые курсоры хранятся на стороне клиента.
Подробнее об этом вы можете найти в документации (см. Ниже):

17,1 Oracle JDB C Обзор реализации для поддержки набора результатов

Oracle JDB C Реализация для прокрутки набора результатов

Поскольку базовый сервер не поддерживает прокручиваемые курсоры, Oracle JDB C должен реализовать возможность прокрутки на отдельном уровне.

Важно знать, что это достигается с помощью кэш памяти на стороне клиента для хранения строк прокручиваемого набора результатов.

Примечание. Поскольку все строки любого набора результатов с возможностью прокрутки хранятся в кэше на стороне клиента, ситуация, когда набор результатов содержит много строк, много столбцов или очень большие столбцы могут вызвать сбой клиентской Java виртуальной машины (JVM). Не указывайте возможность прокрутки для большого набора результатов.

...