Baza danych jest pełna; jaka powinna być strategia?

1

Co zrobić, jeśli moja baza danych jest pełna i nie mam zapasowego dysku twardego lub pamięci. Jaka powinna być moja strategia uwolnienia przestrzeni?

Hennes
źródło
7
To: „Usuń rzeczy”.
Blorgbeard
1
Zwróć uwagę na ogromne pliki dziennika.
3
Jakiej bazy danych używasz? MySQL, SQL-Server czy Oracle? Czy jest to po prostu pytanie „co jeśli”?
Mark Baker
2 głosy na SU vs 1 głos na SF, dlaczego?
BoltClock
Samo pytanie zakłada dwie różne rzeczy. Czy sama baza danych jest pełna (ograniczenie rozmiaru pliku), czy też dysk jest pełny? Odpowiedź zależy od tego, jaka jest dokładnie sytuacja. Oznaczyłeś również pytanie dwoma całkowicie różnymi systemami baz danych. Czy to ma być pytanie ogólne, czy konkretne?
Charles Burge

Odpowiedzi:

1

„Moja baza danych jest pełna” może oznaczać bardzo różne rzeczy w Oracle

1 Każdy bajt mojego dysku twardego jest wypełniony „użytecznymi” danymi.

Kompresja / zduplikowanie danych / normalizacja może pomóc, ale taniej jest kupić więcej dysków.

2 Mam miejsce w pliku dla obszaru tabel X, ale potrzebuję go dla tabel w obszarze tabel Y

Jeśli spacja znajduje się na końcu pliku, możesz zmniejszyć obszar tabel. Jeśli nie najlepiej, przenieś tabele z Y do X. Trudno jest odzyskać miejsce ze środka pliku obszaru tabel

3 Usunąłem wiele rekordów z TABELI A, ale nie odzyskał przestrzeni w obszarze tabel

ALTER TABLE ... MOVE; uporządkuje to, ale później będziesz musiał odbudować indeksy.

Prawdopodobnie istnieją inne scenariusze, więc odpowiem społeczności na wiki /

Gary
źródło
1

Dzienniki transakcji będą przechowywane rośnie w nieskończoność dopóki nie zużyją całej dostępnej przestrzeni. Prawdopodobnie jest to jedna z przyczyn wyczerpania się miejsca.

Możesz obetnij dzienniki transakcji aby zwolnić miejsce, ale należy pamiętać, że usunie to możliwość przywrócenia do punktu w czasie lub wycofania zmian w DB.

Aby skrócić dzienniki, uruchom

BACKUP LOG [DatabaseName] WITH TRUNCATE_ONLY

następnie zmniejsz plik dziennika, aby zwolnić miejsce na dysku. Uwaga: Przyjąłem MS SQL.

Będziesz potrzebował ciągłej strategii, aby zapobiec powtórzeniu się tego. W zależności od aplikacji i poziomu laissez-faire możesz:

  • Utwórz kopię zapasową dzienników transakcji na zewnętrznym serwerze lub dysku (i zmniejsz plik dziennika). Jest to zalecane przez MS rozwiązanie, które podejrzewam i zachowuje ładne rzeczy, takie jak przywracanie.
  • Włącz proste logowanie. Oznacza to utratę funkcji przywracania, ale także oznacza, że ​​dziennik DB nie wymknie się spod kontroli, tak jak ma to miejsce w tym czasie.
imoatama
źródło
+1 za umiejętność właściwego radzenia sobie z uciekającymi dziennikami transakcji
Stephen Jennings