Не удалось выделить новую страницу для базы данных из-за недостатка места на диске

13

Используя мастер импорта и экспорта SQL Server, я получаю эту ошибку:

Ошибка 0xc0202009: Поток данных Задача 1: Код ошибки служб SSIS DTS_E_OLEDBERROR.
Произошла ошибка OLE DB. Код ошибки: 0x80004005.
Не удалось выделить новую страницу для базы данных 'database' из-за недостатка места на диске в файловой группе 'PRIMARY'. Создайте необходимое пространство, удалив объекты в файловой группе, добавив дополнительные файлы в файловую группу или установив автоматический рост для существующих файлов в файловой группе.

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

Какой лучший обходной путь? Эти данные в конечном итоге займет около 60-80 ГБ.

Аарон Бертран
источник
1
Какую версию SQL Server вы используете? Сколько свободного места доступно на диске (дисках), где хранятся файлы данных для «базы данных»?
Набронд
2
В сообщении об ошибке сообщается о «лучших обходных путях»: создайте необходимое пространство, удалив объекты в файловой группе, добавив дополнительные файлы в файловую группу или установив автоматический рост для существующих файлов в файловой группе. Я не уверен, что еще мы можем вам сказать.
1
Брэндон, SQL SERVER 2012. 760 ГБ свободного места на диске, где хранятся файлы данных для базы данных. Кен, у меня включено автоматическое увеличение, автоматическое увеличение увеличивается на 2500 МБ, а максимальный размер неограничен. Должен ли я все еще сталкиваться с этой проблемой? Возможно ли, что есть несколько автостров, которые необходимо включить?
1
Вы пытались вручную увеличить базу данных?
1
Может ли быть так, что autogrow работает только между элементами, а ОДНА вставка превышает лимит? Я бы поспорил - если 20000-гигабайтная вставка не срабатывает на 2500-гигабайтном автограве ... может быть, есть 900 МБ свободной, и вставка не удалась.
TomTom

Ответы:

11

Sql Express база данных будет пополняться на 10g. Я считаю, что это похоже на сообщение об ошибке, которое вы получаете.

Однажды я столкнулся с этой проблемой у клиента, и мне потребовалось время, чтобы разобраться.

какую версию sql вы используете?

Greg
источник
1
это решение спасло меня! Я был на версии Express и обновился до Dev.
Израиль Родригес
7

Вы уверены, что это

Не удалось выделить новую страницу для базы данных 'database' из-за недостатка места на диске в файловой группе '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
...

пока вы не получите желаемый размер файла журнала. Давайте назовем это 80GB, где вы установите свой рост до определенного размера. Я использую значения, рекомендованные Полом Рэндалом и Кимберли Трипп

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 80000MB,
    FILEGROWTH = 8000MB
);
swasheck
источник
6

Попробуйте вырастить это вручную:

1. В обозревателе объектов подключитесь к экземпляру компонента SQL Server Database Engine, а затем разверните этот экземпляр.

2.Разверните базы данных, щелкните правой кнопкой мыши базу данных, чтобы увеличить ее, а затем нажмите Свойства.

3.В разделе «Свойства базы данных» выберите страницу «Файлы».

4.Чтобы увеличить размер существующего файла, увеличьте значение в столбце Начальный размер (МБ) для файла. Вы должны увеличить размер базы данных как минимум на 1 мегабайт.

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

6.Нажмите ОК.

От: MSDN

Харт CO
источник
4
Ручное расширение хорошо, потому что оно может рассказать вам больше деталей. В моем случае я получил: «CREATE DATABASE или ALTER DATABASE не удалось, потому что результирующий совокупный размер базы данных превысил бы ваш лицензионный лимит в 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'

Они помогают мне с ошибкой :) Также убедитесь, что у нас достаточно дискового пространства на компьютере.

Разван
источник