Podobne
- Strona startowa
- Porożyńska Iwona MiłoÂść kocha czary
- Corel DRAW
- Pattison Eliot Inspektor Shan Kosciana gora
- Paul Sorensen Moving Los Angeles, Short Term Policy Options for Improving TransportationÄ… (2008)
- [2]Erikson Steven Bramy Domu Umarlych
- Kolodziejczak Tomasz Kolory sztandarow (SCAN dal 111
- Wiktor Suworow Akwarium
- Abercrombie Joe Ostateczny argument krolow (CzP)
- Henryk Sienkiewicz potop
- Magazyn Science Fiction nr 1 (2
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- radius.htw.pl
Cytat
Do celu tam się wysiada. Lec Stanisław Jerzy (pierw. de Tusch-Letz, 1909-1966)
A bogowie grają w kości i nie pytają wcale czy chcesz przyłączyć się do gry (. . . ) Bogowie kpią sobie z twojego poukładanego życia (. . . ) nie przejmują się zbytnio ani naszymi planami na przyszłość ani oczekiwaniami. Gdzieś we wszechświecie rzucają kości i przypadkiem wypada twoja kolej. I odtąd zwyciężyć lub przegrać - to tylko kwestia szczęścia. Borys Pasternak
Idąc po kurzych jajach nie podskakuj. Przysłowie szkockie
I Herkules nie poradzi przeciwko wielu.
Dialog półinteligentów równa się monologowi ćwierćinteligenta. Stanisław Jerzy Lec (pierw. de Tusch - Letz, 1909-1966)
[ Pobierz całość w formacie PDF ]
.Każdy wiersz dousuniÄ™cia (poprzez DELETE) jest najpierw kopiowany do protokoÅ‚u transakcji tak,żeby można jÄ… byÅ‚o, w razie potrzeby, unieważnić.W przypadku dużych tabelmożna Å‚atwo przekroczyć dopuszczalnÄ… wielkość protokoÅ‚u.Jeżeli chcemy usunąćwszystkie wiersze tabeli, powinniÅ›my użyć komendy serwera do opróżniania tabel(table-truncation command), a nie DELETE.Wiele serwerów obsÅ‚uguje komendÄ™podobnÄ… do komendy ZAP jÄ™zyka dBASE, która szybko opróżnia tabelÄ™ z jejzawartoÅ›ci.PrzykÅ‚adowo - w produktach Sybase i Microsoft SQL Server istnieje,sÅ‚użąca do tego celu, komenda TRUNCATE TABLE.Nie tylko dziaÅ‚a ona szybciejod DELETE, ale nie jest zachowywana do protokoÅ‚u transakcji, w zwiÄ…zku z czymnie wiążą siÄ™ z niÄ… żadne operacje na protokole.Jeżeli nasz serwer nie udostÄ™pniakomendy do opróżniania tabel, mogÅ‚oby okazać siÄ™, że lepiej jest po prostuRozdziaÅ‚ 23 Sterowanie współbieżnoÅ›ciÄ… 665,,fizycznie usunąć caÅ‚Ä… tabelÄ™ i ponownie jÄ… utworzyć - w zależnoÅ›ci od metodyjej stosowania gdzie indziej w bazie danych i w innych aplikacjach.Platformy Sybase i Microsoft oferujÄ… inny sposób ograniczenia operacji naprotokole, a mianowicie zastÄ…pienie INSERT SELECT (przy kopiowaniu wierszyz tablicy do tablicy) komendÄ… SELECT INTO.Wiersze wstawiane za pomocÄ…INSERT SELECT przechowywane sÄ… w protokole transakcji, stÄ…d też niepowinniÅ›my wprowadzać dużych porcji danych.KomendÄ™ SELECT INTOzrealizowano na platformie SQL Server jako operacjÄ™ nie wiążącÄ… siÄ™z protokoÅ‚em, gdyż nie powoduje ona dodawania do niego żadnych pozycji.SkÅ‚adnia powyższa nie bÄ™dzie obsÅ‚ugiwana na wszystkich platformach DBMS (nieobsÅ‚uguje jej np.InterBase).StÄ…d opisywana technika może okazać siÄ™niewykonalna w konkretnym systemie.Komenda SELECT INTO wedÅ‚ug skÅ‚adni dialektu Transact-SQL platformy SQLServer ma nastÄ™pujÄ…cÄ… postać:SELECT LastName, FirstNameINTO NEWCUSTOMERFROM CUSTOMERTworzy siÄ™ tutaj tabelÄ™ o nazwie NEWCUSTOMER i wstawia do niej kolumnyLastName i FirstName z tabeli CUSTOMER.Kod powyższy odpowiadafunkcjonalnie nastÄ™pujÄ…cej skÅ‚adni:CREATE TABLE NEWCUSTOMER(LastName CHAR(30),FirstName CHAR(30))INSERT INTO NEWCUSTOMER (LastName, FirstName)SELECT LastName, FirstNameFROM CUSTOMERKomendÄ™ SELECT INTO można wykorzystać dla unikniÄ™cia tworzenia pozycjiw protokole transakcji, zgodnie z niżej przedstawionym scenariuszem:chcemy utworzyć tabelÄ™, a nastÄ™pnie skopiować do niej wiersze z innej tabeliWszystkie kolumny w nowej tabeli majÄ… otrzymać wartoÅ›ci z tabeli zródÅ‚owejNie zależy nam na możliwoÅ›ci wycofania wstawionych wierszyPodziaÅ‚ dużych transakcji na mniejszeW niektórych sytuacjach musimy przeprowadzić modyfikacje wielkich iloÅ›cidanych, prowadzÄ…ce w nieunikniony sposób do utworzenia wielu pozycjiw protokole transakcji lub wycofaÅ„.Takie aktualizacje mogÄ… spowodowaćzapeÅ‚nienie protokoÅ‚u i problemy w serwerze.MogÄ… one również prowadzić do666 Część IVblokad, uniemożliwiajÄ…cych innym użytkownikom dostÄ™p do caÅ‚ych tabel.Z tegopowodu dobrze jest rozbić dużą transakcjÄ™ na mniejsze.Można to przeprowadzićna kilka sposobów - ten, który wybierzemy, zależy od posiadanej platformy DBMSi konkretnych potrzeb naszej aplikacji.ObszernÄ… aktualizacjÄ™ można rozbić na kilka mniejszych, dzielÄ…c poziomokomendy sÅ‚użące do modyfikacji danych - tzn.rozbijajÄ…c jednÄ… komendÄ™ UPDATElub DELETE na kilka komend dotyczÄ…cych tego podzbioru wierszy, do któregoodnosiÅ‚a siÄ™ oryginalna klauzula WHERE.Gdyby tabela CUSTOMERw poprzednim przykÅ‚adzie miaÅ‚a milion rekordów i chcielibyÅ›my zamienić literyw polu nazwiska każdego z nich, moglibyÅ›my napisać nastÄ™pujÄ…cy kod:SET TRANSACTION;UPDATE CUSTOMERSET LastName=UPPER(LastName)WHERE CustomerNumber between 1 and 100000;COMMIT;SET TRANSACTION;UPDATE CUSTOMERSET LastName=UPPER(LastName)WHERE CustomerNumber between 100001 and 200000;COMMIT;SET TRANSACTION;UPDATE CUSTOMERSET LastName=UPPER(LastName)WHERE CustomerNumber between 200001 and 300000;COMMIT;Jest to prosty sposób praktycznej realizacji tak obszernej transakcji.InnÄ… metodÄ… ograniczenia liczby wierszy, których dotyczy wyrażenie z komendÄ…UPDATE lub DELETE, jest redukcja tych wierszy, które komenda ta może zmienićw jednym przebiegu.Nie jest to możliwe we wszystkich platformach DBMS (np.umożliwia to SQL Server, a już nie InterBase).W tym celu musimy użyć komendy wÅ‚aÅ›ciwej dla posiadanego serwera, którasÅ‚uży do ograniczania liczby wierszy przetwarzanych przez UPDATE lub DELETE.KomendÄ™ tÄ™ możemy powtarzać tyle razy, ile potrzeba dla przetworzenia caÅ‚ejtabeli.Poniżej zamieÅ›ciliÅ›my przykÅ‚ad w jÄ™zyku Transact-SQL systemu SQLServer.SET ROWCOUNT 50000 /* Limits the UPDATE to 50000 rows at a¥' time*/WHILE (EXISTS (SELECT * FROM ORDERS WHERE Amount0))BEGINUPDATE ORDERS SET Amount=0WHERE Amount0/* Keeps the UPDATE from looping infinitely */RozdziaÅ‚ 23 Sterowanie współbieżnoÅ›ciÄ… 667ENDZ uwagi na fakt, iż modyfikowane wiersze ciÄ…gle znajdujÄ… siÄ™ w tabeli z każdymobiegiem pÄ™tli, musimy znalezć sposób ich usuniÄ™cia po przetworzeniu.Jednymz nich może być wykorzystanie klauzuli WHERE komendy UPDATE - tak, żebymodyfikowane wiersze byÅ‚y przez tÄ™ klauzulÄ™ ignorowane po ich zmodyfikowaniu.Innymi sÅ‚owy musimy sprawdzać kolumny Amount z użyciem testu 0,ponieważ w komendzie UPDATE polu Amount nadajemy wartość 0.DziÄ™ki temukomenda ta, modyfikujÄ…c dany wiersz, zaznacza go jako już przetworzony.Zaznaczanie takie zapobiega dwukrotnemu przetworzeniu wiersza.A oto przykÅ‚ad z komendÄ… DELETE:SET ROWCOUNT 50000 /* Limits the DELETE to 50000 rows at a¥' time*/WHILE (EXISTS (SELECT * FROM ORDERS WHERE Amount=0))BEGINDELETE FROM ORDERSWHERE Amount=0END
[ Pobierz całość w formacie PDF ]