Move database file in new path in sql server
سلام دوستان
امیدوارم همیشه و در همه وقت، حال خوبی داشته باشید. برای جابجایی مسیر دیتابیس، همیشه برای خودم این معضل وجود داشت که چگونه این کار را انجام بدهم. چند راهی که همیشه به ذهن همه ما می رسد در ذیل بیان می کنم:
بعد، فایلها را در مسیر جدید کپی نماییم و بعد آن را attach نماییم.
2. گرفتن backup از دیتابیس
و restore کردن دیتابیس در مسیر جدید
3. بی خیال دیتابیس بشیم و از اول دیتابیس را به طور مثال از طریق اسکریپت یا migration ایجاد کنیم.
4. ایجاد اسکرپیت مربوط به تغییر مسیر file های دیتابیس با دستور modify file که اسکرپیت مربوط به ایجاد اتوماتیک آن در زیر می باشد
DECLARE @DBName VARCHAR(100) = 'TestDB';
DECLARE @NewPath VARCHAR(100) = 'D:\Databases\';
SELECT 'ALTER DATABASE ' + @DBName + ' MODIFY FILE (NAME = [' + f.name + '],' +
' FILENAME = ''' + @NewPath + ''
+ f.name + CASE WHEN f.type = 1 THEN '.ldf' ELSE '.mdf' END + ''');' AS ExecScript
, f.name
, f.type_desc
, f.physical_name
, f.state_desc
FROM sys.master_files f
WHERE f.database_id = DB_ID(@DBName);
لازم به ذکراست در اینجا نام دیتابیس تستی ما TestDb و مسیر جدید آن D:\Databases می باشد که از دو متغیر استفاده شده است
5. عملیات مربوط به offline کردن دیتابیس
می توانیم از اسکرپیت زیر نیز استفاده نماییم
USE [master]
ALTER DATABASE [TestDB] SET OFFLINE
6. کپی نمودن فایلها در مسیر جدید
در این مرحله می بایست data file و log file های مربوط به دیتابیس را در مسیر جدید کپی نماییم. در اینجا مسیر جدید ما D:\Databases می باشد.
7. عملیات مربوط به online نمودن دیتابیس
که می توانیم از اسکریپت زیر نیز استفاده نماییم
ALTER DATABASE [TestDB] SET ONLINE
8. حذف فایلهای قبلی
بعد از تست نمودن دیتابیس، فایلهای قبلی را حذف می نماییم.
با تشکر
سعید شیرزادیان
1400/11/13