Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Di chuyển bảng hiện có từ nhóm tệp chính sang nhóm tệp khác

Trong bài viết này, tôi sẽ giải thích cách di chuyển một bảng từ nhóm tệp Chính sang nhóm tệp phụ. Trước tiên, hãy hiểu tệp dữ liệu, nhóm tệp và loại nhóm tệp là gì.

Tệp cơ sở dữ liệu và nhóm tệp

Khi SQL Server được cài đặt trên bất kỳ máy chủ nào, nó sẽ tạo một tệp dữ liệu chính và tệp nhật ký để lưu trữ dữ liệu. Tệp dữ liệu chính lưu trữ dữ liệu và các đối tượng cơ sở dữ liệu như bảng, chỉ mục, thủ tục được lưu trữ, v.v. Tệp nhật ký lưu trữ thông tin cần thiết để khôi phục các giao dịch. Các tệp dữ liệu có thể được phân nhóm lại với nhau trong các nhóm tệp.

SQL Server có ba loại tệp

  1. Tệp chính :Nó được tạo khi máy chủ SQL đang được cài đặt và nó chứa siêu dữ liệu và thông tin cơ sở dữ liệu. Dữ liệu người dùng, các đối tượng có thể được lưu trữ trên các tệp dữ liệu chính. Tệp Chính có phần mở rộng .mdf.
  2. Tệp Phụ :Các tệp thứ cấp do người dùng xác định. Chúng lưu trữ dữ liệu Người dùng, Đối tượng do người dùng tạo ra. Họ có phần mở rộng .ndf.
  3. Tệp Nhật ký Giao dịch s:Các tệp T-Logs ghi lại tất cả các giao dịch được thực hiện để khôi phục cơ sở dữ liệu. Phần mở rộng tệp Nhật ký trong .ldf.

Như tôi đã đề cập ở trên, các tệp dữ liệu có thể được nhóm trong một nhóm tệp. Trong khi SQL Server đang được cài đặt, nó sẽ tạo nhóm tệp chính có tệp dữ liệu chính. Nhóm tệp thứ cấp do người dùng xác định. Chúng có các tệp dữ liệu thứ cấp. Khi chúng tôi tạo một cơ sở dữ liệu mới, chúng tôi có thể tạo các tệp dữ liệu thứ cấp và nhóm tệp. Thêm tệp dữ liệu thứ cấp giúp cải thiện hiệu suất. Nó có thể được tạo trên các ổ đĩa khác nhau hoặc các phân vùng đĩa riêng biệt để giảm thời gian chờ IO và đọc-ghi.

Bạn nên giữ các bảng và chỉ mục trong các nhóm tệp riêng biệt. Ngoài ra, giữ các bảng lớn trong các tệp riêng biệt sẽ cải thiện hiệu suất.

Có ba loại nhóm tệp:

  1. Nhóm tệp hàng :Nhóm tệp hàng, còn được gọi là nhóm tệp chính, chứa một tệp dữ liệu chính. Đối tượng SQL, dữ liệu, bảng hệ thống phân bổ cho nhóm tệp chính.
  2. Nhóm tệp được tối ưu hóa bộ nhớ :Nhóm tệp được tối ưu hóa bộ nhớ chứa các bảng và dữ liệu được tối ưu hóa bộ nhớ. Để bật OLTP trong bộ nhớ, chúng tôi cần tạo một nhóm tệp được tối ưu hóa cho bộ nhớ.
  3. FileStream :Nhóm tệp dòng tệp chứa dữ liệu dòng tệp như Hình ảnh, Tài liệu, tệp thực thi, v.v. Nhóm tệp Chính không thể chứa dữ liệu luồng tệp, chúng ta cần tạo nhóm tệp FileStream. Nó chứa dữ liệu FileStream.

Thiết lập Demo

Trong bản trình diễn này, tôi đã tạo “DemoDatabase” trên phiên bản SQL Server 2017. Các tab “Hồ sơ” và “Dữ liệu bệnh nhân” đã được tạo trên cơ sở dữ liệu. Khóa chính “PK_CIDX_Records_ID” đã được tạo trên bảng “Bản ghi” và chỉ mục nhóm “CIDX_PatologyData_ID” đã được tạo trên bảng “Dữ liệu bệnh nhân”. Trong bản trình diễn này, tôi sẽ di chuyển bảng “Hồ sơ” và “Dữ liệu bệnh nhân” từ nhóm tệp chính sang nhóm tệp phụ.

