Кіріспе

Деректер базасы жүйелерінің түсінігі

Компьютер ғылымында деректер базасының курсоры – деректер базасындағы жазбалар арқылы өтуге мүмкіндік беретін механизм. Курсорлар жазбаларды алу, қосу және жою сияқты, өтумен қатар жүретін келесі өңдеуді жеңілдетеді. Өту мүмкіндігінің арқасында деректер базасының курсоры итератордың бағдарламалау тіліндегі түсінігімен ұқсас. Курсорларды деректер базасының бағдарламашылары деректер базасы сұраныстарының нәтижесінде алынған жекелеген қатарларды өңдеу үшін пайдаланады. Курсорлар нәтижелердің толық жиынтығын бірден өңдеуге мүмкіндік береді. Осы сценарийде курсор нәтижелер жиынтығындағы қатарларды тізбектей өңдеуге мүмкіндік береді. SQL процедураларында курсор нәтиже жиынтығын (деректер қатарларының жиынтығын) анықтауға және қатар бойынша күрделі логиканы орындауға мүмкіндік береді. Осы механизмді пайдаланып, SQL процедурасы нәтиже жиынтығын анықтап, оны тікелей SQL процедурасын шақырушыға немесе клиенттік бағдарламаға қайтара алады. Курсорды қатардағы бір қатарға сілтеме ретінде қарастыруға болады. Курсор бір уақытта тек бір қатарға сілтеме жасай алады, бірақ қажет болған жағдайда нәтиже жиынтығының басқа қатарларына көше алады.

"Қоймаға"

Курсорлар әдетте транзакция аяқталған кезде автоматты түрде жабылады, яғни COMMIT немесе ROLLBACK (немесе транзакцияның автоматты түрде аяқталуы) орын алғанда. Бұл мінез-құлықты WITH HOLD сөйлемін пайдаланып курсорды жариялағанда өзгертуге болады (әдепкі параметр WITHOUT HOLD). Ұстап тұруға болатын курсор COMMIT кезінде ашық күйінде қалады және ROLLBACK кезінде жабылады. (Кейбір ДБСҰ осы стандартты мінез-құлықтан ауытқып, ROLLBACK кезінде де ашық күйінде қалатын курсорларды сақтайды.) DECLARE курсор_аты CURSOR WITH HOLD FOR SELECT FROM

COMMIT орын алғанда, ұстап тұруға болатын курсор келесі қатардың алдына орналасады. Осылайша, орналасқан UPDATE немесе орналасқан DELETE операторы транзакцияда FETCH операциясы орын алғаннан кейін ғана сәтті орындалады. JDBC курсорларды әдепкі бойынша ұстап тұруға болатын деп анықтайды. Бұл JDBC де автоматты тапсыруды әдепкі бойынша белсендіреді.

Бөлінген операциялардағы курсорлар

Транзакция мониторы арқылы басқарылатын таратылған транзакцияларда (X/Open XA Environments) курсорларды пайдалану, таратылмаған транзакциялардағы курсорлардан ешқандай айырмашылығы жоқ. Дегенмен, сақталынатын курсорларды пайдаланғанда сақ болу керек. Қосылымдар әртүрлі қолданбалармен пайдаланылуы мүмкін. Сондықтан, транзакция аяқталған және бекітілгеннен кейін, кейінгі транзакция (басқа қолданбада іске қосылған) қолданыстағы сақталынатын курсорларды мұраға ала алады. Осыған байланысты, қолданба жасаушы осы жағдайды ескеруі тиіс.

Курсорлардың кемшіліктері

Төмендегі ақпарат нақты деректер базасы жүйесіне байланысты өзгеруі мүмкін. Курсордан бір қатарды алу әр ретте желілік байланыс жасауды талап етеді. Бұл DELETE сияқты жалғыз SQL операторын орындау үшін қалыпты жағдайда қажет болатын желілік өткізу қабілетінен әлдеқайда көп. Желілік байланысты қайта-қайта жасау курсорды пайдалану жылдамдығын күрт төмендетуі мүмкін. Кейбір ДБСЖ (Деректерді басқару жүйелері) осы әсерді азайту үшін блокпен алу әдісін қолданады. Блокпен алу серверден клиентке бірнеше қатарды бірдей жіберуді білдіреді. Клиент қатарлардың толық блогын жергілікті буферде сақтайды және буфер таусылғанша сол буферден қатарларды алады. Курсорлар сервердегі ресурстарды, мысалы, құлыптарды, пакеттерді, процестерді және уақытша жадты бөліп алады. Мысалы, Microsoft SQL Server курсорларды уақытша кесте құрып, оны сұраныстың нәтижелер жиынтығымен толтыру арқылы іске асырады. Егер курсор дұрыс жабылмаса (деаллокацияланбаса), SQL сессиясы (қосылысы) жабылмағанша ресурстар босатылмайды. Сервердегі ресурстардың осылай ысырабы өнімділіктің төмендеуіне және қателерге әкелуі мүмкін.