سطح: متوسط | مناسب برای: مدیران دیتابیس، مدیران ویندوز سرور، توسعهدهندگان .NET، مدیران هاستینگ، کاربران SQL Server Management Studio و افرادی که بعد از تغییر نام دیتابیس میخواهند نام فایلهای فیزیکی MDF و LDF را هم مرتب و هماهنگ کنند
در SQL Server ممکن است نام دیتابیس را تغییر دهید، اما بعد از بررسی مسیر فایلها متوجه شوید که نام فایلهای فیزیکی دیتابیس هنوز همان نام قبلی است. برای مثال دیتابیسی با نام قدیمی OldCRM را به NewCRM تغییر دادهاید، اما فایلهای فیزیکی هنوز با نامهایی مثل OldCRM.mdf و OldCRM_log.ldf در مسیر Data قرار دارند. این موضوع معمولاً باعث اختلال فوری در اجرای دیتابیس نمیشود، اما در مدیریت، بکاپگیری، انتقال، مستندسازی و عیبیابی میتواند گیجکننده باشد.
برای حل این مشکل، باید تفاوت بین نام دیتابیس، نام منطقی فایلها یا Logical Name، و نام فیزیکی فایلها یا Physical File Name را بشناسید. تغییر نام دیتابیس الزاماً نام فایلهای MDF و LDF را تغییر نمیدهد. اگر بخواهید فایلهای فیزیکی را هم هماهنگ کنید، باید هم مسیر ثبتشده در SQL Server را با دستور ALTER DATABASE ... MODIFY FILE تغییر دهید و هم فایلها را در سطح سیستمعامل rename کنید.
در این آموزش، مرحلهبهمرحله توضیح میدهیم چطور نام فعلی فایلهای دیتابیس را پیدا کنید، از دیتابیس بکاپ بگیرید، دیتابیس را به حالت SINGLE_USER ببرید، مسیر جدید فایلها را در SQL Server ثبت کنید، دیتابیس را آفلاین کنید، فایلهای .mdf و .ldf را در ویندوز تغییر نام دهید، دیتابیس را آنلاین کنید و در پایان نتیجه را با sys.master_files بررسی کنید.
اگر با SQL Server روی ویندوز سرور کار میکنید، مقاله آموزش نصب MSSQL Express در ویندوز سرور و دسته دیتابیس و ذخیرهسازی میتوانند برای ادامه مطالعه مفید باشند. اگر SQL Server را روی سرور مجازی یا اختصاصی اجرا میکنید، صفحه سرور مجازی و اختصاصی پویاسازان و سرور مجازی آلمان را هم ببینید.
فهرست مطالب
- چرا باید نام فایلهای فیزیکی دیتابیس را تغییر دهیم؟
- تفاوت نام دیتابیس، Logical Name و Physical Name
- فایلهای MDF و LDF در SQL Server چه هستند؟
- هشدار مهم قبل از تغییر نام فایلهای دیتابیس
- مرحله ۱: مشاهده نام و مسیر فایلهای دیتابیس
- مرحله ۲: گرفتن بکاپ کامل از دیتابیس
- مرحله ۳: قرار دادن دیتابیس در حالت SINGLE_USER
- مرحله ۴: ثبت نام یا مسیر جدید فایلها با ALTER DATABASE
- مرحله ۵: آفلاین کردن دیتابیس
- مرحله ۶: تغییر نام فایلهای MDF و LDF در ویندوز
- مرحله ۷: آنلاین کردن دیتابیس
- مرحله ۸: بازگرداندن دیتابیس به حالت MULTI_USER
- مرحله ۹: بررسی نهایی مسیر فایلها
- روش انجام کار با SQL Server Management Studio
- خطاهای رایج هنگام تغییر نام فایلهای SQL Server
- نکات مهم و بهترین روشها
- سوالات متداول
چرا باید نام فایلهای فیزیکی دیتابیس را تغییر دهیم؟
تغییر نام فایلهای فیزیکی دیتابیس همیشه الزامی نیست. SQL Server میتواند دیتابیسی با نام جدید را همچنان از روی فایلهایی با نام قدیمی اجرا کند. اما در محیطهای حرفهای، هماهنگ بودن نام دیتابیس با نام فایلهای فیزیکی مزیتهای مهمی دارد.
دلایل رایج برای تغییر نام فایلهای فیزیکی:
- جلوگیری از سردرگمی مدیران دیتابیس و سرور
- هماهنگ شدن نام دیتابیس با فایلهای MDF و LDF
- مرتب شدن مسیرهای Data و Log در SQL Server
- آمادهسازی دیتابیس برای انتقال به سرور دیگر
- مستندسازی بهتر در محیطهای production
- کاهش اشتباه هنگام بکاپ، restore یا جابهجایی فایلها
- مرتبسازی دیتابیسهایی که قبلاً rename شدهاند
برای مثال اگر چند دیتابیس روی یک سرور دارید و نام فایلها با نام واقعی دیتابیسها هماهنگ نباشد، هنگام بررسی فضای دیسک، انتقال فایلها یا عیبیابی مشکل performance ممکن است اشتباه کنید.
تفاوت نام دیتابیس، Logical Name و Physical Name
در SQL Server باید سه مفهوم را جدا از هم بدانید:
| مفهوم | توضیح | مثال |
|---|---|---|
| Database Name | نام دیتابیس در SQL Server | NewCRM |
| Logical Name | نام منطقی فایل در داخل SQL Server | OldCRM یا OldCRM_log |
| Physical Name | مسیر و نام واقعی فایل روی دیسک | D:\SQLData\OldCRM.mdf |
گاهی نام دیتابیس تغییر میکند اما Logical Name و Physical Name همچنان قدیمی باقی میمانند. همین موضوع باعث میشود هنگام مشاهده فایلها در مسیر SQL Server، نام قدیمی را ببینید و تصور کنید دیتابیس اشتباه است.
برای تغییر نام فایل فیزیکی، باید Physical Name را در SQL Server اصلاح کنید و سپس فایل واقعی را در ویندوز rename کنید. برای تغییر Logical Name هم میتوانید از ALTER DATABASE ... MODIFY FILE با گزینه NEWNAME استفاده کنید.
فایلهای MDF و LDF در SQL Server چه هستند؟
در SQL Server هر دیتابیس حداقل دو نوع فایل اصلی دارد:
- MDF: فایل داده اصلی دیتابیس یا Primary Data File
- LDF: فایل لاگ تراکنشها یا Transaction Log File
طبق مستندات Microsoft، هر دیتابیس SQL Server حداقل دو فایل سیستمعاملی دارد: فایل داده که شامل دادهها و objectهایی مثل جدولها، indexها و stored procedureهاست، و فایل log که اطلاعات لازم برای بازیابی تراکنشها را نگه میدارد. منبع: Microsoft درباره Database Files and Filegroups
اگر دیتابیس بزرگتر یا پیچیدهتر باشد، ممکن است چند فایل داده ثانویه با پسوند .ndf هم داشته باشد. در چنین شرایطی، هنگام تغییر نام یا انتقال فایلها باید همه فایلهای مرتبط را بررسی کنید، نه فقط MDF و LDF اصلی را.
هشدار مهم قبل از تغییر نام فایلهای دیتابیس
تغییر نام فایلهای فیزیکی SQL Server کاری حساس است. اگر مسیر را اشتباه ثبت کنید، فایل را اشتباه rename کنید، دسترسی سرویس SQL Server به فایلها مناسب نباشد یا دیتابیس را بدون بکاپ تغییر دهید، ممکن است دیتابیس آنلاین نشود.
قبل از شروع این موارد را رعایت کنید:
- از دیتابیس بکاپ کامل و تستشده بگیرید.
- این کار را در زمان کمترافیک انجام دهید.
- مطمئن شوید هیچ connection فعالی به دیتابیس وجود ندارد.
- مسیر فعلی و مسیر جدید فایلها را دقیق یادداشت کنید.
- دسترسی اکانت سرویس SQL Server به مسیر فایلها را بررسی کنید.
- اگر دیتابیس production است، ابتدا روش را روی محیط تست تمرین کنید.
- برای دیتابیسهای سیستمی مثل master، model، msdb و tempdb مراحل متفاوت و حساستر است.
این آموزش برای دیتابیسهای کاربری یا User Databases نوشته شده است. برای دیتابیسهای سیستمی، مستندات Microsoft را جداگانه بررسی کنید.
مرحله ۱: مشاهده نام و مسیر فایلهای دیتابیس
ابتدا باید نام منطقی و مسیر فیزیکی فایلهای دیتابیس را ببینید. در SQL Server Management Studio یک New Query باز کنید و دستور زیر را اجرا کنید:
USE master;
GO
SELECT
name AS LogicalName,
physical_name AS PhysicalFileName,
type_desc AS FileType,
state_desc AS State
FROM sys.master_files
WHERE database_id = DB_ID(N'OldDatabaseName');
GOبهجای OldDatabaseName نام دیتابیس فعلی را قرار دهید.
خروجی معمولاً چیزی شبیه این است:
LogicalName PhysicalFileName FileType
OldCRM D:\SQLData\OldCRM.mdf ROWS
OldCRM_log D:\SQLLogs\OldCRM_log.ldf LOGنمای سیستمی sys.master_files در SQL Server برای هر فایل دیتابیس یک ردیف در master database نگه میدارد و برای بررسی نام منطقی، مسیر فیزیکی و وضعیت فایلها کاربرد دارد. منبع: Microsoft درباره sys.master_files
مرحله ۲: گرفتن بکاپ کامل از دیتابیس
قبل از هر تغییری، بکاپ کامل بگیرید. نمونه دستور:
BACKUP DATABASE [OldDatabaseName]
TO DISK = N'D:\SQLBackups\OldDatabaseName_before_rename.bak'
WITH INIT, COMPRESSION, STATS = 10;
GOاگر نسخه SQL Server شما از COMPRESSION پشتیبانی نمیکند، آن بخش را حذف کنید:
BACKUP DATABASE [OldDatabaseName]
TO DISK = N'D:\SQLBackups\OldDatabaseName_before_rename.bak'
WITH INIT, STATS = 10;
GOبعد از بکاپ، بهتر است فایل بکاپ را در مسیر امن نگهداری کنید و اگر دیتابیس مهم است، بازیابی آن را روی محیط تست بررسی کنید. برای موضوعات مرتبط با بکاپ، دسته بکاپ و بازیابی اطلاعات را ببینید.
مرحله ۳: قرار دادن دیتابیس در حالت SINGLE_USER
برای جلوگیری از اتصال کاربران و برنامهها هنگام تغییر فایلها، دیتابیس را موقتاً در حالت SINGLE_USER قرار دهید:
ALTER DATABASE [OldDatabaseName]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GOگزینه WITH ROLLBACK IMMEDIATE اتصالهای فعال را قطع میکند و تراکنشهای در حال اجرا را rollback میکند. بنابراین این دستور را با احتیاط و در زمان مناسب اجرا کنید.
مرحله ۴: ثبت نام یا مسیر جدید فایلها با ALTER DATABASE
حالا باید به SQL Server بگویید مسیر یا نام فیزیکی جدید فایلها چیست. فرض کنیم دیتابیس از OldCRM به NewCRM تغییر نام داده شده و میخواهید فایلها هم به نام جدید باشند.
نمونه دستور برای فایل MDF:
ALTER DATABASE [NewCRM]
MODIFY FILE
(
NAME = N'OldCRM',
FILENAME = N'D:\SQLData\NewCRM.mdf'
);
GOنمونه دستور برای فایل LDF:
ALTER DATABASE [NewCRM]
MODIFY FILE
(
NAME = N'OldCRM_log',
FILENAME = N'D:\SQLLogs\NewCRM_log.ldf'
);
GOدر این دستور، مقدار NAME همان Logical Name فعلی فایل است؛ نه الزاماً نام دیتابیس و نه نام فایل جدید. مقدار FILENAME مسیر و نام جدید فایل در سطح سیستمعامل است.
Microsoft برای move کردن فایلهای دیتابیس نیز همین الگو را پیشنهاد میکند: اجرای ALTER DATABASE database_name MODIFY FILE با مقدار جدید FILENAME و سپس انجام جابهجایی یا تغییر فایل در سطح سیستمعامل. منبع: Microsoft درباره Move User Databases
تغییر Logical Name اختیاری است
اگر میخواهید Logical Nameها هم از نام قدیمی به نام جدید تغییر کنند، میتوانید از NEWNAME استفاده کنید:
ALTER DATABASE [NewCRM]
MODIFY FILE
(
NAME = N'OldCRM',
NEWNAME = N'NewCRM'
);
GO
ALTER DATABASE [NewCRM]
MODIFY FILE
(
NAME = N'OldCRM_log',
NEWNAME = N'NewCRM_log'
);
GOاین مرحله برای مرتبسازی داخلی SQL Server مفید است، اما تغییر نام فیزیکی فایلها را بهتنهایی انجام نمیدهد. برای فایل فیزیکی همچنان باید FILENAME و rename در ویندوز را انجام دهید.
مرحله ۵: آفلاین کردن دیتابیس
بعد از ثبت مسیر جدید، دیتابیس را آفلاین کنید تا بتوانید فایلهای فیزیکی را در ویندوز تغییر نام دهید:
ALTER DATABASE [NewCRM]
SET OFFLINE
WITH ROLLBACK IMMEDIATE;
GOتا وقتی دیتابیس آنلاین است، SQL Server فایلهای MDF و LDF را در اختیار دارد و ویندوز معمولاً اجازه تغییر نام یا جابهجایی آنها را نمیدهد.
مرحله ۶: تغییر نام فایلهای MDF و LDF در ویندوز
حالا به مسیر فایلهای دیتابیس در ویندوز بروید و فایلها را rename کنید.
مثلاً:
D:\SQLData\OldCRM.mdf
D:\SQLLogs\OldCRM_log.ldfبه:
D:\SQLData\NewCRM.mdf
D:\SQLLogs\NewCRM_log.ldfاگر ترجیح میدهید با PowerShell انجام دهید:
Rename-Item "D:\SQLData\OldCRM.mdf" "NewCRM.mdf"
Rename-Item "D:\SQLLogs\OldCRM_log.ldf" "NewCRM_log.ldf"اگر فایلها را به مسیر دیگری منتقل میکنید، مطمئن شوید اکانت سرویس SQL Server به مسیر جدید دسترسی لازم دارد. اگر سرویس SQL Server نتواند فایلها را بخواند، دیتابیس آنلاین نمیشود.
مرحله ۷: آنلاین کردن دیتابیس
بعد از تغییر نام فایلها، دیتابیس را آنلاین کنید:
ALTER DATABASE [NewCRM]
SET ONLINE;
GOاگر مسیر و دسترسیها درست باشند، دیتابیس بدون خطا آنلاین میشود. اگر خطا دریافت کردید، معمولاً یکی از موارد زیر علت است:
- نام فایل در
FILENAMEبا نام واقعی فایل یکی نیست. - فایل را در مسیر اشتباه rename کردهاید.
- اکانت سرویس SQL Server به فایل یا پوشه دسترسی ندارد.
- فایل LDF یا MDF اشتباه است.
- دیتابیس قبلاً درست آفلاین نشده یا فایلها lock شدهاند.
مرحله ۸: بازگرداندن دیتابیس به حالت MULTI_USER
اگر در مرحله قبل دیتابیس را به SINGLE_USER بردهاید، بعد از موفقیت کار، آن را به حالت عادی برگردانید:
ALTER DATABASE [NewCRM]
SET MULTI_USER;
GOحالا برنامهها و کاربران میتوانند دوباره به دیتابیس وصل شوند.
مرحله ۹: بررسی نهایی مسیر فایلها
در پایان، مسیر فایلها را دوباره بررسی کنید:
SELECT
DB_NAME(database_id) AS DatabaseName,
name AS LogicalName,
physical_name AS PhysicalFileName,
type_desc AS FileType,
state_desc AS State
FROM sys.master_files
WHERE database_id = DB_ID(N'NewCRM');
GOخروجی باید نام و مسیر جدید فایلهای MDF و LDF را نشان دهد:
NewCRM NewCRM D:\SQLData\NewCRM.mdf ROWS
NewCRM NewCRM_log D:\SQLLogs\NewCRM_log.ldf LOGبعد از آن، برنامهای که از دیتابیس استفاده میکند را تست کنید. اگر دیتابیس برای سایت یا اپلیکیشن .NET استفاده میشود، connection string و سرویسهای وابسته را هم بررسی کنید.
روش انجام کار با SQL Server Management Studio
بخشی از کار را میتوانید با SSMS انجام دهید، اما برای تغییر نام فایل فیزیکی همچنان باید با دقت از Query و سیستمعامل استفاده کنید.
در SSMS میتوانید مسیر فایلها را ببینید:
- روی دیتابیس راستکلیک کنید.
- Properties را انتخاب کنید.
- به بخش Files بروید.
- Logical Name و Path فایلها را بررسی کنید.
اما برای تغییر امن و قابل کنترل، استفاده از T-SQL معمولاً شفافتر است؛ چون دقیقاً مشخص میکنید کدام Logical Name به کدام Physical File Name تغییر کند.
خطاهای رایج هنگام تغییر نام فایلهای SQL Server
خطای The file cannot be accessed
معمولاً مسیر فایل اشتباه است یا اکانت سرویس SQL Server به فایل یا پوشه دسترسی ندارد. Permission مسیر Data و Log را بررسی کنید.
خطای Access is denied
اکانت سرویس SQL Server اجازه خواندن یا نوشتن در مسیر جدید را ندارد. باید به اکانت سرویس SQL Server روی پوشه مقصد دسترسی مناسب بدهید.
دیتابیس آنلاین نمیشود
ممکن است نام فیزیکی ثبتشده در SQL Server با نام واقعی فایل متفاوت باشد. خروجی sys.master_files و نام فایلهای ویندوز را با هم مقایسه کنید.
فایلها در ویندوز rename نمیشوند
احتمالاً دیتابیس هنوز آنلاین است یا SQL Server فایلها را lock کرده است. دیتابیس را Offline کنید یا در سناریوهای خاص سرویس SQL Server را متوقف کنید.
Logical Name هنوز قدیمی است
تغییر Physical Name و تغییر Logical Name دو چیز جدا هستند. اگر میخواهید Logical Name را هم تغییر دهید، باید از MODIFY FILE ... NEWNAME استفاده کنید.
برنامه بعد از تغییرات وصل نمیشود
اگر فقط نام فایلها را تغییر دادهاید، connection string معمولاً نباید تغییر کند. اما اگر همزمان نام دیتابیس را تغییر دادهاید، connection string برنامه را هم بررسی کنید.
نکات مهم و بهترین روشها
- قبل از تغییر نام فایلها همیشه بکاپ کامل بگیرید.
- نام دیتابیس، Logical Name و Physical Name را قبل و بعد از تغییر مستند کنید.
- در محیط production، این کار را در بازه maintenance انجام دهید.
- برای هر فایل، مسیر دقیق جدید را با
ALTER DATABASE MODIFY FILEثبت کنید. - دیتابیس را قبل از rename کردن فایلها Offline کنید.
- بعد از Online کردن، مسیر فایلها را با
sys.master_filesبررسی کنید. - اگر مسیر فایلها تغییر کرده، دسترسی اکانت سرویس SQL Server را بررسی کنید.
- برای دیتابیسهای سیستمی از راهنمای مخصوص Microsoft استفاده کنید.
- بعد از اتمام کار، بکاپ جدید از وضعیت سالم دیتابیس تهیه کنید.
اگر دیتابیس شما روی یک سرور ویندوزی میزبانی میشود، مطالب دسته ویندوز و مدیریت سرور ویندوز و صفحه هاست ویندوز پویاسازان هم میتوانند برای مدیریت بهتر زیرساخت مفید باشند.
جمعبندی
تغییر نام دیتابیس در SQL Server بهتنهایی نام فایلهای فیزیکی MDF و LDF را تغییر نمیدهد. به همین دلیل ممکن است دیتابیس جدیدی داشته باشید که فایلهای آن هنوز با نام قدیمی در مسیر Data و Log ذخیره شدهاند. این وضعیت از نظر فنی الزاماً مشکل فوری ایجاد نمیکند، اما در مدیریت حرفهای دیتابیس میتواند باعث سردرگمی و خطا شود.
برای تغییر نام فایلهای فیزیکی دیتابیس SQL Server باید ابتدا نام منطقی و مسیر فعلی فایلها را با sys.master_files بررسی کنید، سپس با ALTER DATABASE ... MODIFY FILE مسیر جدید را در SQL Server ثبت کنید، دیتابیس را Offline کنید، فایلهای MDF و LDF را در سیستمعامل rename کنید و بعد دیتابیس را دوباره Online کنید.
این کار را بدون بکاپ انجام ندهید. اگر دیتابیس production است، حتماً در زمان maintenance و ترجیحاً بعد از تست روی محیط غیرعملیاتی انجام شود. بعد از پایان کار هم مسیر فایلها، وضعیت دیتابیس، لاگها و اتصال برنامهها را بررسی کنید.
سوالات متداول
آیا تغییر نام دیتابیس باعث تغییر نام فایلهای MDF و LDF میشود؟
خیر. در SQL Server تغییر نام دیتابیس الزاماً نام فایلهای فیزیکی یا Logical Name فایلها را تغییر نمیدهد.
برای دیدن مسیر فایلهای دیتابیس از چه کوئری استفاده کنم؟
میتوانید از نمای سیستمی sys.master_files استفاده کنید و با DB_ID دیتابیس موردنظر را فیلتر کنید.
تفاوت Logical Name و Physical Name چیست؟
Logical Name نام داخلی فایل در SQL Server است، اما Physical Name مسیر و نام واقعی فایل روی دیسک ویندوز یا لینوکس است.
آیا باید دیتابیس را Offline کنم؟
برای تغییر نام فایل فیزیکی در سطح سیستمعامل، معمولاً بله. تا وقتی دیتابیس آنلاین است، SQL Server فایلها را lock نگه میدارد.
دستور اصلی برای تغییر مسیر فایل در SQL Server چیست؟
دستور اصلی ALTER DATABASE database_name MODIFY FILE است که با آن میتوانید مقدار جدید FILENAME را برای فایل دیتابیس ثبت کنید.
آیا میتوانم فقط فایل MDF را rename کنم و LDF را دست نزنم؟
از نظر فنی ممکن است، اما برای نظم و مدیریت بهتر معمولاً بهتر است نام فایل داده و فایل لاگ هر دو با نام دیتابیس هماهنگ باشند.
اگر بعد از rename دیتابیس آنلاین نشد چه کار کنم؟
مسیر ثبتشده در SQL Server، نام واقعی فایلها، دسترسی اکانت سرویس SQL Server و وجود فایلهای MDF و LDF را بررسی کنید. در صورت نیاز از بکاپ بازیابی کنید.
آیا این روش برای دیتابیسهای سیستمی هم مناسب است؟
برای دیتابیسهای سیستمی مثل master، model، msdb و tempdb باید از راهنمای مخصوص Microsoft استفاده کنید؛ مراحل آنها حساستر است.
آیا تغییر نام فایلها روی connection string اثر دارد؟
اگر فقط نام فایلهای فیزیکی را تغییر دهید و نام دیتابیس ثابت بماند، معمولاً connection string تغییر نمیکند. اما اگر نام دیتابیس هم تغییر کرده باشد، connection string باید بررسی شود.
بعد از تغییر نام فایلها چه تستی انجام دهم؟
مسیر فایلها را با sys.master_files بررسی کنید، دیتابیس را آنلاین ببینید، برنامه متصل به دیتابیس را تست کنید و لاگهای SQL Server را بررسی کنید.
