Cơ sở dữ liệu SQL Server lưu trữ dữ liệu và các đối tượng của chúng trong các tệp. Mỗi cơ sở dữ liệu có ít nhất một tệp dữ liệu (và một tệp nhật ký), nhưng nó không bị hạn chế chỉ một - nó có thể có nhiều tệp dữ liệu. Nếu bạn từng rơi vào tình huống cần xóa tệp dữ liệu khỏi cơ sở dữ liệu, trước tiên bạn cần làm trống tệp đó trước khi xóa.
Nhưng đừng lo lắng, việc làm trống một tệp không thực sự xóa dữ liệu. Nó chỉ đơn giản là di chuyển dữ liệu của tệp sang các tệp khác trong cùng một nhóm tệp.
Các ví dụ dưới đây trình bày cách làm trống tệp dữ liệu, sau đó xóa tệp đó khỏi cơ sở dữ liệu bằng Transact-SQL.
Ví dụ nhanh
Dưới đây là một ví dụ nhanh để chỉ cho bạn cách làm trống một tệp dữ liệu và xóa nó khỏi cơ sở dữ liệu:
-- Empty the file DBCC SHRINKFILE (Solutions2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Solutions REMOVE FILE Solutions2; GO
Vì vậy, như đã giải thích, điều này làm trống tệp, sau đó xóa hoàn toàn khỏi cơ sở dữ liệu. Khi bạn sử dụng EMPTYFILE
, điều này sẽ di chuyển tất cả dữ liệu từ tệp này sang các tệp khác trong cùng một nhóm tệp. Do đó, bạn cần đảm bảo rằng đây không phải là tệp duy nhất trong nhóm tệp (nếu không, bạn sẽ gặp lỗi). EmptyFile cũng đảm bảo với bạn rằng sẽ không có dữ liệu mới nào được thêm vào tệp.
Một ví dụ dài hơn
Trong trường hợp bạn cảm thấy bối rối với ví dụ trước, hãy xem qua quy trình tạo cơ sở dữ liệu mới, thêm tệp dữ liệu mới, sau đó làm trống rồi xóa.
Tạo cơ sở dữ liệu và xem thông tin tệp dữ liệu của nó
-- Switch to the master database USE master; GO -- Create a new database CREATE DATABASE Test; GO -- View it's data file and log file info USE Test; GO SELECT file_id, name, type_desc, physical_name, size, max_size FROM sys.database_files ; GO
Đầu tiên, chúng tôi chuyển sang cơ sở dữ liệu chính trước khi tạo cơ sở dữ liệu mới có tên là Test
. Sau đó, chúng tôi chuyển sang cơ sở dữ liệu mới và chọn một số thông tin nhất định về các tệp cơ sở dữ liệu của nó từ sys.database_files
chế độ xem danh mục hệ thống.
Thêm tệp dữ liệu mới
-- Add a new data file ALTER DATABASE Test ADD FILE ( NAME = Test2, FILENAME = '/var/opt/mssql/data/Test2.mdf', SIZE = 8MB ); GO -- View it's data file and log file info USE Test; GO SELECT file_id, name, type_desc, physical_name, size, max_size FROM sys.database_files ; GO
Bây giờ chúng tôi thêm một tệp dữ liệu mới có tên logic là Test2
và một đường dẫn vật lý của /var/opt/mssql/data/Test2.mdf
(lưu ý rằng đây là đường dẫn Linux / Mac. Nếu sử dụng Windows, hãy sử dụng dấu gạch chéo ngược thay vì dấu gạch chéo về phía trước). Một lần nữa, chúng tôi truy vấn sys.database_files
chế độ xem danh mục hệ thống để chúng tôi có thể xem chi tiết về tệp mới của mình.
Làm trống Tệp Dữ liệu và Xóa nó
Đối với mục đích của ví dụ này, giả sử rằng cơ sở dữ liệu đã được đưa vào sản xuất và tệp dữ liệu chúng ta vừa tạo đã được tải lên đầy dữ liệu. Bây giờ chúng tôi muốn loại bỏ tệp đó (vì bất kỳ lý do gì). Nhưng trước khi xóa tệp, chúng ta cần làm trống nó (di chuyển dữ liệu của nó sang một tệp khác).
Đây là cách thực hiện điều đó:
-- Empty the new data file DBCC SHRINKFILE (Test2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Test REMOVE FILE Test2; GO -- View it's data file and log file info USE Test; GO SELECT file_id, name, type_desc, physical_name, size, max_size FROM sys.database_files ; GO
Vì vậy, đây giống như ví dụ đầu tiên trên trang này, ngoại trừ cơ sở dữ liệu của chúng tôi có tên khác. Và trong ví dụ này, chúng tôi truy vấn sys.database_files
để xác nhận rằng tệp thực sự đã bị xóa.