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
- Định cấu hình tính năng FILESTREAM trong SQL Server
- 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
- 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
- Bật FILESTREAM để truy cập Transact-SQL
- Bật FILESTREAM để truy cập tệp I/O
- 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
- 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
- Tên. Chỉ định tên của nhóm tệp
- tập tin FILESTREAM. Tổng số tệp FILESTREAM. Giá trị mặc định là không [0]
- Chỉ đọc. Nếu bạn muốn Filegroup mới thành read-only thì tick vào cột Read-Only
- 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
- 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
- Loại tệp. Chọn FILESTREAM Dữ liệu từ hộp thả xuống
- nhóm tập tin. Chọn nhóm tệp FILESTREAM. Trong bản demo này, tên Filegroup là EmployeeDocument
- 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,
- Db_name. Chỉ định tên cơ sở dữ liệu mà bạn muốn tạo nhóm tệp FILESTREAM
- 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