sql server 2000 - problem z logiem
ultra79 - 27-09-2007 00:09
sql server 2000 - problem z logiem
Pls o pomoc w nastepujacej sprawie. Mam dosc duza tabele (+-100 mln. wierszy), kilka kolumn w niej ma typ char. Chcialbym je zamienic na varchar. Robiac update za pomoca Enterprise Managera (Design table) zapycha mi sie log-rosnie to takich rozmiarow. Wg. mnie nie bedzie mozliwe przeprowadzenie takiego updatu przy ladowaniu danych do loga. Czy jest jakas mozliwosc aby czasowo wylaczyc zapis do loga, lub przeprowadzic ten update w inny sposob? Bede wdzieczny za pomoc. Pozdrawiam.
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Wojtek - 27-09-2007 00:09
ultra79 pisze: > Pls o pomoc w nastepujacej sprawie. Mam dosc duza tabele (+-100 mln. wierszy), > kilka kolumn w niej ma typ char. Chcialbym je zamienic na varchar. Robiac > update za pomoca Enterprise Managera (Design table) zapycha mi sie log-rosnie > to takich rozmiarow. Wg. mnie nie bedzie mozliwe przeprowadzenie takiego updatu > przy ladowaniu danych do loga. Czy jest jakas mozliwosc aby czasowo wylaczyc > zapis do loga, lub przeprowadzic ten update w inny sposob? Bede wdzieczny za > pomoc. Pozdrawiam. >
Możesz np dodać nową kolumnę typu varchar, skopiować do niej wszystkie dane, potem usunąć kolumnę char i zmienić nazwę kolumny varchar.
Wojtek
Marcin A. Guzowski - 28-09-2007 00:11
ultra79 wrote: > Pls o pomoc w nastepujacej sprawie. Mam dosc duza tabele (+-100 mln. wierszy), > kilka kolumn w niej ma typ char. Chcialbym je zamienic na varchar. Robiac > update za pomoca Enterprise Managera (Design table) zapycha mi sie log-rosnie > to takich rozmiarow. Wg. mnie nie bedzie mozliwe przeprowadzenie takiego updatu > przy ladowaniu danych do loga. Czy jest jakas mozliwosc aby czasowo wylaczyc > zapis do loga, lub przeprowadzic ten update w inny sposob? Bede wdzieczny za > pomoc. Pozdrawiam.
Nie licz na to, że jakąkolwiek operację DML lub DDL przeprowadzisz z pominięciem loga transakcyjnego w poważnym RDBMS.
Aplikacje typu EM tak najczęściej w takiej sytuacji robią bardzo prostą rzecz - kopiują cały obiekt do nowego (zmienionego), kasują stary, a następnie dokonują zmiany nazwy obiektu. Możesz wygenerować sobie skrypt zmiany (z Design table), gdzie to wszystko ładnie widać. Całość działań jest z oczywistych powodów objęta jedną transakcją - nie ma się więc co dziwić, że log puchnie.
Proponowałbym Ci rozwiązanie polegające na tym samym, co zasugerował Wojtek w poście wyżej.
Po pierwsze - przestań używać EM, a zacznij - Query Analyzera (zakładam, że jesteś na SQL2000). Najpierw dodaj kolumnę dopuszczająca wartość NULL:
ALTER TABLE table ADD temp_varchar_column varchar(1000) NULL
Powyższe polecenie wywoła tylko zmianę metainformacyjną - strony danych, na których alokowana jest tabela nie zostaną ruszone (i o to chodzi).
Teraz za pomocą operacji UPDATE aktualizuj odpowiednimi porcjami wartości dodanej kolumny na zasadzie:
UPDATE tabela SET temp_varchar_column = old_char_column WHERE ... (zawęź jakoś po kluczu lub użyj SET ROWCOUNT)
Chodzi o to, aby aktualizować np. tylko po 100000 rekordów w jednej transakcji zmniejszając tym samym jej rozmiar, bo to właśnie rozmiar transakcji rozpycha Ci loga.
Na koniec usuń starą kolumnę (ALTER TABLE tabelka DROP COLUMN old_char_column) i wykonaj zmianę nazwy kolumny za pomocą procedury sp_rename (obydwie operacje to wyłącznie zmiany metainformacyjne).
Teraz możesz już dostosować nową kolumnę do swoich potrzeb (dać NOT NULLa, DEFAULTa itd.).
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
zanotowane.pldoc.pisz.plpdf.pisz.plponland.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|