Để làm được điều này, chúng ta cần thực hiện những việc sau:

  1. Tạo một nhóm tệp phụ.
  2. Thêm tệp dữ liệu vào nhóm tệp phụ.
  3. Di chuyển bảng vào nhóm tệp phụ bằng cách di chuyển chỉ mục được nhóm với ràng buộc khóa chính.
  4. Di chuyển các bảng vào nhóm tệp phụ bằng cách di chuyển chỉ mục được nhóm mà không có khóa chính.

Tạo nhóm tệp phụ

Nhóm tệp phụ có thể được tạo bằng T-SQL HOẶC sử dụng trình hướng dẫn Thêm tệp từ SQL Server Management Studio. Để thêm nhóm tệp bằng SSMS, hãy mở SSMS và chọn cơ sở dữ liệu nơi nhóm tệp cần được tạo. Nhấp chuột phải vào cơ sở dữ liệu chọn “ Thuộc tính ”>> chọn“ Nhóm tệp ”Và nhấp vào“ Thêm nhóm tệp ”Như thể hiện trong hình ảnh sau:

Khi chúng tôi nhấp vào nút “ Thêm nhóm tệp ", Một hàng sẽ được thêm vào" Hàng ”Lưới. Trong “ Hàng ”, Cung cấp tên nhóm tệp thích hợp trong“ Tên " cột. Nhóm tệp không phải là chỉ đọc cũng không phải là mặc định; do đó, hãy giữ chế độ Chỉ đọc Mặc định đã xóa hộp kiểm cho nhóm tệp mới. Xem hình ảnh sau:

Nhấp vào OK để đóng hộp thoại.

Để tạo nhóm tệp bằng tập lệnh T-SQL, hãy chạy tập lệnh sau.

USE [master]
GO
ALTER DATABASE [DemoDatabase] ADD FILEGROUP [Secondary ]
GO

Thêm tệp vào nhóm tệp

Để thêm tệp vào một nhóm tệp, hãy mở thuộc tính cơ sở dữ liệu, chọn “tệp” và nhấp vào “Thêm”. Như hình sau:

Một hàng trống sẽ được thêm vào Tệp cơ sở dữ liệu chế độ hiển thị theo ô. Trong chế độ xem Lưới, cung cấp tên lôgic thích hợp trong Tên lôgic , chọn Dữ liệu hàng từ Loại tệp hộp thả xuống, chọn phụ từ Nhóm tệp hộp thả xuống, đặt kích thước ban đầu của tệp trong Kích thước ban đầu , đặt tự động tăng trưởng và thông số kích thước tối đa trong Tự động phát triển / Kích thước tối đa , cung cấp vị trí thực của tệp dữ liệu phụ trong Đường dẫn và cung cấp tên tệp thích hợp trong Tên tệp cột. Xem hình ảnh sau:

Sử dụng tập lệnh T-SQL sau để tạo tệp dữ liệu phụ.

USE [master]
GO
ALTER DATABASE [DemoDatabase] ADD FILE ( NAME = N'DemoDatabase_tblRecords', FILENAME =
N'E:\MS_SQL\SQL2017_Data\DemoDatabase_tblRecords.ndf' , SIZE = 8192KB , FILEGROWTH = 102400KB ) TO FILEGROUP [Secondary]
GO

Tệp dữ liệu thứ cấp đã được tạo. Xem hình ảnh sau:

Để xem danh sách các nhóm tệp được tạo trên cơ sở dữ liệu, hãy thực hiện truy vấn sau.

use DemoDatabase
go
select 
a.Name as 'File group Name', type_desc as 'Filegroup Type', case when is_default=1 then 'Yes' else 'No' end as 'Is filegroup default?',
b.filename as 'File Location',
b.name 'Logical Name',
Convert(numeric(10,3),Convert(numeric(10,3),(size/128))/1024) as 'File Size in MB'
 from sys.filegroups a inner join sys.sysfiles b on a.data_space_id=b.groupid

Dưới đây là đầu ra của truy vấn.

Chuyển Bảng Hiện có từ Nhóm Tệp Chính sang Nhóm Tệp Phụ

Chúng ta có thể di chuyển một bảng hiện có sang một nhóm tệp khác bằng cách di chuyển chỉ mục được nhóm sang một nhóm tệp khác. Như chúng ta đã biết, một nút lá của chỉ mục được phân cụm có dữ liệu thực tế; do đó việc di chuyển chỉ mục theo cụm có thể di chuyển toàn bộ bảng sang nhóm tệp khác. Di chuyển chỉ mục có một giới hạn:nếu chỉ mục là khóa chính hoặc ràng buộc duy nhất, bạn không thể di chuyển chỉ mục bằng cách sử dụng SQL Server Management Studio. Để di chuyển các chỉ mục đó, chúng tôi cần sử dụng tạo chỉ mục và với DROP_Existing =ON tùy chọn.

