Не вдалося виділити нову сторінку для бази даних через недостатнє місце на диску


13

Використовуючи майстра імпорту та експорту SQL Server, я отримую цю помилку:

Помилка 0xc0202009: Потік даних Завдання 1: Код помилки SSIS DTS_E_OLEDBERROR.
Виникла помилка DB OLE. Код помилки: 0x80004005.
Не вдалося виділити нову сторінку для бази даних "база даних" через недостатнє місце на диску у групі файлів "PRIMARY". Створіть необхідний простір, скинувши об’єкти у групу файлів, додавши додаткові файли до групи файлів або встановивши автоматичний ріст для існуючих файлів у групі файлів.

Я намагаюся завантажити серію файлів об'ємом 2 ГБ, і, завантажуючи 4-й файл, я продовжую отримувати вищезазначене повідомлення про помилку навіть після переходу до Властивості бази даних> Файли та змінити авторостання файлової групи на 2500 МБ та збільшити максимум необмежено.

Що найкраще вирішувати? Ці дані в кінцевому рахунку займуть приблизно 60-80 Гб.


1
Яку версію SQL Server ви використовуєте? Скільки вільного місця є на накопичувачах (дисках), які зберігають файли даних для "бази даних"?
набронд

2
Повідомлення про помилку повідомляє про "найкращі шляхи вирішення": Створіть необхідний простір, скинувши об'єкти у групу файлів, додавши додаткові файли до групи файлів або встановивши автоматичний ріст для існуючих файлів у групі файлів. Я не впевнений, що ще ми можемо вам сказати.

1
Брендон, SQL SERVER 2012. 760 Гб вільного місця на диску, який зберігає файли даних для бази даних. Кен, у мене ввімкнено автоматичний ріст, зростання вростає на 2500 МБ і збільшує необмежену кількість. Чи варто все-таки стикатися з цим питанням? Чи можливо, що існує кілька авторостів, які потребують включення?

1
Ви намагалися вручну виростити БД?

1
Чи може бути те, що функція autogrow працює лише між елементами і що ONE вставляє більше межі? Був би мій вибір - якщо вставка 20000 Гб не вдасться на автоматичному зростанні в 2500 Гб .... це може бути 900 Мб безкоштовно, а вставка виходить з ладу.
TomTom

Відповіді:


11

Швидка база даних Sql складе 10 г. Я вважаю, це схоже на повідомлення про помилку, яке ви отримуєте.

Я зіткнувся з цією проблемою один раз у клієнта, і мені знадобилося певний час.

яку версію sql ти працюєш?


1
це рішення врятувало мене! Я був на версії Express і перейшов на Dev.
Ізраїль Родрігес

7

Ви впевнені, що це так

Не вдалося виділити нову сторінку для бази даних "база даних" через недостатнє місце на диску у групі файлів "PRIMARY".

і ні

Не вдалося виділити нову сторінку для бази даних 'tempdb' через недостатнє місце на диску у групі файлів 'PRIMARY'.

?

Якщо це дійсно [tempdb]в повідомленні про помилку, то це те, що потрібно керувати окремо, переконавшись, що він [tempdb]знаходиться на диску відповідного розміру, відокремленому від іншої бази даних.

Якщо це не [tempdb]в повідомленні про помилку, я б уявив, що "завантаження" подібного роду вдарить [tempdb]досить сильно. Перебуває [tempdb]на тому ж диску / LUN як 'database'? Якщо це так, ви, ймовірно, загострюєте свою проблему із численними спробами зростання файлів (на кількох базах даних). Тому, поки ви робите це "завантаження", переконайтесь, що ви також контролюєте [tempdb].

Якщо ви [tempdb]перебуваєте на окремому диску, і ви впевнені, що у вас є достатньо місця, я б продовжував розмір вашого файлу даних відповідно до розміру кінцевого стану:

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

Також переконайтеся, що файл журналу бази даних є окремим від файлу даних. Якщо це не так, ви повертаєтеся до конкуруючих подій з росту. Якщо вони знаходяться на окремих дисках, то я б також пройшов їх розмір та розмір відповідним чином.

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
...

поки ви не отримаєте потрібний розмір журналу. Назвемо це 80 Гб, де ви встановите свій ріст під конкретний розмір. Я використовую цінності, рекомендовані Полом Рандалом та Кімберлі Тріппом

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 80000MB,
    FILEGROWTH = 8000MB
);

6

Спробуйте виростити його вручну:

1.В оглядачі об'єктів підключіться до екземпляра двигуна бази даних SQL Server, а потім розгорніть цей екземпляр.

2. Розгорніть Бази даних, клацніть правою кнопкою миші базу даних для її збільшення та натисніть кнопку Властивості.

3.У Властивості бази даних виберіть сторінку Файли.

4.Щоб збільшити розмір наявного файлу, збільшить значення у стовпці Початковий розмір (МБ) для цього файлу. Ви повинні збільшити розмір бази даних щонайменше на 1 мегабайт.

5.Щоб збільшити розмір бази даних, додавши новий файл, натисніть кнопку Додати, а потім введіть значення для нового файлу. Для отримання додаткової інформації див. Додавання даних або файлів журналу до бази даних.

6. Натисніть кнопку ОК.

Від: MSDN


4
Ручне розширення добре, тому що воно може розповісти вам більше деталей. У моєму випадку я отримав: "СТВОРИТИ ДАТАБАЗУ або АЛТЕР ДАТАБАЗУ не вдалося, оскільки отриманий накопичувальний розмір бази даних перевищить ліцензований ліміт 10240 МБ на базу даних." Що само собою пояснює.
user824276

1

Ви також можете використовувати такі сценарії, щоб звільнити місце в базі даних:

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

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

Вони допомагають мені з помилкою :) Також переконайтеся, що у нас на диску достатньо місця на диску.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.