Nie można przydzielić nowej strony do bazy danych z powodu niewystarczającej ilości miejsca na dysku

13

Za pomocą Kreatora importu i eksportu programu SQL Server pojawia się ten błąd:

Błąd 0xc0202009: Zadanie przepływu danych 1: Kod błędu SSIS DTS_E_OLEDBERROR.
Wystąpił błąd OLE DB. Kod błędu: 0x80004005.
Nie można przydzielić nowej strony dla bazy danych „baza danych” z powodu niewystarczającej ilości miejsca na dysku w grupie plików „PRIMARY”. Utwórz niezbędną przestrzeń, upuszczając obiekty w grupie plików, dodając dodatkowe pliki do grupy plików lub ustawiając autogrowth dla istniejących plików w grupie plików.

Próbuję przesłać serię 2 GB plików i podczas ładowania czwartego pliku nadal otrzymuję powyższy komunikat o błędzie, nawet po przejściu do Właściwości bazy danych> Pliki i zmienię autogrowth grupy plików na 2500 MB i maxsize nieograniczony.

Jakie jest najlepsze obejście? Dane te ostatecznie zajmą około 60–80 GB.

Aaron Bertrand
źródło
1
Jaką wersję programu SQL Server używasz? Ile wolnego miejsca jest dostępne na dyskach, na których przechowywane są pliki danych dla „bazy danych”?
nabrond
2
Komunikat o błędzie informuje o „najlepszych obejściach”: Utwórz niezbędną przestrzeń, upuszczając obiekty w grupie plików, dodając dodatkowe pliki do grupy plików lub ustawiając autogrowth dla istniejących plików w grupie plików. Nie jestem pewien, co więcej możemy ci powiedzieć.
1
Brandon, SQL SERVER 2012. 760 GB wolnego miejsca na dysku, na którym przechowywane są pliki danych dla bazy danych. Ken, mam włączony autogrowth, autogrowth rośnie o 2500 MB i maxsize nieograniczony. Czy powinienem nadal napotykać ten problem? Czy to możliwe, że istnieje wiele autogrowths, które wymagają włączenia?
1
Czy próbowałeś ręcznie wyhodować DB?
1
Czy to możliwe, że autogrow działa tylko między elementami, a JEDNA wkładka przekracza limit? Byłbym moim zakładem - jeśli wkładka 20000 GB zawiedzie przy autogrow 2500 GB ... może być 900 MB wolnego i wkładka się nie powiedzie.
TomTom,

Odpowiedzi:

11

Ekspresowa baza danych SQL będzie doładowywać przy 10g. Uważam, że jest to podobne do otrzymanego komunikatu o błędzie.

Natknąłem się na ten problem raz u klienta i zajęło mi to trochę czasu, aby go zrozumieć.

jaką wersję sql używasz?

greg
źródło
1
to rozwiązanie mnie uratowało! Byłem w wersji Express i zaktualizowałem do wersji Dev.
Israel Rodriguez
7

Czy jesteś pewny , że to

Nie można przydzielić nowej strony dla bazy danych „baza danych” z powodu niewystarczającej ilości miejsca na dysku w grupie plików „PRIMARY”.

i nie

Nie można przydzielić nowej strony dla bazy danych „tempdb” z powodu niewystarczającej ilości miejsca na dysku w grupie plików „PRIMARY”.

?

Jeśli tak naprawdę jest to [tempdb]w komunikacie o błędzie, należy to osobno zarządzać, upewniając się, że [tempdb]znajduje się on na dysku o odpowiedniej wielkości, oddzielonym od innej bazy danych.

Jeśli nie ma tego [tempdb]w komunikacie o błędzie, wyobrażam sobie, że tego rodzaju „upload” uderzyłby [tempdb]dość mocno. Jest [tempdb]na tym samym dysku / LUN co 'database'? Jeśli tak, prawdopodobnie zaostrzasz problem przy wielu próbach wzrostu plików (w wielu bazach danych). Podczas wykonywania tego „przesyłania” upewnij się, że również monitorujesz [tempdb].

Jeśli [tempdb]znajduje się na osobnym dysku i masz pewność , że masz wystarczająco dużo miejsca, posprzątaj i zmień rozmiar pliku danych do oczekiwanego rozmiaru końcowego:

USE master;
GO
ALTER DATABASE [database]
MODIFY FILE
    (
    NAME = datafile,
    SIZE = 60GB,
    FILEGROWTH = 5GB
);
GO

Upewnij się również, że plik dziennika bazy danych jest oddzielny od pliku danych. Jeśli nie, to wracasz do konkurencyjnych wydarzeń wzrostowych. Jeśli są na osobnych dyskach, przejrzałbym je i odpowiednio dobrałem.

USE master;
GO
ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 8000MB
);
GO

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 16000MB
);
GO

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 24000MB
);
GO
...

dopóki nie osiągniesz pożądanego rozmiaru pliku dziennika. Nazwijmy to 80 GB, gdzie ustawisz swój wzrost do określonego rozmiaru. Korzystam z wartości zalecanych przez Paula Randala i Kimberly Tripp

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 80000MB,
    FILEGROWTH = 8000MB
);
swasheck
źródło
6

Spróbuj go wyhodować ręcznie:

1. W Eksploratorze obiektów połącz się z wystąpieniem aparatu bazy danych SQL Server, a następnie rozwiń to wystąpienie.

2.Rozwiń bazy danych, kliknij bazę danych prawym przyciskiem myszy, aby ją zwiększyć, a następnie kliknij polecenie Właściwości.

3. We Właściwościach bazy danych wybierz stronę Pliki.

4. Aby zwiększyć rozmiar istniejącego pliku, zwiększ wartość w kolumnie Rozmiar początkowy (MB) dla pliku. Musisz zwiększyć rozmiar bazy danych o co najmniej 1 megabajt.

5. Aby zwiększyć rozmiar bazy danych, dodając nowy plik, kliknij Dodaj, a następnie wprowadź wartości dla nowego pliku. Aby uzyskać więcej informacji, zobacz Dodawanie danych lub plików dziennika do bazy danych.

6. Kliknij OK.

Od: MSDN

Hart CO
źródło
4
Ręczne rozwijanie jest dobre, ponieważ może zawierać więcej szczegółów. W moim przypadku otrzymałem: „Utworzenie bazy danych lub ZMIANA BAZY DANYCH nie powiodło się, ponieważ wynikowy skumulowany rozmiar bazy danych przekroczyłby licencjonowany limit 10240 MB na bazę danych”. Co jest oczywiste.
user824276
1

Możesz również użyć następujących skryptów, aby zwolnić miejsce w bazie danych:

DELETE FROM STActionLog
where id in (SELECT TOP 100000 id
             FROM STActionLog
             ORDER BY actionDate ASC)

delete from STActionLog
where actionDate < '2019-08-01'

Te pomagają mi z błędem :) Upewnij się także, że mamy wystarczającą ilość miejsca na dysku na komputerze.

Razvan
źródło