উত্তর:
ডাটাবেস ফাইলগুলি সরানোর জন্য আপনাকে এসকিউএল সার্ভার পরিষেবাটি থামাতে হবে না, তবে আপনাকে নির্দিষ্ট ডাটাবেসটি অফলাইনে নিতে হবে। এর কারণ এটি হচ্ছে যে আপনি ফাইলগুলি অ্যাক্সেস করার সময় অ্যাক্সেস করার সময় এবং অফলাইনে ডাটাবেস নেওয়ার ফলে ফাইলগুলি এসকিউএল সার্ভার অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হওয়া বন্ধ করে দেয়।
তাদের সরানোর প্রক্রিয়া মোটামুটি সহজ। ডিটাচ / সংযুক্তি ইতিমধ্যে বর্ণিত ছিল, তবে এটি প্রায় জটিল নয়।
একটি ALTER DATABASE
আদেশ দিয়ে ফাইলের অবস্থান পরিবর্তন করুন :
USE master; --do this all from the master
ALTER DATABASE foo
MODIFY FILE (name='DB_Data1'
,filename='X:\NewDBFile\DB_Data1.mdf'); --Filename is new location
দ্রষ্টব্য, আপনাকে এই আদেশে পুরানো অবস্থান ঘোষণা করার দরকার নেই। এই পথটি পরিবর্তন করা অবিলম্বে কার্যকর হবে না, তবে পরবর্তী সময় ডাটাবেস শুরু হওয়ার সময় ব্যবহার করা হবে।
অফলাইন ডাটাবেস সেট করুন
(আমি WITH ROLLBACK IMMEDIATE
সবাইকে লাথি মেরে ফেলার জন্য এবং বর্তমানে উন্মুক্ত সমস্ত লেনদেনকে রোলব্যাক করতে ব্যবহার করি )
ALTER DATABASE foo SET OFFLINE WITH ROLLBACK IMMEDIATE;
ফাইলগুলিকে নতুন জায়গায় সরিয়ে / অনুলিপি করুন
আপনার প্রিয় পদ্ধতিটি ব্যবহার করে কেবল ফাইলগুলি অনুলিপি করুন (ক্লিক করুন 'এন টেনে আনুন, এক্সকপি, কপি-আইটেম, রোবকপি)
অনলাইন ডাটাবেস আনুন
ALTER DATABASE foo SET ONLINE;
আপনি এখানে আরও বিশদে এটি বর্ণিত দেখতে পারেন ।
MODIFY FILE
আদেশটি পরিবর্তনযোগ্য। আপনি যদি প্রথমে মোডিফাই ফাইলটি চালান, এটি আপনাকে বলবে যে কমান্ডটি সফলভাবে চলে এবং একটি অফলাইন-অনলাইন ক্রিয়াকলাপের পরে অবস্থানটি পরিবর্তন করা হবে (শব্দটি আলাদা তবে ধারণাটি পাবেন)। অফলাইন-> ফাইলগুলি সরান-> অনলাইন আদেশে স্পষ্ট কারণেই গুরুত্বপূর্ণ does Demonslay335 এর নোটটিও চিহ্নিত করুন। ফাইল অনুমতি গুরুত্বপূর্ণ।
এমডিএফ এবং এলডিএফ ফাইলগুলি সুরক্ষিত এবং ডেটাবেস অনলাইন থাকাকালীন সরানো যায় না cannot
আপনি যদি ডাটাবেসটিকে কাজ করা থেকে বিরত করতে আপত্তি করেন না, তবে আপনি DETACH
এটি করতে পারেন, ফাইলগুলি সরান এবং তারপরে ATTACH
এটি করতে পারেন।
Properties
Files
ট্যাবে যানPath
এবং একটি নোট তৈরি করুনFileName
। আপনি নিখোঁজ থাকা ফাইলগুলির সন্ধান শেষ করতে না চাইলে এই পদক্ষেপটি গুরুত্বপূর্ণ ...Tasks -> Detach
Databases
আপনার সার্ভারের নোডে রাইট ক্লিক করুনAttach
Add
বাটনOK
আপনার এখন ঠিক আছে। সম্পর্কে তথ্য DETACH
- ATTACH
প্রক্রিয়া খুঁজে পাওয়া যেতে পারে এখানে ।
লিঙ্কে DETACH
- এসকিউএল সার্ভারের একই উদাহরণে ডাটাবেস রাখলে বিবৃতি ATTACH
ব্যবহারের একটি পুনঃসংশোধন রয়েছে ALTER DATABASE
। সরানো ব্যবহারকারী ডেটাবেসগুলিতে আরও রেফারেন্স ।
আপনি যদি চলার সময় এটি চালিয়ে রাখতে চান তবে একটি করুন BACKUP
- RESTORE
। পুনরুদ্ধার প্রক্রিয়াতে আপনি ডাটাবেস ফাইলগুলির নতুন অবস্থান নির্ধারণ করতে পারেন।
সিস্টেম ডাটাবেস ফাইলগুলি সরানোর জন্য এই পদক্ষেপগুলি অনুসরণ করুন:
এসএসএমএস-এ ব্যবহারকারী হিসাবে লগ ইন করুন
সুরক্ষার জন্য ব্যবহারকারী তৈরি করা ডাটাবেসের একটি ব্যাকআপ নিন।
এসএসএমএস থেকে সার্ভারের সাথে সংযুক্ত সমস্ত সেশনকে হত্যা করুন।
সিস্টেম ডাটাবেসের বর্তমান ফাইলের অবস্থান পরীক্ষা করতে নিম্নলিখিত কমান্ডটি প্রয়োগ করুন:
USE master;
SELECT * FROM sys.master_files;
পাথ চিহ্নিত করুন এবং ফাইলগুলির বর্তমান পাথটি নোট করুন।
মাস্টার ব্যতীত সমস্ত ডাটাবেসের ফাইলের পথ পরিবর্তন করতে টিএসকিউএল ব্যবহার করুন:
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
উদাহরণ:
ALTER DATABASE tempdb
MODIFY FILE ( NAME = tempdev
, FILENAME = "DestinationPath\tempdb.mdf");
ALTER DATABASE tempdb
MODIFY FILE ( NAME = templog
, FILENAME = "DestinationPath\templog.ldf");
ALTER DATABASE model
MODIFY FILE ( NAME = modeldev
, FILENAME = "DestinationPath\model.mdf");
ALTER DATABASE model
MODIFY FILE ( NAME = modellog
, FILENAME = "DestinationPath\modellog.ldf");
ALTER DATABASE msdb
MODIFY FILE ( NAME = MSDBData
, FILENAME = "DestinationPath\msdbdata.mdf");
ALTER DATABASE msdb
MODIFY FILE ( NAME = MSDBLog
, FILENAME = "DestinationPath\msdblog.ldf");
এখন ফাইলের অবস্থান পরিবর্তন করা হয়েছে।
উভয় ldf এবং mdf ফাইল সরানো নিশ্চিত করুন
এসএসএমএসে সার্ভারে ডানদিকে ক্লিক করুন এবং বৈশিষ্ট্য নির্বাচন করুন। অভ্যন্তরের বৈশিষ্ট্যগুলি ডেটাবেস সেটিংসে যান। ডেটাবেসের জন্য ডেটাবেস ডিফল্ট অবস্থানগুলি পরিবর্তন করুন এবং গন্তব্য পথে লগ করুন। সার্ভার থেকে লগ অফ করুন।
উদাহরণ: পরিবর্তন C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\
করতেE:\projects\DataBaseFiles\MSSQL\DATA\
এসকিউএল সার্ভারের উদাহরণ বন্ধ করুন।
ফাইল বা ফাইলগুলি নতুন স্থানে অনুলিপি করুন। গন্তব্য ফোল্ডারে প্রবেশের অনুমতিগুলি অনুলিপি করতে ফাইলগুলি সরানোর জন্য রবোকপি ব্যবহার করুন। সেন্টিমিডি খুলুন এবং প্রশাসক হিসাবে চালান এবং নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
রোবকপি / সেকেন্ড উত্স ফোল্ডার গন্তব্যফোল্ডার
কমান্ডটি চালানোর জন্য উত্সের স্থানে যাওয়া ভাল। অনুলিপি করা সিস্টেম ডাটাবেস ফাইল ব্যতীত অন্য ফাইলগুলি মুছুন। উদাহরণ:
robocopy /sec .\DATA E:\projects\DataBaseFiles\MSSQL\DATA\
(এখানে আমরা সমস্ত সিস্টেম ডাটাবেস ফাইলগুলিকে নতুন অবস্থানে নিয়ে যাচ্ছি))
এসকিউএল সার্ভার কনফিগারেশন ম্যানেজারে ফলউইং পদক্ষেপগুলি সম্পাদন করুন:
এসকিউএল সার্ভার পরিষেবাদি নোডে, এসকিউএল সার্ভারের উদাহরণটি ডান ক্লিক করুন (উদাহরণস্বরূপ, এসকিউএল সার্ভার (এমএসএসকিউএলএসভার)) এবং বৈশিষ্ট্যগুলি নির্বাচন করুন .. এসকিউএল সার্ভারে (উদাহরণ_নাম) বৈশিষ্ট্য ডায়ালগ বাক্সে, স্টার্টআপ পরামিতি ট্যাবে ক্লিক করুন। বিদ্যমান পরামিতি বাক্সে, মাস্টার ডেটা ফাইল সরানোর জন্য parad পরামিতিটি নির্বাচন করুন। পরিবর্তনটি সংরক্ষণ করতে আপডেট ক্লিক করুন। একটি সূচনা পরামিতি বাক্স উল্লেখ করুন, প্যারামিটারটি মাস্টার ডাটাবেসের নতুন পথে পরিবর্তন করুন। বিদ্যমান পরামিতি বাক্সে, মাস্টার লগ ফাইলটি সরানোর জন্য paral পরামিতিটি নির্বাচন করুন। পরিবর্তনটি সংরক্ষণ করতে আপডেট ক্লিক করুন। একটি সূচনা পরামিতি বাক্স উল্লেখ করুন, প্যারামিটারটি মাস্টার ডাটাবেসের নতুন পথে পরিবর্তন করুন।
ডেটা ফাইলের জন্য প্যারামিটার মান অবশ্যই -d প্যারামিটার অনুসরণ করতে হবে এবং লগ ফাইলের জন্য মানটি অবশ্যই -l পরামিতি অনুসরণ করবে। নিম্নলিখিত উদাহরণটি মাস্টার ডেটা ফাইলের ডিফল্ট অবস্থানের জন্য প্যারামিটার মানগুলি দেখায়।
-dC:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\mastlog.ldf
যদি মাস্টার ডেটা ফাইলের জন্য পরিকল্পিত স্থানান্তর ই:: এসকিউএলডেটা হয় তবে প্যারামিটারের মানগুলি নিম্নরূপে পরিবর্তিত হবে:
-dE:\projects\DataBaseFiles\MSSQL\DATA\master.mdf
-lE:\projects\DataBaseFiles\MSSQL\DATA\mastlog.ldf
এসকিউএল সার্ভারের দৃষ্টান্তটি বন্ধ করে দিন উদাহরণটির ডান ক্লিক করে এবং থামাতে পছন্দ করুন choosing এসকিউএল সার্ভারের পুনরায় সূচনা করুন।
sa
এসএসএমএসে ব্যবহারকারী হিসাবে লগ ইন করুন এবং নিম্নলিখিত কোয়েরিটি সম্পাদন করে ডাটাবেস ফাইলগুলির অবস্থান যাচাই করুন:
USE master;
SELECT * FROM sys.master_files;
সব শেষ.
আপনি ধাপে ধাপে:
রোলব্যাকের সাথে তাত্ক্ষণিকভাবে সমস্ত সংযোগ বন্ধ করুন
অফলাইনে স্ট্যাটাস সহ
ডেটাবেস সেট করুন ডেটাব্যাস মাইডিবি সেট অফলাইনে TER
নতুন পাথের জন্য
ডেটাবেস মাইডিবি মোডিফাই ফাইল (নাম = মাইডিবি, ফাইলের নাম = 'এন: ATA ডেটা \ মাইডিবি.এমডিএফ') পরিবর্তন করুন
অনলাইন স্ট্যাটাস সহ ডাটাবেস
সেট করুন ডেটাব্যাস মাইডিবি অনলাইন সেট করুন
একাধিক-ব্যবহারকারী
অল্টার ডেটাবেস মাইডিবি সেট করুন মাল্টি_উসার
ডাটাবেস অফলাইনে না নিয়ে ডাটাবেস ডেটা ফাইল সরানোর একটি উপায় রয়েছে (লগফাইলে এটি করার কোনও উপায় আছে কিনা তা এখনও নিশ্চিত নয়)।
এই পদ্ধতির জন্য দেজন নাকারদা-কর্ডিকের এখানে একটি ব্যাখ্যা + স্ক্রিপ্ট রয়েছে: https://www.itprotoday.com/sql-server/move-database-files-without-taking-database-offline
সংক্ষিপ্ত সংস্করণটি হ'ল আপনি নতুন স্থানে অন্য একটি ডাটাবেস ফাইল যুক্ত করুন এবং তারপরে পুরানো ফাইল থেকে ডেটাটি নতুন ফাইলে স্থানান্তরিত করতে EMPTYFILE বিকল্প সহ ডিবিসিসি সঙ্কোচফিল ব্যবহার করুন। এটি হয়ে গেলে আপনি পুরানো ডেটা ফাইলটি সরাতে পারেন।
আমার সমাধান নয়, আমি নিজেই এই সমাধানটি খুঁজছিলাম এবং এটি আমাদের উত্পাদন পরিবেশের জন্য খুব দরকারী বলে মনে করি।
Thorfinn
এই 4 টি সহজ পদক্ষেপ অনুসরণ করুন:
CurrentLocation
কলামে আপনি যে পাথটি দেখিয়েছেন তা নোট করুন ।
SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID('DATABASE_NAME');
ALTER DATABASE DATABASE_NAME MODIFY FILE ( NAME = DATABASE_FILE_NAME , FILENAME = 'NEW_PATH\DATABASE_NAME.mdf');
ALTER DATABASE DATABASE_NAME MODIFY FILE ( NAME = DATABASE_FILE_NAME_log , FILENAME = 'NEW_PATH\DATABASE_FILE_NAME_log.ldf');
আমি নিশ্চিত নই যে এটিই সর্বোত্তম উপায় (আমি কীভাবে তা নয় তা জানাতে আমি কোনও মন্তব্যকে স্বাগত জানাব), তবে এটি খুব সহজ (এবং আপনার যদি একটি ছোট ডাটাবেস থাকে তবে দ্রুত):
প্রথমে, .bak ফাইলে ডাটাবেসটি ব্যাকআপ করুন। তারপরে, একই .bak ফাইল থেকে ডাটাবেসটি পুনরুদ্ধার করুন, পুনরুদ্ধার কাজের জন্য ফাইলের বিকল্পগুলির অধীনে নতুন .mdf এবং .ldf ফাইলের অবস্থান নির্বাচন করুন।
পুনরুদ্ধারের সময় আপনি ডাটাবেসটি অ্যাক্সেস করতে না পারায় কোনও রক্ষণাবেক্ষণ উইন্ডোর বাইরে কোনও পরিবেশের পরিবেশে এটি করব না। অন্যান্য পদ্ধতিগুলি যা আমি উপরে দেখলাম তাতে একই রকম ত্রুটি থাকতে পারে। পুনরুদ্ধার কাজ শেষ হওয়ার পরে, আপনাকে পুরানো ফাইলটি মুছতে হবে না। এটি স্বয়ংক্রিয়ভাবে সম্পন্ন হয়েছে।
বিদ্যমান উত্তরগুলির পরিপূরক করতে: ALTER DATABASE ... MOVE ...
সমস্ত ডাটাবেসের জন্য বিবৃতি তৈরি করার জন্য এখানে একটি স্ক্রিপ্ট রয়েছে :
SELECT 'ALTER DATABASE ' + QUOTENAME(d.name) +
' MODIFY FILE (name=' + QUOTENAME(f.name, '''') +
', filename=' + QUOTENAME(REPLACE(f.physical_name, 'C:\', 'D:\'), '''') +
');'
FROM sys.master_files AS f
INNER JOIN sys.databases AS d ON f.database_id = d.database_id
WHERE d.name <> 'master';
বিঃদ্রঃ:
REPLACE(f.physical_name, 'C:\', 'D:\')
আপনি ফাইল পাথগুলিতে যে রূপান্তর করতে চান তা দ্বারা প্রতিস্থাপন করুন ।
master
অব্যাহতিপ্রাপ্ত, যেহেতু এটির পাথ এসকিউএল সার্ভারের প্রারম্ভিক বিকল্পগুলি দ্বারা নির্ধারিত হয় (উদাহরণস্বরূপ, বিশদগুলির জন্য এই উত্তরটি দেখুন)।
USE master; --do this all from the master ALTER DATABASE foo MODIFY FILE (name='DB_Data1_log' ,filename='X:\NewDBFile\DB_Data1_log.ldf'); --Filename is new location