Không thể phân bổ một trang mới cho cơ sở dữ liệu vì không đủ dung lượng đĩa


13

Sử dụng Trình hướng dẫn Nhập và Xuất của Máy chủ SQL, tôi gặp lỗi này:

Lỗi 0xc0202009: Nhiệm vụ luồng dữ liệu 1: Mã lỗi SSIS DTS_E_OLEDBERROR.
Đã xảy ra lỗi OLE DB. Mã lỗi: 0x80004005.
Không thể phân bổ một trang mới cho cơ sở dữ liệu 'cơ sở dữ liệu' vì không đủ dung lượng đĩa trong filegroup 'PRIMARY'. Tạo không gian cần thiết bằng cách thả các đối tượng trong nhóm fileg, thêm các tệp bổ sung vào filegroup hoặc đặt chế độ tự động bật cho các tệp hiện có trong filegroup.

Tôi đang cố tải lên một loạt các tệp 2 GB và trong khi tải tệp thứ 4, tôi tiếp tục nhận được thông báo lỗi ở trên ngay cả sau khi tôi truy cập vào Thuộc tính cơ sở dữ liệu> Tệp và thay đổi tự động của Filegroup thành 2500 MB và tối đa hóa không giới hạn.

Cách giải quyết tốt nhất là gì? Dữ liệu này cuối cùng sẽ chiếm khoảng 60-80GB.


1
Phiên bản SQL Server nào bạn đang chạy? Có bao nhiêu dung lượng trống trên ổ đĩa lưu trữ các tệp dữ liệu cho "cơ sở dữ liệu"?
nabrond

2
Thông báo lỗi cho bạn biết "cách giải quyết tốt nhất": Tạo khoảng trống cần thiết bằng cách thả các đối tượng trong filegroup, thêm các tệp bổ sung vào filegroup hoặc cài đặt tự động bật cho các tệp hiện có trong filegroup. Tôi không chắc những gì chúng tôi có thể nói với bạn.

1
Brandon, SQL SERVER 2012. 760gb không gian trống trên ổ đĩa lưu trữ các tệp dữ liệu cho cơ sở dữ liệu. Ken, tôi đã bật chế độ tự động, tự động tăng thêm 2500 MB và tối đa hóa không giới hạn. Tôi vẫn nên chạy vào vấn đề này? Có thể có nhiều autogrowths cần kích hoạt?

1
Bạn đã thử tự trồng DB chưa?

1
Có thể là autogrow chỉ hoạt động giữa các phần tử và ONE insert vượt quá giới hạn? Sẽ là sự đánh cược của tôi - nếu chèn 20000gb không thành công trên tự động 2500gb .... nó có thể có 900mb miễn phí và chèn không thành công.
TomTom

Câu trả lời:


11

Cơ sở dữ liệu Sql express sẽ đứng đầu lúc 10g. Tôi tin rằng điều này tương tự như thông báo lỗi mà bạn nhận được.

Tôi đã gặp vấn đề này một lần tại một khách hàng và tôi phải mất một thời gian để tìm ra.

Phiên bản nào của sql bạn đang chạy?


1
Giải pháp này đã cứu tôi! Tôi đã dùng phiên bản Express và nâng cấp lên Dev.
Israel Rodriguez

7

Bạn có chắc không

Không thể phân bổ một trang mới cho cơ sở dữ liệu 'cơ sở dữ liệu' vì không đủ dung lượng đĩa trong filegroup 'PRIMARY'.

và không

Không thể phân bổ một trang mới cho cơ sở dữ liệu 'tempdb' vì không đủ dung lượng đĩa trong filegroup 'PRIMARY'.

?

Nếu nó thực sự [tempdb]nằm trong thông báo lỗi thì đó là thứ cần được quản lý riêng bằng cách đảm bảo rằng đó [tempdb]là trên một đĩa có kích thước phù hợp được tách ra khỏi cơ sở dữ liệu khác.

Nếu nó không có [tempdb]trong thông báo lỗi, tôi sẽ tưởng tượng rằng một "tải lên" của loại này sẽ gặp [tempdb]khá nhiều khó khăn. Là [tempdb]trên cùng một đĩa / LUN như 'database'? Nếu vậy, có lẽ bạn đang làm trầm trọng thêm vấn đề của mình với nhiều lần tăng trưởng tệp đã thử (trên nhiều cơ sở dữ liệu). Vì vậy, trong khi bạn đang thực hiện việc "tải lên" này, hãy đảm bảo rằng bạn cũng đang theo dõi [tempdb].

Nếu [tempdb]nằm trên một ổ đĩa riêng và bạn chắc chắn rằng mình có đủ dung lượng, tôi sẽ tiếp tục và định cỡ tệp dữ liệu của mình theo kích thước trạng thái cuối:

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

Ngoài ra, vui lòng đảm bảo rằng tệp nhật ký của cơ sở dữ liệu tách biệt với tệp dữ liệu. Nếu không thì bạn sẽ quay lại với các sự kiện tăng trưởng cạnh tranh. Nếu chúng nằm trên các đĩa riêng biệt, thì tôi cũng sẽ trải qua và định cỡ chúng một cách thích hợp.

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

cho đến khi bạn nhận được kích thước logfile mong muốn của bạn. Hãy gọi nó là 80 GB, nơi bạn sẽ đặt mức tăng trưởng của mình lên một kích thước cụ thể. Tôi đang sử dụng các giá trị được đề xuất bởi Paul RandalKimberly Tripp

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

6

Hãy thử phát triển thủ công:

1. Trong Object Explorer, kết nối với một phiên bản của Công cụ cơ sở dữ liệu SQL Server và sau đó mở rộng phiên bản đó.

2. Mở rộng cơ sở dữ liệu, bấm chuột phải vào cơ sở dữ liệu để tăng, sau đó bấm thuộc tính.

3.Trong Thuộc tính cơ sở dữ liệu, chọn trang Tệp.

4. Để tăng kích thước của tệp hiện có, hãy tăng giá trị trong cột Kích thước ban đầu (MB) cho tệp. Bạn phải tăng kích thước của cơ sở dữ liệu ít nhất 1 megabyte.

5. Để tăng kích thước của cơ sở dữ liệu bằng cách thêm một tệp mới, nhấp vào Thêm và sau đó nhập các giá trị cho tệp mới. Để biết thêm thông tin, hãy xem Thêm dữ liệu hoặc tệp nhật ký vào cơ sở dữ liệu.

6.Nhấp OK.

Từ: MSDN


4
Mở rộng bằng tay là tốt vì nó có thể cho bạn biết thêm chi tiết. Trong trường hợp của tôi, tôi đã nhận được: "TẠO cơ sở dữ liệu hoặc thay đổi cơ sở dữ liệu không thành công vì kích thước cơ sở dữ liệu tích lũy kết quả sẽ vượt quá giới hạn được cấp phép của bạn là 10240 MB cho mỗi cơ sở dữ liệu." Đó là tự giải thích.
user824276

1

Bạn cũng có thể sử dụng các tập lệnh sau để giải phóng không gian từ cơ sở dữ liệu:

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

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

Những cái này giúp tôi với lỗi :) Cũng đảm bảo rằng chúng tôi có đủ dung lượng đĩa trên máy tính.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.