Di chuyển chỉ mục theo cụm với Ràng buộc khóa chính.

Khóa chính thực thi các giá trị duy nhất, do đó tạo chỉ mục được nhóm duy nhất. Cột quan trọng là PRN. Để tạo nó trong nhóm tệp phụ, hãy đặt DROP_EXISTING =ON tùy chọn và nhóm tệp phải là thứ yếu. Thực thi tập lệnh sau.

USE [DemoDatabas]
GO
Create Unique Clustered index [PK_CIDX_Records_ID] ON [Records] (ID asc)  WITH (DROP_EXISTING=ON) ON [Secondary]

Khi lệnh được thực thi thành công, hãy xác minh rằng chỉ mục đã được tạo trong nhóm tệp phụ. Đối với điều này, nhấp chuột phải vào Bộ nhớ trong Thuộc tính chỉ mục hộp thoại. Để mở thuộc tính chỉ mục, hãy mở rộng DemoDatabase cơ sở dữ liệu>> mở rộng Bảng >> mở rộng Chỉ mục . Nhấp chuột phải vào PK_CIDX_Records_ID , như thể hiện trong hình ảnh sau:

Như tôi đã đề cập, khi chỉ mục được phân cụm di chuyển đến nhóm tệp thứ cấp, bảng sẽ được chuyển đến nhóm tệp thứ cấp. Để xác minh điều đó, hãy nhấp chuột phải vào Bộ nhớ trong tùy chọn Thuộc tính bảng hộp thoại. Để mở thuộc tính chỉ mục, hãy mở rộng DemoDatabase cơ sở dữ liệu>> mở rộng Bảng s>> nhấp chuột phải vào Bản ghi, và chọn bộ nhớ, như thể hiện trong hình ảnh sau:

Di chuyển chỉ mục theo cụm không có khóa chính

Chúng ta có thể di chuyển chỉ mục được phân cụm mà không có khóa chính bằng cách sử dụng SQL Server Management Studio. Để làm điều đó, hãy mở rộng DemoDatabase cơ sở dữ liệu>> mở rộng Bảng >> mở rộng Lập chỉ mục s>> nhấp chuột phải vào CIDX_PatologyData_ID lập chỉ mục và chọn Thuộc tính, như thể hiện trong hình ảnh sau:

Thuộc tính chỉ mục hộp thoại mở ra. Trong hộp thoại, chọn Bộ nhớ, và trong cửa sổ Bộ nhớ, nhấp vào Nhóm tệp hộp thả xuống, chọn Phụ nhóm tệp và nhấp vào OK, như thể hiện trong hình ảnh sau:

Việc thay đổi nhóm tệp chỉ mục sẽ tạo lại toàn bộ chỉ mục. Sau khi chỉ mục được tạo lại, hãy mở Thuộc tính bảng và chọn một bộ nhớ.

Như bạn có thể thấy trong hình ảnh trên, cùng với việc di chuyển CIDX_PatologyData_ID chỉ mục nhóm cho nhóm tệp phụ, Dữ liệu bệnh nhân bảng cũng được chuyển đến Phụ nhóm tệp.

Bằng cách thực hiện truy vấn sau, bạn có thể tìm thấy danh sách các đối tượng được tạo cho nhóm tệp khác nhau:

   SELECT obj.[name] as [Table Name],
       obj.[type] as [Object Type],
       Indx.[name] as [Index Name],
       fG.[name] as [Filegroup Name]
FROM   sys.indexes INDX
       INNER JOIN sys.filegroups FG
               ON INDX.data_space_id = fG.data_space_id
       INNER JOIN sys.all_objects Obj
               ON INDX.[object_id] = obj.[object_id]
WHERE  INDX.data_space_id = fG.data_space_id
And obj.type='U'       
go

Dưới đây là đầu ra của truy vấn:

Tóm tắt

Trong bài viết này, tôi đã giải thích

    1. Kiến thức cơ bản về tệp dữ liệu và nhóm tệp.
    2. Cách tạo nhóm tệp phụ và thêm tệp dữ liệu phụ vào đó.
    3. Di chuyển bảng sang nhóm tệp phụ bằng cách di chuyển:
      • Khóa chính.
      • Chỉ mục theo nhóm.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách so sánh hai hàng từ cùng một bảng

  2. Tham số hóa đơn giản và các kế hoạch tầm thường - Phần 3

  3. Cách xóa cột trong SQL

  4. Tiền tố sp_ có còn là không?

  5. Sử dụng JShell trong Java 9 trong NetBeans 9.0, Phần 4