Tidak dapat mengalokasikan halaman baru untuk basis data karena ruang disk tidak mencukupi

13

Menggunakan Wisaya Impor dan Ekspor SQL Server, saya mendapatkan kesalahan ini:

Kesalahan 0xc0202009: Aliran Data Tugas 1: Kode Kesalahan SSIS DTS_E_OLEDBERROR.
Kesalahan OLE DB telah terjadi. Kode kesalahan: 0x80004005.
Tidak dapat mengalokasikan halaman baru untuk basis data 'basis data' karena ruang disk tidak mencukupi di filegroup 'PRIMER'. Buat ruang yang diperlukan dengan menjatuhkan objek di filegroup, menambahkan file tambahan ke filegroup, atau mengatur autogrowth untuk file yang ada di filegroup.

Saya mencoba mengunggah serangkaian file 2GB dan saat memuat file ke-4, saya terus mendapatkan pesan kesalahan di atas bahkan setelah saya pergi ke properti Database> File dan mengubah autogrowth Filegroup menjadi 2500 MB dan memaksimalkan ukuran tidak terbatas.

Apa solusi terbaik? Data ini pada akhirnya akan memakan waktu sekitar 60-80GB.

Aaron Bertrand
sumber
1
Versi SQL Server apa yang Anda jalankan? Berapa banyak ruang kosong yang tersedia pada drive yang menyimpan file data untuk "database"?
nabrond
2
Pesan kesalahan memberi tahu Anda "solusi terbaik": Buat ruang yang diperlukan dengan menjatuhkan objek di filegroup, menambahkan file tambahan ke filegroup, atau mengatur autogrowth untuk file yang ada di filegroup. Saya tidak yakin apa lagi yang bisa kami sampaikan kepada Anda.
1
Brandon, SQL SERVER 2012. 760gb ruang kosong pada drive yang menyimpan file data untuk basis data. Ken, saya memiliki autogrowth diaktifkan, autogrowth tumbuh 2.500 MB dan maksimum tak terbatas. HARUS saya masih mengalami masalah ini? Apakah mungkin ada beberapa autogrowth yang perlu diaktifkan?
1
Sudahkah Anda mencoba menumbuhkan DB secara manual?
1
Mungkinkah autogrow hanya berfungsi di antara elemen dan SATU sisipan melampaui batas? Taruhan saya - jika insert 20000gb gagal pada autogrow 2500gb .... bisa saja ada 900mb gratis dan insert gagal.
TomTom

Jawaban:

11

Sql express database akan mencapai 10g. Saya percaya ini mirip dengan pesan kesalahan yang Anda dapatkan.

Saya mengalami masalah ini sekali di klien dan butuh beberapa saat untuk mencari tahu.

versi sql apa yang Anda jalankan?

greg
sumber
1
solusi ini menyelamatkan saya! Saya berada di versi Express dan ditingkatkan ke Dev.
Israel Rodriguez
7

Apakah kamu yakin itu?

Tidak dapat mengalokasikan halaman baru untuk basis data 'basis data' karena ruang disk tidak mencukupi di filegroup 'PRIMER'.

dan tidak

Tidak dapat mengalokasikan halaman baru untuk database 'tempdb' karena ruang disk tidak mencukupi di filegroup 'PRIMARY'.

?

Jika benar-benar ada [tempdb]dalam pesan kesalahan maka itu adalah sesuatu yang perlu dikelola secara terpisah dengan memastikan bahwa itu [tempdb]ada di disk berukuran tepat yang dipisahkan dari database lain.

Jika tidak ada [tempdb]dalam pesan kesalahan, saya akan membayangkan bahwa "unggahan" semacam ini akan [tempdb]sangat sulit. Apakah [tempdb]pada disk / LUN yang sama 'database'? Jika demikian, Anda mungkin memperburuk masalah Anda dengan beberapa upaya pertumbuhan file (pada banyak basis data). Jadi saat Anda melakukan "unggahan" ini, pastikan Anda juga memantau [tempdb].

Jika [tempdb]berada di drive terpisah dan Anda yakin memiliki ruang yang cukup, saya akan melanjutkan dan mengukur file data Anda sesuai dengan yang Anda inginkan yaitu ukuran end-state:

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

Selain itu, pastikan file log basis data terpisah dari file data. Jika tidak, maka Anda kembali dengan acara pertumbuhan yang bersaing. Jika mereka berada di disk terpisah, maka saya juga akan memeriksa ukurannya dengan tepat.

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

sampai Anda mendapatkan ukuran file log yang Anda inginkan. Sebut saja 80GB tempat Anda akan mengatur pertumbuhan Anda ke ukuran tertentu. Saya menggunakan nilai yang direkomendasikan oleh Paul Randal dan Kimberly Tripp

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

Coba tumbuhkan secara manual:

1.Dalam Obyek Explorer, sambungkan ke contoh Mesin Database SQL Server, dan kemudian rentangkan contoh itu.

2. Perluas Basis Data, klik kanan basis data untuk meningkatkan, lalu klik Properti.

3.Dalam Properti Database, pilih halaman File.

4.Untuk menambah ukuran file yang ada, tambah nilainya di kolom Initial Size (MB) untuk file tersebut. Anda harus menambah ukuran database paling tidak 1 megabyte.

5.Untuk menambah ukuran database dengan menambahkan file baru, klik Tambah dan kemudian masukkan nilai untuk file baru. Untuk informasi lebih lanjut, lihat Menambahkan Data atau Log File ke Database.

6. Klik OK.

Dari: MSDN

Hart CO
sumber
4
Perluasan manual bagus karena dapat memberi tahu Anda lebih banyak detail. Dalam kasus saya, saya mendapat: "BUAT DATABASE atau ALTER DATABASE gagal karena ukuran basis data kumulatif yang dihasilkan akan melebihi batas lisensi Anda sebesar 10240 MB per basis data." Yang cukup jelas.
user824276
1

Anda juga dapat menggunakan skrip berikut untuk membebaskan ruang dari basis data:

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

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

Yang ini membantu saya dengan kesalahan :) Juga pastikan kita memiliki cukup ruang disk di komputer.

Razvan
sumber