2010-05-07 6 views

Odpowiedz

7

„Czego operacje kompaktowe i naprawy zrobić do MDB?”

Po pierwsze, nie martw się naprawą. Fakt, że wciąż istnieją polecenia, które mają na celu wykonanie samodzielnej naprawy, jest dziedzictwem dawnych czasów. To zachowanie tej komendy zostało znacznie zmienione, zaczynając od Jet 3.51 i tak pozostało. Oznacza to, że naprawa nigdy nie zostanie wykonana, chyba że Jet/ACE stwierdzi, że jest to konieczne. Kiedy robisz kompakt, testuje, czy naprawa jest potrzebna i wykonuje ją przed kompaktem.

Co więc robi?

Kompaktowy/naprawia plik danych, eliminując wszelkie nieużywane strony danych, zapisując tabele i indeksy na sąsiadujących stronach danych i zgłaszając wszystkie zapisane pliki QueryDef do ponownego kompilowania przy następnym uruchomieniu. Aktualizuje również niektóre metadane dla tabel oraz inne metadane i wewnętrzne struktury w nagłówku pliku.

Wszystkie bazy danych mają jakąś formę "kompaktowej" operacji, ponieważ są zoptymalizowane pod kątem wydajności. Miejsce na dysku jest tanie, więc zamiast pisać rzeczy, aby efektywnie korzystać z pamięci, piszą do pierwszej dostępnej przestrzeni. Tak więc w Jet/ACE, jeśli zaktualizujesz rekord, rekord zostanie zapisany na stronie oryginalnych danych tylko wtedy, gdy nowe dane mieszczą się na stronie oryginalnych danych. Jeśli nie, oryginalna strona danych zostanie oznaczona jako nieużywana, a rekord zostanie przepisany na zupełnie nową stronę danych. W ten sposób plik może zostać wewnętrznie pofragmentowany, a użyte i nieużywane strony danych są mieszane w całym pliku.

Kompaktowy porządek wszystko porządnie i pozbywa się luzu. Przepisuje również tabele danych w podstawowej kolejności klawiszy (klastry Jet/ACE w PK, ale jest to jedyny indeks, na którym można się skupić). Indeksy są również przepisywane w tym momencie, ponieważ z czasem stają się one również fragmentowane przy użyciu.

Kompakt to operacja, która powinna być częścią regularnej konserwacji dowolnego pliku Jet/ACE, ale nie powinieneś robić tego często. Jeśli występują regularne znaczne nadwyżki, sugeruje to, że możesz niewłaściwie korzystać z bazy danych zaplecza poprzez przechowywanie/usuwanie tymczasowych danych. Jeśli aplikacja dodaje rekordy i usuwa je w ramach zwykłych operacji, masz problem z projektowaniem, który spowoduje regularne rozrost pliku danych.

Aby naprawić ten błąd, przenieś tabele tymczasowe na inny samodzielny dysk MDB/ACCDB, tak aby odtwarzanie nie spowodowało rozrostu głównego pliku danych.

W innej notce, która nie ma zastosowania w tym kontekście, przednia część bload na różne sposoby z powodu natury tego, co jest w nich przechowywane. Ponieważ to pytanie dotyczy MDB/ACCDB używanego przez VB, nie będę wdawał się w szczegóły, ale wystarczy powiedzieć, że zagęszczanie przedniej części jest czymś, co jest niezbędne podczas programowania, ale bardzo rzadko w zastosowaniach produkcyjnych. Jedynym powodem kompaktowania frontendu produkcyjnego jest aktualizacja metadanych i rekompilacja zapisanych w nim zapytań.

+0

i jeśli używasz SQL Server backend, ten krok jest kompletną stratą czasu? –

+0

Tak, jeśli SQL Server jest używany z tyłu, prawie nic nie stanie się z twoją bazą danych na kompaktowej operacji. –

1

Zawsze było tak, że pliki MDB stają się powolne i podatne na korupcję, ponieważ mają ponad 1 GB, ale nigdy nie wiedziałem, dlaczego - to zawsze był tylko fakt. Zrobiłem kilka szybkich poszukiwań, nie mogę znaleźć żadnego oficjalnego lub nawet dobrze poinformowanego informatora, wyjaśnienia, dlaczego ten rozmiar jest skorelowany z problemami MDB, ale moje doświadczenie zawsze było takie, że pliki MDB stają się niesamowicie niewiarygodne, gdy zbliżasz się i przekraczasz 1 GB .

Oto artykuł MS KB o Naprawa i kompaktowy, z wyszczególnieniem, co dzieje się podczas tej operacji:

http://support.microsoft.com/kb/209769/EN-US/

Aplikacja prawdopodobnie awarii w wyniku niewłaściwych/nieoczekiwanych danych zwracany z kwerendy bazy danych do MDB to duże - jaki błąd pojawia się w szczególności, gdy aplikacja się zawiesza? Być może istnieje sposób na złapanie błędu i radzenie sobie z nim, zamiast po prostu awarię aplikacji.

+0

Nigdy nie widziałem pliku MDB/ACCDB o rozmiarze ponad 1 GB, więc nie można stwierdzić, czy spowalniają one wykraczanie poza zakres oczekiwany liniowo dla większej ilości danych. Każda aplikacja, która zbliżała się do tej ilości danych, byłaby w każdym razie na szybkim torze do rozbudowy do SQL Server. To zbyt proste, aby coś nadepnęło z 1GB i osiągnęło limit 2 GB, a potem jesteś po prostu oszołomiony. –

1

Jeśli jest dużo awarii, możesz spróbować dekompilacji na DB i/lub tworzenia nowej bazy danych i kopiowania wszystkich obiektów do nowego kontenera.

Spróbuj dekompilować pierwszy, aby to zrobić wystarczy dodać flagę/dekompilować z opcjami startową DB na przykład

„C: \ Program Files \ Access \ access.mdb” „C: \ mojabd. MDB”/ dekompilować

następnie kompaktowy, kompilacji, a następnie ponownie kompaktowy

EDIT:

cant zrobić bez dostępu jest zainstalowany, ale jeśli to jest tylko przechowywanie danych następnie dekompilacji nie będzie Pan jakieś dobre . Można jednak spojrzeć na JetComp aby pomóc Ci zagęszczania potrzeb

support.microsoft.com/kb/273956

+0

Czy mogę to zrobić bez zainstalowanego programu Access? Plik .mdb jest używany jako back-end do aplikacji VB. – CJ7

+0

Zobacz moją edycję, aby uzyskać dodatkowe informacje. –

+0

Dekompilacja jest nieistotna dla bazy danych, która zawiera tylko tabele danych. Pytanie mówi, że jest ono używane z VB, dzięki czemu staje się jasne, że dekompilacja jest całkowicie nieoperacyjna. Nic nie zaszkodzi, ale nic nie pomoże. –

Powiązane problemy