Cách tạo nhóm tệp trong SQL Server

FYI Tôi sử dụng tập lệnh này để thêm một nhóm tệp người dùng và đặt nó làm mặc định [sau khi tạo db] để giữ sạch chính cho thông tin danh mục

/*

* alzdba đ 20070509

* thêm nhóm tệp FGUserData bằng một tệp và biến nó thành nhóm tệp DEFAULT

* để tách các đối tượng người dùng khỏi các đối tượng hệ thống [danh mục] để hỗ trợ khôi phục nhóm tệp

* để chúng tôi có thể đưa ra danh mục càng sớm càng tốt

* và sau đó thêm các khôi phục nhóm tệp cần thiết

*

* sp_helpdb

*

*/

KHAI BÁO bit @ExcludedDb

/*

* kiểm tra cơ sở dữ liệu bị loại trừ

*/

NẾU TỒN TẠI [CHỌN *

TỪ chủ. hệ thống. cơ sở dữ liệu

WHERE NAME not in ['master', 'msdb', 'tempdb', 'model' -- Cơ sở dữ liệu hệ thống SQLServer [Không thể thêm tệp vào cơ sở dữ liệu chính và cơ sở dữ liệu mô hình]

,'Spotlight' ,'DDBADummy' ,'DJOBI' -- Cơ sở dữ liệu công việc ALZDBA

,'AdventureWorks', 'AdventureWorksDW', 'Northwind', 'Pubs' -- Cơ sở dữ liệu mẫu SQLServer

,'DDBAServerPing' -- Cơ sở dữ liệu ping ALZDBA

]

VÀ tên = db_name[]

]

-- Rij gévonden. đồng ý

ĐẶT @ExcludedDb = 0

KHÁC

ĐẶT @ExcludedDb = 1

/*

* kiểm tra xem db có một nhóm tệp không CHÍNH

*/

NẾU CÓ [Chọn *

TỪ hệ thống. nhóm tập tin

Ở ĐÂU TÊN 'CHÍNH' ]

HOẶC @ExcludedDb = 1

BẮT ĐẦU

NẾU @ExcludedDb = 1

BẮT ĐẦU

IN '*'

IN '*'

PRINT '- Cơ sở dữ liệu [' + db_name[] + '] là cơ sở dữ liệu bị loại trừ cho thao tác này. '

IN '*'

IN '*'

CHẤM DỨT

KHÁC

BẮT ĐẦU

IN '*'

IN '*'

IN '- Cơ sở dữ liệu đã chứa một nhóm tệp không CHÍNH'

IN '*'

IN '*'

CHẤM DỨT

CHẤM DỨT

KHÁC

BẮT ĐẦU

KHAI BÁO @rc INT

KHAI BÁO @cmd NVARCHAR[MAX]

KHAI BÁO @InitialSizeKB VARCHAR[15]

KHAI BÁO @IncrementKB VARCHAR[15]

KHAI BÁO @Filename NVARCHAR[260]

BỘ @rc = -1

CHỌN HÀNG ĐẦU 1 @Tên tệp = THAY THẾ [tên tệp, '. mdf' , '_FGUserData. NDF']

, @InitialSizeKB = CAST[[[Kích thước] * 8 ] NHƯ VARCHAR[15]]

, @IncrementKB = CAST[CEILING [[tăng trưởng] * 8 ] AS VARCHAR[15]] -- thông thường chúng tôi sử dụng tăng trưởng tính bằng MB

TỪ hệ thống. sysfiles

WHERE LOWER[tên tệp] THÍCH '%. mdf'

CHỌN @cmd = 'In ''* [' + db_name[] + '] *'' ;

+ CHAR[10] + 'Thay đổi cơ sở dữ liệu [' + db_name[] + '] '

+ CHAR[10] + ' THÊM TẬP TIN NHÓM FGUserData ;'

+ CHAR[10]

+ 'Thay đổi cơ sở dữ liệu [' + db_name[] + '] '

