Cơ sở dữ liệu SQL Server chứa các tệp dữ liệu chính, tệp dữ liệu phụ (tùy chọn) và tệp nhật ký giao dịch.
Các tệp dữ liệu chính và phụ chứa các bảng, đối tượng cơ sở dữ liệu, lược đồ và dữ liệu.
Phần mở rộng tệp của tệp cơ sở dữ liệu chính là * .mdf và phần mở rộng tệp của tệp dữ liệu phụ là * .ndf .
Các tệp nhật ký giao dịch lưu trữ tất cả các thay đổi được thực hiện bởi các giao dịch (chèn, cập nhật và xóa). Nếu Máy chủ SQL khởi động lại đột ngột hoặc gặp sự cố, công cụ cơ sở dữ liệu sẽ chuyển giao dịch chưa hoàn thành trở lại trước điểm không thành công bằng cách sử dụng tệp Nhật ký giao dịch.
Phần mở rộng của tệp nhật ký giao dịch là * .ldf . Bạn có thể muốn tham khảo bài viết này để hiểu kiến trúc tệp nhật ký giao dịch.
Trong bài viết này, tôi sẽ giải thích cách chúng ta có thể quản lý các tệp cơ sở dữ liệu (tệp MDF) trong SQL Server 2019.
Bài viết sẽ đề cập đến những điểm sau:
- Xem chi tiết tệp cơ sở dữ liệu bằng DMV và SQL Server Management Studio.
- Đính kèm và tách các Tệp MDF của Cơ sở dữ liệu Người dùng.
- Đính kèm và tách Tệp MDF của cơ sở dữ liệu hệ thống.
Xem tệp cơ sở dữ liệu bằng chế độ xem quản lý động
Để xem chi tiết về các tệp mdf trong cơ sở dữ liệu, chúng tôi có thể sử dụng sys.database_files và sys.master_files . Truy vấn phải được viết như sau:
use master
go
select DB_NAME(database_id),
name as [logical Name],
physical_name as [File Location],
state_desc as [State of the file],
Size [Size of data File],
case when convert(varchar,max_size) =-1 then 'Unlimited' else convert(varchar,max_size) end as [Maximum Size]
from sys.master_files where type_desc='ROWS'
and database_id >5
Vì ví dụ đề cập đến chi tiết MDF cho tất cả cơ sở dữ liệu, chúng tôi cần một mã khác để xem các tệp cơ sở dữ liệu cụ thể. Với mục đích đó, chúng tôi sử dụng sys.database_files .
Tập lệnh sau sẽ truy xuất chi tiết của SSISDB cơ sở dữ liệu:
use SSISDB
Go
select
name as [logical Name],
physical_name as [File Location],
state_desc as [State of the file],
Size [Size of data File],
case when convert(varchar,max_size) =-1 then 'Unlimited' else convert(varchar,max_size) end as [Maximum Size]
from sys.database_files
Xem các tệp cơ sở dữ liệu bằng SQL Server Management Studio
Tùy chọn xem danh sách tệp MDF có sẵn trong SQL Server Management Studio (SSMS).
Trong SQL Server Management Studio, kết nối với phiên bản SQL Server. Sau đó, mở rộng Cơ sở dữ liệu -> Nhấp chuột phải vào bất kỳ cơ sở dữ liệu nào -> Nhấp vào Thuộc tính :
Trong Thuộc tính cơ sở dữ liệu cửa sổ, nhấp vào Tệp . Nó sẽ hiển thị danh sách cơ sở dữ liệu MDF và LDF tệp:
Tách và đính kèm các tệp MDF của Cơ sở dữ liệu người dùng
Có hai cách để tách và đính kèm tệp MDF của cơ sở dữ liệu Người dùng:
- Sử dụng SQL Server Management Studio.
- Sử dụng tập lệnh T-SQL.
Đính kèm và tách cơ sở dữ liệu bằng SSMS
Đính kèm cơ sở dữ liệu
Khởi chạy SSMS -> Kết nối với phiên bản SQL Server -> Nhấp chuột phải vào Cơ sở dữ liệu -> Nhấp vào Đính kèm .
Nó sẽ mở Đính kèm cơ sở dữ liệu cửa sổ. Nhấp vào Thêm trong cửa sổ đó:
Trong Định vị tệp cơ sở dữ liệu mới cửa sổ, duyệt qua hệ thống tệp để tìm MDF tập tin. Nhấp đúp vào nó.
Tệp dữ liệu được liên kết và tệp nhật ký được điền trong tệp được liên kết chế độ xem lưới trong Đính kèm cơ sở dữ liệu cửa sổ. Nhấp vào OK để đính kèm cơ sở dữ liệu.
Sau khi cơ sở dữ liệu được đính kèm, bạn có thể thấy nó trong SQL Server Management Studio:
Tách cơ sở dữ liệu
Khởi chạy studio quản lý SQL Server và kết nối với phiên bản SQL Server . Mở rộng danh sách Cơ sở dữ liệu.
Nhấp chuột phải vào cơ sở dữ liệu cần thiết -> Nhiệm vụ -> Nhấp vào Tách ra .
Nếu bạn muốn ngắt kết nối mạnh mẽ tất cả người dùng và quy trình được kết nối với cơ sở dữ liệu, bạn thực hiện việc đó trong Tách cơ sở dữ liệu cửa sổ.
Đánh dấu chọn mục Kết nối thả trong tùy chọn Cơ sở dữ liệu để tách ra và nhấp vào OK .
Đính kèm và tách cơ sở dữ liệu bằng T-SQL
Chúng tôi có thể sử dụng TẠO CƠ SỞ DỮ LIỆU VỚI ATTACH truy vấn với cú pháp sau:
USE [master]
GO
CREATE DATABASE [DatabaseName] ON
( FILENAME = 'Path of Primary Database file (MDF)' ),
( FILENAME = N'Path of Secondary Database file (NDF)' ),
...
...
( FILENAME = N'Path of Transactional Log file (LDF)' )
FOR ATTACH
GO
Để đính kèm cơ sở dữ liệu, hãy chạy truy vấn T-SQL sau:
USE [master]
GO
CREATE DATABASE [WideWorldImporters] ON
( FILENAME = N'C:\MSSQL\SQLData\WideWorldImporters.mdf' ),
( FILENAME = N'C:\MSSQL\SQLLog\WideWorldImporters.ldf' ),
( FILENAME = N'C:\MSSQL\SQLData\WideWorldImporters_UserData.ndf' )
FOR ATTACH
GO
Ngoài ra, chúng tôi có thể chạy sp_detach_db thủ tục được lưu trữ để tách cơ sở dữ liệu.
Nếu bạn muốn ngắt kết nối người dùng một cách cưỡng bức, bạn có thể sử dụng ALTER DATABASE SET SINGLE_USER lệnh trong tập lệnh sau:
Use [master]
GO
ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
EXEC sp_detach_db [WideWorldImporters]
GO
Quản lý tệp MDF trong cơ sở dữ liệu hệ thống
Giả sử chúng ta muốn di chuyển các tệp MDF của cơ sở dữ liệu hệ thống (chính, mô hình, msdb và Tempdb) sang một vị trí khác. Hãy kiểm tra quy trình.
Di chuyển Cơ sở dữ liệu Chính
Để di chuyển trang cái cơ sở dữ liệu, mở trình quản lý cấu hình SQL Server -> Nhấp vào Dịch vụ SQL Server -> Nhấp chuột phải vào dịch vụ SQL Server của phiên bản SQL Server mong muốn ( MSSQLSERVER ) -> Nhấp vào Thuộc tính :
Để thay đổi master.mdf vị trí tệp, nhấp vào đường dẫn tệp dữ liệu của tệp chính.
master.mdf theo sau giá trị đường dẫn là -d và mastlog.ldf giá trị đường dẫn được theo sau bởi -l
Thay thế các giá trị này bằng các giá trị sau:
Tệp Dữ liệu:-dD:\ MS_SQL \ Data \ master.mdf
Tệp nhật ký:-lD:\ MS_SQL \ Log \ mastlog.ldf
Sau khi các giá trị được thay đổi, hãy nhấp vào Cập nhật như hình minh họa bên dưới:
Nhấp vào OK để lưu các giá trị.
Sau đó, dừng các dịch vụ SQL Server và sao chép các tệp cơ sở dữ liệu sang một vị trí mới. Sau khi hoàn thành, hãy khởi động lại Dịch vụ SQL.
Chạy truy vấn dưới đây để xác minh vị trí tệp.
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='master'
Di chuyển Cơ sở dữ liệu Mô hình
Để di chuyển cơ sở dữ liệu Model sang ổ đĩa khác, trước tiên chúng ta phải chạy lệnh ALTER DATABASE MODIFY FILE. Nó phục vụ để thay đổi vị trí trong danh mục hệ thống SQL Server.
Chạy lệnh dưới đây:
ALTER DATABASE model
MODIFY FILE (NAME = modeldev, FILENAME = 'D:\MS_SQL\Data\model.mdf');
GO
ALTER DATABASE model
MODIFY FILE (NAME = modellog, FILENAME = 'D:\MS_SQL\Log\modellog.ldf');
GO
Sau đó, dừng các dịch vụ SQL Server bằng cách thực hiện lệnh dưới đây trong PowerShell:
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER
Sao chép model.mdf và modellog.ldf đến một vị trí mới và bắt đầu các dịch vụ.
Chạy truy vấn dưới đây để xác minh vị trí tệp:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='model'
Di chuyển Cơ sở dữ liệu MSDB
Để di chuyển MSDB cơ sở dữ liệu sang ổ đĩa khác, trước tiên hãy chạy lệnh ALTER DATABASE MODIFY FILE để thay đổi vị trí trong danh mục hệ thống SQL Server:
ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBData, FILENAME = 'D:\MS_SQL\Data\MSDBData.mdf');
GO
ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBLog, FILENAME = 'D:\MS_SQL\Log\MSDBLog.ldf');
GO
Dừng các dịch vụ SQL Server bằng cách thực thi lệnh sau trong PowerShell:
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER
Sao chép MSDBData.mdf và MSDBLog.ldf đến vị trí mới và bắt đầu dịch vụ.
Chạy truy vấn dưới đây để xác minh vị trí tệp:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='msdb'
Di chuyển Cơ sở dữ liệu TempDB
Để di chuyển TempDB cơ sở dữ liệu sang ổ đĩa khác, trước tiên hãy chạy lệnh ALTER DATABASE MODIFY FILE để thay đổi vị trí tệp trong danh mục hệ thống SQL Server:
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\MS_SQL\Data\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp2, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_2.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp3, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_3.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp4, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_4.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp5, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_5.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp6, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_6.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp7, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_7.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp8, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_8.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'D:\MS_SQL\Log\templog.ldf');
GO
Khởi động lại các dịch vụ SQL Server bằng cách thực thi lệnh sau trong PowerShell:
/*Restart SQL Services*/
PS C:\> Restart-Service MSSQLSERVER -Force
Chạy truy vấn dưới đây để xác minh vị trí tệp:
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='tempdb'
Bạn cũng có thể sử dụng công cụ Nhật ký giao dịch từ công ty Devart - công cụ này cũng bao gồm tùy chọn xem dữ liệu tệp MDF và LDF.
Tóm tắt
Bài viết này giải thích các tệp cơ sở dữ liệu của cơ sở dữ liệu SQL Server và các cách xem vị trí tệp MDF. Nó cũng mô tả các quá trình gắn và tách cơ sở dữ liệu và minh họa quá trình từng bước của quá trình di chuyển các tệp dữ liệu của cơ sở dữ liệu hệ thống.