برای مشاهده یافته ها از کلید Enter و برای خروج از کلید Esc استفاده کنید.

انتقال فایل های دیتابیس ( MDf , LDF ) به مسیری دیگر

خیلی مواقع به دلیل کمبود فضا در درایو مربوط به فایل های یک دیتابیس، توزیع فایل های یک دیتابیس بین چندین دیسک و … نیاز است که فایل های MDF یا LDF یک دیتابیس را به مسیری دیگر انتقال دهیم در این مقاله نحوه انجام این کار را برای دیتابیس های کاربر و دیتابیس های سیستمی بررسی می کنیم:

  • انتقال فایل های دیتابیس کاربر
  • انتقال فایل های دیتابیس سیستمی

انتقال فایل های دیتابیس کاربر

فرض کنید می خواهیم فایل mdf و ldf دیتابیس AdventureWorks2017 را به ترتیب به مسیر های E:\SqlData و F:\SqlLog انتقال دهیم. با کوئری زیر می توان مسیر فعلی فایل ها را مشاهده کرد:

USE AdventureWorks2017
GO

sp_helpfile

مشاهده اطلاعات فایل های دیتابیس

برای انتقال فایل ها باید مراحل زیر را انجام دهیم:
۱- اکانت اجرا کننده سرویس SQL Server را به فولدرهایی که می خواهیم فایل ها را به آنجا انتقال دهیم دسترسی تمام (Full Access) می دهیم. برای این کار ابتدا با کوئری زیر اکانت اجرا کننده سرویس SQL Server را مشخص می کنیم:

SELECT servicename , service_account 
FROM sys.dm_server_services

مشاهده اکانت اجرا کننده سرویس SQL Server

سپس با راست کلیک بر روی فولدر مقصد و انتخاب گزینه Properties به تب Security می رویم و اکانت اجرا کننده سرویس SQL server را اضافه می کنیم

برقراری دسترسی به فولدر دیتابیس

در مثال ما می بایست این دسترسی برای فولدرهای F:\SqlLog و E:\SqlData برقرار شود
۲- در مرحله بعد با کوئری زیر مسیر فایل های دیتابیس را به مسیر جدید تغییر می دهیم:

ALTER DATABASE AdventureWorks2017 
MODIFY FILE ( NAME = 'AdventureWorks2017' , FILENAME = 'E:\SqlData\AdventureWorks2017.mdf')

ALTER DATABASE AdventureWorks2017 
MODIFY FILE ( NAME = 'AdventureWorks2017_log' , FILENAME = 'F:\SqlLog\AdventureWorks2017_log.ldf')

انتقال فایل های دیتابیس به مسیر جدید

۳- در این مرحله می بایست با دستور زیر دیتابیس Offline شود:

ALTER DATABASE AdventureWorks2017 SET OFFLINE WITH ROLLBACK IMMEDIATE

۴- بعد از آفلاین کردن دیتابیس می بایست هر کدام از فایل ها را به مسیر جدید خود انتقال دهیم(فایل های مورد نظر را Cut و در مسیر جدیدشان paste می کنیم)
۵- در مرحله آخر با دستور زیر دیتابیس خود را Online می کنیم:

ALTER DATABASE AdventureWorks2017 SET ONLINE

در نهایت می توانیم با استفاده از کوئری زیر مسیر فایل های دیتابیس خود را مشاهده کنیم و از صحت انتقال فایل ها مطمئن شویم:

SELECT name , physical_name , state_desc
FROM sys.master_files 
WHERE database_id = DB_ID('AdventureWorks2017')

مشاهده مسیر فایل های دیتابیس

انتقال فایل های دیتابیس سیستمی

فرایند انتقال فایل های دیتابیس سیستمی دقیقا مشابه انتقال فایل های دیتابیس کاربر است فقط در مرحله ۳ به جای آفلاین کردن دیتابیس، می بایست سرویس SQL Server را stop و در مرحله ۵ به جای آنلاین کردن می بایست سرویس SQL Server را Start کنید.

چند نکته:

  • در محیط های عملیات و یا جاهایی که سلامت دیتابیس برای شما مهم است حتما قبل از انجام انتقال فایل ها از دیتابیس خود بکاپ بگیرید
  • برای انتقال لاگ فایل ( ldf ) ، اگر حجم آن زیاد است بهتر است قبل از انتقال آن را Shrink و حجم آن را کم نمایید(برای چگونگی انجام این کار به مقاله رشد بی رویه لاگ فایل مراجعه نمایید)
  • روش های دیگری جهت انتقال فایل های دیتابیس به مسیرهای جدید وجود دارد مانند Detach و Attach کردن دیتابیس ، بکاپ گرفتن از دیتابیس و بازگردانی آن در مسیرهای جدید و … که می توانید در محیط های تست از این روش ها استفاده کنید ولی این روش ها توصیه نمی شود و بهترین روش همان روشی است که در بالا اشاره شده است

امیدوارم این آموزش برای خوانندگان گرامی مفید واقع شود. لطفا با ارائه نظرات ، سوالات و پیشنهادات خود به بالا بردن کیفیت مطالب آموزشی و همچنین ایجاد دلگرمی برای ادامه مسیر آموزش به ما کمک نمایید. همچنین می توانید با عضویت در کانال تلگرام IranSQL از جدیدترین مقالات و فیلم های آموزشی با خبر شوید.

اشتراک گذاری با دیگران
  •  
  •  
  •  
  •  
  •