+ CHAR[10] + ' THÊM TẬP TIN [ TÊN = FUserData, FILENAME = ''' + @Filename + ''', '

+ CHAR[10] + ' SIZE = ' + @InitialSizeKB + 'KB, MAXSIZE = UNLIMITED , FILEGROWTH = ' + @IncrementKB + 'KB ]'

Nếu bạn chỉ muốn đặt tệp dữ liệu mới vào đường dẫn cá thể mặc định, bạn có thể làm như Scott gợi ý - sử dụng thuộc tính máy chủ cho đường dẫn dữ liệu mặc định

DECLARE @dbname sysname = N'myapp_db';

DECLARE @path nvarchar[511] = 
  CONVERT[nvarchar[511], SERVERPROPERTY['InstanceDefaultDataPath'];

DECLARE @sql nvarchar[max] = N'ALTER DATABASE $db$
  ADD FILEGROUP data_fg;

ALTER DATABASE $db$ ADD FILE [
    NAME=data_fg,
    FILENAME=''data_fg.ndf'',
    SIZE=32MB,
    MAXSIZE=4096MB,
    FILEGROWTH=32MB
] TO FILEGROUP data_fg;';

SET @sql = REPLACE[REPLACE[@sql, N'$path$', @p], N'$db$', @dbname];

PRINT @sql;
-- EXEC sys.sp_executesql @sql;

Tuy nhiên, nếu bạn muốn dựa trên cơ sở dữ liệu này từ cơ sở dữ liệu hiện có [có thể là cơ sở dữ liệu bạn đang thay đổi, nếu họ chuyển cơ sở dữ liệu đó bằng tham số], thì bạn có thể thực hiện việc này

DECLARE @dbname sysname = N'model';

DECLARE @p nvarchar[511];

;WITH x AS [SELECT TOP [1] p = physical_name, type_desc
  FROM sys.master_files
  WHERE database_id = DB_ID[@dbname]
  AND type_desc = N'ROWS'
  ORDER BY file_id
]
SELECT @p = SUBSTRING[p, 1, LEN[p]-CHARINDEX['/',REVERSE[p]]+1]
FROM x;

DECLARE @sql nvarchar[max] = N'ALTER DATABASE $db$
  ADD FILEGROUP data_fg;

ALTER DATABASE $db$ ADD FILE [
    NAME=data_fg,
    FILENAME=''data_fg.ndf'',
    SIZE=32MB,
    MAXSIZE=4096MB,
    FILEGROWTH=32MB
] TO FILEGROUP data_fg;';

SET @sql = REPLACE[REPLACE[@sql, N'$path$', @p], N'$db$', @dbname];

PRINT @sql;
-- EXEC sys.sp_executesql @sql;

Bạn thậm chí có thể muốn cho phép người dùng của mình ghi đè lên một đường dẫn cụ thể [hãy nghĩ đến trường hợp ổ đĩa hiện tại đang trở nên đông đúc và họ muốn bắt đầu tệp mới này ở một vị trí hoàn toàn mới]

Tôi cũng thấy lạ là bạn lại bận tâm tạo một tệp dữ liệu chỉ có 32 MB. Điều đó hầu như không đủ lớn để chứa siêu dữ liệu về tệp và chắc chắn sẽ bắt đầu một chu kỳ tự động phát triển ngay khi nó hoạt động

Trong bài viết này, chúng ta sẽ tìm hiểu cách chúng ta có thể quản lý nhóm tệp FILESTREAM của Cơ sở dữ liệu SQL. Tôi sẽ bao gồm các chủ đề sau

  1. Định cấu hình tính năng FILESTREAM trong SQL Server
  2. Tạo nhóm tệp FILESTREAM bằng cách sử dụng studio quản lý SQL Server và các câu lệnh T-SQL
  3. Thêm nhiều tệp FILESTREAM vào Nhóm tệp

Trước tiên, chúng ta hãy kích hoạt tính năng FILESTREAM

Kích hoạt tính năng FILESTREAM

Chúng tôi có thể kích hoạt FILESTREAM bằng công cụ quản lý cấu hình SQL Server. Để làm điều đó, hãy mở trình quản lý cấu hình SQL Server 🡪 Nhấp chuột phải vào phiên bản SQL Server mà bạn muốn bật tính năng FILESTREAM và nhấp vào Thuộc tính

Trong hộp thoại Thuộc tính máy chủ SQL, nhấp vào FILESTREAM và đánh dấu vào các tùy chọn sau

  1. Bật FILESTREAM để truy cập Transact-SQL
  2. Bật FILESTREAM để truy cập tệp I/O
  3. Chỉ định tên mong muốn của chia sẻ cửa sổ trong hộp văn bản tên chia sẻ Windows
  4. Cho phép máy khách từ xa truy cập vào dữ liệu FILESTREAM

Ảnh chụp màn hình

Nhấn OK để lưu các thông số cấu hình. Khi các thay đổi được áp dụng, hãy khởi động lại Dịch vụ SQL

Định cấu hình cấp độ truy cập FILESTREAM

Khi FILESTREAM đã được bật trên phiên bản SQL Server, chúng ta phải định cấu hình cấp độ truy cập FILESTREAM. Các giá trị cấu hình hợp lệ như sau

Mô tả tùy chọn

Giá trị trong lệnh T-SQL

Tùy chọn trong studio quản lý SQL Server

Quyền truy cập FILESTREAM bị vô hiệu hóa

0

Vô hiệu hóa

Truy cập FILESTREAM cho các truy vấn T-SQL

1

Đã bật quyền truy cập SQL giao dịch

Truy cập FILESTREAM cho các truy vấn T-SQL và phát trực tuyến cửa sổ

2

Đã bật toàn quyền truy cập

Để đặt giá trị của các tham số trên bằng SQL Server management studio, hãy mở SSMS và kết nối với phiên bản SQL Server. Nhấp chuột phải vào cá thể và chọn Thuộc tính

Trên hộp thoại Thuộc tính máy chủ, nhấp vào Nâng cao. Chọn tùy chọn Kích hoạt toàn quyền truy cập từ hộp thả xuống Cấp truy cập FILESTREAM

Bấm OK để lưu cấu hình và khởi động lại dịch vụ SQL Server

Ngoài ra, bạn có thể chạy lệnh sp_configure để đặt cấp độ truy cập tệp cho FILESTREAM. Tham số cấu hình để đặt mức truy cập là filestream_access_level. Nếu bạn muốn bật Quyền truy cập FILESTREAM cho các truy vấn T-SQL và phát trực tuyến cửa sổ, truy vấn được viết như sau

1

2

3

4

5

6

 

  sử dụng chính

  đi

  exec sp_configure 'filestream_Access_level', 2

  cấu hình lại

 

Khi một tham số được đặt, bạn phải khởi động lại dịch vụ. Khi các dịch vụ được khởi động lại, hãy chạy lệnh sp_configure để xem các giá trị của tham số filestream_access_level

1

2

3

4

5

 

  sử dụng chính

  đi

  exec sp_configure

 

đầu ra truy vấn

Như bạn có thể thấy, giá trị của tham số filestream_access_level là hai [2]. Bây giờ, chúng ta hãy tạo một nhóm tệp FILESTREAM

Tạo một nhóm tệp FILESTREAM bằng SQL Server Management Studio

Để tạo nhóm tệp FILESTREAM bằng SSMS, hãy mở nó và kết nối với công cụ cơ sở dữ liệu SQL Server 🡪 Nhấp chuột phải vào cơ sở dữ liệu EltechDB 🡪 Chọn Thuộc tính

Trong hộp thoại Thuộc tính cơ sở dữ liệu, bấm vào Nhóm tệp. Bấm vào Thêm nhóm tập tin. Thao tác này sẽ thêm một hàng trong chế độ xem lưới FILESTREAM. Chỉ định các tham số sau trong chế độ xem lưới

  1. Tên. Chỉ định tên của nhóm tệp
  2. tập tin FILESTREAM. Tổng số tệp FILESTREAM. Giá trị mặc định là không [0]
  3. Chỉ đọc. Nếu bạn muốn Filegroup mới thành read-only thì tick vào cột Read-Only
  4. Mặc định. Nếu bạn muốn đặt Nhóm tệp mới làm nhóm tệp FILESTREAM mặc định, hãy đánh dấu vào cột Mặc định

Chúng tôi đang tạo một nhóm tệp có tên là EmployeeDocument, vì vậy hộp thoại Thuộc tính cơ sở dữ liệu trông giống như sau

Bây giờ chúng ta phải chỉ định đường dẫn của bộ chứa FILESTREAM mà bạn muốn lưu trữ các tệp trong đó. Để làm điều đó, bấm vào Tệp trong Thuộc tính cơ sở dữ liệu. Trên màn hình tệp, định cấu hình các tùy chọn như sau

  1. Tên logic. Chỉ định tên của bộ chứa FILESTREAM. Trong bản trình diễn này, tên tệp là DF_EmployeeDocument
  2. Loại tệp. Chọn FILESTREAM Dữ liệu từ hộp thả xuống
  3. nhóm tập tin. Chọn nhóm tệp FILESTREAM. Trong bản demo này, tên Filegroup là EmployeeDocument
  4. Con đường. Chỉ định vị trí của thư mục mà chúng tôi đang lưu trữ các tệp. Trong bản demo này, vị trí của D. \EltechDB\EmployeeDocuments

Hộp thoại Thuộc tính cơ sở dữ liệu trông giống như sau

Nhấp vào OK để tạo bộ chứa FILESTREAM. Bây giờ, hãy để chúng tôi hiểu cách tạo bộ chứa FILESTREAM bằng T-SQL

Tạo một nhóm tệp FILESTREAM bằng truy vấn T-SQL

Chúng ta có thể sử dụng câu lệnh ALTER DATABASE ADD FILEGROUP. Chúng tôi đang thêm một nhóm tệp FILESTREAM trong cơ sở dữ liệu SQL; . Nó phải được chỉ định sau tên của Filegroup

Cú pháp để thêm một nhóm tệp FILESTREAM được hiển thị bên dưới

1

2

3

4

5

6

 

  SỬ DỤNG [chính]

  ĐI

  THAY ĐỔI CƠ SỞ DỮ LIỆU [DB_Name] ADD FILEGROUP [Filegroup_Name] CONTAINS FILESTREAM

  ĐI

 

Trong cú pháp,

  1. Db_name. Chỉ định tên cơ sở dữ liệu mà bạn muốn tạo nhóm tệp FILESTREAM
  2. Filegroup_name. Tên mong muốn được chỉ định của Filegroup

Chúng tôi đang thêm một nhóm tệp có tên là EmployeeDocument trong cơ sở dữ liệu EltechDB. Câu lệnh ADD FILGROUP như sau

1

2

3

4

5

6

 

  SỬ DỤNG [chính]

  ĐI

  THAY ĐỔI CƠ SỞ DỮ LIỆU [EltechDB] ADD FILEGROUP [EmployeeDoucment] CONTAINS FILESTREAM

  ĐI

 

Bây giờ, chúng ta phải chỉ định vị trí của bộ chứa luồng tệp. Chúng tôi đang sử dụng câu lệnh ALTER DATABASE ADD FILE TO FILEGROUP. Để thêm tệp, hãy chạy truy vấn T-SQL sau

1

2

3

4

5

6

 

  SỬ DỤNG [chính]

  ĐI

  THAY ĐỔI CƠ SỞ DỮ LIỆU [EltechDB] ADD FILE [ NAME = N' DF_Employeedocuments', FILENAME = N' D:\EltechDB\EmployeeDocuments\' ] ĐẾN FILEGROUP [EmployeeDoucment]

  ĐI

 

Bây giờ, hãy chạy truy vấn sau để xem chi tiết về nhóm tệp FILESTREAM

1

2

3

4

5

6

7

8

9

10

11

 

  SỬ DỤNG eltechdb

  đi

  CHỌN df. TÊN          AS [Logic

Chủ Đề