Tôi đang gặp một số thông báo lỗi kỳ lạ trên SQL Server 2017 CU3. Tôi đang di chuyển cơ sở dữ liệu và sắp xếp lại các nhóm fileg. Bằng cách "sắp xếp lại" Tôi có nghĩa là tôi sử dụng một thủ tục được lưu trữ để tạo ra một chức năng phân vùng và sơ đồ phân vùng trên filegroup mới cho một đối tượng, xây dựng lại các chỉ mục trong khi phân vùng và sau đó loại bỏ phân vùng.
Cuối cùng, tôi đã có một số nhóm trống. Các tập tin của họ được gỡ bỏ . Ngoài ra, chính các tập đoàn được loại bỏ. Điều này hoạt động tốt trong hầu hết các trường hợp. Tuy nhiên, đối với hai cơ sở dữ liệu, tôi đã xóa các tệp ... có một tệp fileg còn lại không có tệp nào được liên kết nhưng
ALTER DATABASE REMOVE FILEGROUP
ném lỗi 5042:
Không thể xóa tên tập tin 'xyz' vì nó không trống.
Câu hỏi
Làm thế nào tôi có thể thoát khỏi tập đoàn trống đó ... vấn đề có thể là gì?
Tôi đã đọc một số vấn đề phổ biến tuy nhiên chúng không có trong hệ thống của tôi:
Đã kiểm tra:
SELECT * FROM sys.partition_schemes; SELECT * FROM sys.partition_functions;
0 hàng ... không có đối tượng phân vùng còn lại trong cơ sở dữ liệu
UPDATE STATISTICS
cho tất cả các đối tượng trong cơ sở dữ liệukhông có tác dụng
Kiểm tra các chỉ mục trên filegroup:
SELECT * FROM sys.data_spaces ds INNER JOIN sys.indexes i ON ds.data_space_id = i.data_space_id WHERE ds.name = 'xyz'
0 hàng
Kiểm tra các đối tượng trong filegroup:
SELECT au.*, ds.name AS [data_space_name], ds.type AS [data_space_type], p.rows, o.name AS [object_name] FROM sys.allocation_units au INNER JOIN sys.data_spaces ds ON au.data_space_id = ds.data_space_id INNER JOIN sys.partitions p ON au.container_id = p.partition_id INNER JOIN sys.objects o ON p.object_id = o.object_id WHERE au.type_desc = 'LOB_DATA' AND ds.name ='xyz'
0 hàng
Tôi cũng đã thử DBCC SHRINKFILE
tham số EMPTYFILE
trước khi xóa tệp khỏi filegroup. Nó không thực sự có ý nghĩa với tôi tuy nhiên tôi đọc các giải pháp để mô tả điều đó như là một sửa chữa. Dù sao cũng không có tác dụng.
Tôi có một số hy vọng đọc câu hỏi này về lỗi máy chủ và đã thử như sau:
- Cập nhật tất cả các số liệu thống kê
- Bỏ tất cả các số liệu thống kê không liên quan đến chỉ mục
Tuy nhiên điều này không có tác dụng. Tôi vẫn có một filegroup không có tệp nào được liên kết và filegroup không thể bị xóa. Tôi hoàn toàn bối rối vì điều này xảy ra trong một số cơ sở dữ liệu chứ không phải trong các cơ sở dữ liệu khác (có cùng cấu trúc). Khi tôi thực hiện DBCC CHECK FILEGROUP
trên tập tin trống này, tôi nhận được một loạt các thông báo lỗi như sau:
Không thể xử lý hàng ID ID 72057594712162304 của đối tượng "STORY_TRANSLATIONSCCC" (ID 120387498), chỉ mục "Ref90159CCC" (ID 2), vì nó không nằm trong filegroup "CCC_APPLICATION_new" (ID 8).
Kết quả DBCC cho 'STORY_TRANSLATIONSCCC'. Có 0 hàng trong 0 trang cho đối tượng "STORY_TRANSLATIONSCCC".
Điều này là bình thường hay nó chỉ ra điều gì đó bất thường?
Câu hỏi này có thể là một bản sao, tuy nhiên tôi không thể tìm ra cách khắc phục hiệu quả cho mình trong các câu hỏi khác trên dba.stackexchange. Xin vui lòng xem danh sách những gì tôi đã thử. Điều này giống hệt với các giải pháp được mô tả trong Không thể xóa các nhóm không sử dụng .
Thêm chi tiết
Có lẽ nó giúp hiểu những gì tôi làm trước khi xảy ra lỗi. Tôi đang lên kế hoạch di chuyển đến một máy chủ mới. Tôi hiện đang thử nghiệm điều này trên một ví dụ thử nghiệm. Cơ sở dữ liệu được khôi phục từ máy chủ prod và mô hình khôi phục được chuyển sang đơn giản. Mục tiêu của tôi là tái cấu trúc các nhóm fileg và chuyển từ một mô hình với một tệp cho mỗi filegroup sang một mô hình với hai tệp cho mỗi nhóm tệp. Để đạt được điều đó, tôi tạo các nhóm fileg trống mới với hai tệp mỗi tệp và di chuyển dữ liệu qua. Thật không may, hầu hết các đối tượng đều có Dữ liệu LOB (XML và nhị phân) ... vì vậy tôi tận dụng phân vùng như một người trợ giúp để di chuyển dữ liệu lob. Cuối cùng, tất cả các dữ liệu nằm trong các nhóm mới và các nhóm cũ đều trống. Sau đó, tôi loại bỏ tất cả các tập tin và loại bỏ filegroup tương ứng là tốt. Nhóm chính vẫn còn và chỉ cần thêm một tệp khác.câu hỏi của tôi . Quá trình này hoạt động tốt nhưng trong hai cơ sở dữ liệu các tệp có thể bị xóa nhưng filegroup thì không. Đáng ngạc nhiên là cấu trúc của các cơ sở dữ liệu này phải giống như cấu trúc của các cơ sở dữ liệu khác không gặp phải vấn đề gì trong quá trình di chuyển dữ liệu và loại bỏ các tập tin cũ.
Vì vậy, đây là danh sách các tập tin và tệp của hai cơ sở dữ liệu nơi xảy ra sự cố:
- CCC_GENTE
trước
+-----------------+------------+
| Filegroup | Filename |
+-----------------+------------+
| CCC_APPLICATION | CCC_APP |
+-----------------+------------+
| CCC_ARCHIVE | CCC_ARCHIV |
+-----------------+------------+
| CCC_AXN | CCC_AXN |
+-----------------+------------+
| CCC_GDV | CCC_GDV |
+-----------------+------------+
| PRIMARY | CCC |
+-----------------+------------+
sau
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| Filegroup name | Filegroup temporary name | Filename (logical) | Status |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | - | CCC_APP | file removed, filegroup cannot be removed (error) |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | - | CCC_ARCHIV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | - | CCC_AXN | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | - | CCC_GDV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | CCC | file renamed to PRIMARY_1 |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | PRIMARY_2 | new file added |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
Tôi hy vọng việc đó sẽ có ích một chút. Ngoài ra còn có một cơ sở dữ liệu thứ hai trong đó các tên filegroup khác nhau nhưng tôi để nó ra cho ngắn gọn.