SQL server
- Sao chép liên kết
- Chia sẻ với Facebook
- Chia sẻ với X
- Chia sẻ với Pinterest
- Chia sẻ với Linkedin
- Gửi bài qua Email
gửi email cho tác giả
Hiểu rồi 👍. Bạn muốn không để SQL Server tạo database ở G:\SQL_server\...
nữa mà thay bằng đường dẫn trên D:\SQL_server.
Có 2 cách xử lý:
1. Khi tạo database → chỉ định lại đường dẫn mới
Ví dụ bạn muốn database da_test
nằm ở D:\SQL_server
:
CREATE DATABASE da_test
ON PRIMARY (
NAME = da_test_data,
FILENAME = 'D:\SQL_server\da_test.mdf'
)
LOG ON (
NAME = da_test_log,
FILENAME = 'D:\SQL_server\da_test.ldf'
);
2. Đổi đường dẫn mặc định của SQL Server sang D:\SQL_server
Nếu bạn muốn từ giờ về sau khi tạo database mới (mà không chỉ định đường dẫn) thì file .mdf
và .ldf
sẽ tự lưu ở D:\SQL_server
, làm như sau:
-
Vào SQL Server Management Studio (SSMS)
-
Chuột phải vào tên server → chọn Properties.
-
Vào mục Database Settings.
-
Trong phần Database default locations, sửa lại:
-
Data:
D:\SQL_server
-
Log:
D:\SQL_server
-
-
-
Nhấn OK rồi khởi động lại dịch vụ SQL Server.
(Hoặc dùng T-SQL để sửa trực tiếp:)
EXEC xp_instance_regwrite
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'DefaultData',
REG_SZ,
N'D:\SQL_server';
EXEC xp_instance_regwrite
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'DefaultLog',
REG_SZ,
N'D:\SQL_server';
👉 Nếu bạn muốn thay đổi vĩnh viễn cho tất cả database mới thì làm cách 2.
👉 Nếu chỉ cần đổi cho database đang tạo thì dùng cách 1.
Bạn muốn mình viết sẵn đoạn T-SQL đổi default path (cách 2) để copy chạy luôn không?
Bạn đã nói:
1 wrapCloseInAction)
at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)
at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
at Microsoft.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at Microsoft.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException)
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType, Boolean retry)
ChatGPT đã nói:
Cảm ơn bạn đã copy log chi tiết 👍.
Lỗi cốt lõi vẫn là:
Directory lookup for the file "G:\SQL_server\da_test.mdf" failed with the operating system error 3 (The system cannot find the path specified.).
CREATE DATABASE failed. Some file names listed could not be created. (Error 5133)
👉 Nghĩa là SQL Server vẫn đang trỏ mặc định về ổ G:\SQL_server, trong khi thư mục này không tồn tại trên máy bạn.
Cách xử lý triệt để
✅ Bước 1: Tạo thư mục mới trên D:
Trước tiên, tạo thư mục:
D:\SQL_server
✅ Bước 2: Đổi đường dẫn mặc định (DefaultData, DefaultLog)
Chạy các lệnh T-SQL sau trong SSMS (chọn master
database):
EXEC xp_instance_regwrite
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'DefaultData',
REG_SZ,
N'D:\SQL_server';
EXEC xp_instance_regwrite
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'DefaultLog',
REG_SZ,
N'D:\SQL_server';
✅ Bước 3: Khởi động lại SQL Server
Mở SQL Server Configuration Manager → restart dịch vụ SQL Server (MSSQLSERVER)
hoặc instance bạn đang dùng (SERVER\TCSB
).
✅ Bước 4: Tạo lại database
Giờ bạn chỉ cần:
CREATE DATABASE da_test;
SQL Server sẽ tự động tạo file .mdf
và .ldf
trong D:\SQL_server
.
📌 Nếu bạn muốn chắc chắn thì có thể chỉ định rõ đường dẫn khi tạo:
CREATE DATABASE da_test
ON PRIMARY (
NAME = da_test_data,
FILENAME = 'D:\SQL_server\da_test.mdf'
)
LOG ON (
NAME = da_test_log,
FILENAME = 'D:\SQL_server\da_test.ldf'
);
Bạn muốn mình viết luôn hướng dẫn cấp quyền NT SERVICE\MSSQLSERVER cho thư mục D:\SQL_server
không? Vì nếu SQL Server không có quyền ghi vào thư mục này thì vẫn sẽ lỗi.