আমি কীভাবে এসকিউএল সার্ভার ডাটাবেস ফাইলগুলি স্থানান্তর করব?


103

আমার একটি ডাটাবেস আছে .mdfএবং .ldfফাইলগুলি অন্য জায়গায় সরিয়ে নিতে চাই । তবে আমি MSSQLSERVERপরিষেবাটি বন্ধ করতে চাই না এবং আমি অন্য সার্ভারে রফতানি করতে চাই না।

কিভাবে আমি এটি করতে পারব?

উত্তর:


154

ডাটাবেস ফাইলগুলি সরানোর জন্য আপনাকে এসকিউএল সার্ভার পরিষেবাটি থামাতে হবে না, তবে আপনাকে নির্দিষ্ট ডাটাবেসটি অফলাইনে নিতে হবে। এর কারণ এটি হচ্ছে যে আপনি ফাইলগুলি অ্যাক্সেস করার সময় অ্যাক্সেস করার সময় এবং অফলাইনে ডাটাবেস নেওয়ার ফলে ফাইলগুলি এসকিউএল সার্ভার অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হওয়া বন্ধ করে দেয়।

তাদের সরানোর প্রক্রিয়া মোটামুটি সহজ। ডিটাচ / সংযুক্তি ইতিমধ্যে বর্ণিত ছিল, তবে এটি প্রায় জটিল নয়।

একটি 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;

আপনি এখানে আরও বিশদে এটি বর্ণিত দেখতে পারেন ।


13
এটি আমার পক্ষে কাজ করেছে। আমার ক্ষেত্রে আমাকে প্রথম কমান্ডটি ব্যবহার করেও এলডিএফ ফাইলটি সরিয়ে ফেলতে হয়েছিল: যেমন 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
দেবী রিস

1
আপনি ফাইল ডায়ালগটিতে যা দেখেন তার সাথে মেলে কেবল ফাইলের নাম আপডেট করেই পুরো পাঠ্য সূচি ফাইলগুলি স্থানান্তর করতে ব্যবহার করা যেতে পারে।
ডিএসহুক

24
"এনটি সার্ভিস \ এমএসএসকিউএসএলভার" ব্যবহারকারীর এর অনুমতি রয়েছে বা ডাটাবেসটিকে অনলাইনে আবার ফিরিয়ে আনার চেষ্টা করার সময় আপনি ত্রুটিগুলি পেয়ে যাবেন তা নিশ্চিত করুন!
Demonslay335

"নাম" হবার কথা কি? ডকুমেন্টেশনে এটির "যৌক্তিক_নাম" রয়েছে। তাঁরা কি বোঝাতে চাইছেন?
জননী

2
@ এমএলএইচডিভ আসলে আমার মামলার MODIFY FILEআদেশটি পরিবর্তনযোগ্য। আপনি যদি প্রথমে মোডিফাই ফাইলটি চালান, এটি আপনাকে বলবে যে কমান্ডটি সফলভাবে চলে এবং একটি অফলাইন-অনলাইন ক্রিয়াকলাপের পরে অবস্থানটি পরিবর্তন করা হবে (শব্দটি আলাদা তবে ধারণাটি পাবেন)। অফলাইন-> ফাইলগুলি সরান-> অনলাইন আদেশে স্পষ্ট কারণেই গুরুত্বপূর্ণ does Demonslay335 এর নোটটিও চিহ্নিত করুন। ফাইল অনুমতি গুরুত্বপূর্ণ।
লিওনেট চেন

50

এমডিএফ এবং এলডিএফ ফাইলগুলি সুরক্ষিত এবং ডেটাবেস অনলাইন থাকাকালীন সরানো যায় না cannot

আপনি যদি ডাটাবেসটিকে কাজ করা থেকে বিরত করতে আপত্তি করেন না, তবে আপনি DETACHএটি করতে পারেন, ফাইলগুলি সরান এবং তারপরে ATTACHএটি করতে পারেন।

  • ডাটাবেসের নামে ডান ক্লিক করুন
  • নির্বাচন করা Properties
  • Filesট্যাবে যান
  • এমডিএফ এবং এলডিএফ ফাইলগুলির Pathএবং একটি নোট তৈরি করুনFileName । আপনি নিখোঁজ থাকা ফাইলগুলির সন্ধান শেষ করতে না চাইলে এই পদক্ষেপটি গুরুত্বপূর্ণ ...
  • ডাটাবেসের নামে ডান ক্লিক করুন
  • নির্বাচন করা Tasks -> Detach
  • আপনি যেখানে চান ফাইলগুলি সরান
  • Databasesআপনার সার্ভারের নোডে রাইট ক্লিক করুন
  • নির্বাচন করা Attach
  • দেখার জন্য ক্লিক করুন Addবাটন
  • নতুন অবস্থানের দিকে নির্দেশ করুন
  • ক্লিক OK

আপনার এখন ঠিক আছে। সম্পর্কে তথ্য DETACH- ATTACHপ্রক্রিয়া খুঁজে পাওয়া যেতে পারে এখানে

লিঙ্কে DETACH- এসকিউএল সার্ভারের একই উদাহরণে ডাটাবেস রাখলে বিবৃতি ATTACHব্যবহারের একটি পুনঃসংশোধন রয়েছে ALTER DATABASEসরানো ব্যবহারকারী ডেটাবেসগুলিতে আরও রেফারেন্স ।

আপনি যদি চলার সময় এটি চালিয়ে রাখতে চান তবে একটি করুন BACKUP- RESTORE। পুনরুদ্ধার প্রক্রিয়াতে আপনি ডাটাবেস ফাইলগুলির নতুন অবস্থান নির্ধারণ করতে পারেন।


3
পুনরায়
পাঠানোর

6

সিস্টেম ডাটাবেস ফাইলগুলি সরানোর জন্য এই পদক্ষেপগুলি অনুসরণ করুন:

  1. এসএসএমএস-এ ব্যবহারকারী হিসাবে লগ ইন করুন

  2. সুরক্ষার জন্য ব্যবহারকারী তৈরি করা ডাটাবেসের একটি ব্যাকআপ নিন।

  3. এসএসএমএস থেকে সার্ভারের সাথে সংযুক্ত সমস্ত সেশনকে হত্যা করুন।

  4. সিস্টেম ডাটাবেসের বর্তমান ফাইলের অবস্থান পরীক্ষা করতে নিম্নলিখিত কমান্ডটি প্রয়োগ করুন:

    USE master;
    SELECT * FROM sys.master_files;

পাথ চিহ্নিত করুন এবং ফাইলগুলির বর্তমান পাথটি নোট করুন।

  1. মাস্টার ব্যতীত সমস্ত ডাটাবেসের ফাইলের পথ পরিবর্তন করতে টিএসকিউএল ব্যবহার করুন:

    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 ফাইল সরানো নিশ্চিত করুন

  1. এসএসএমএসে সার্ভারে ডানদিকে ক্লিক করুন এবং বৈশিষ্ট্য নির্বাচন করুন। অভ্যন্তরের বৈশিষ্ট্যগুলি ডেটাবেস সেটিংসে যান। ডেটাবেসের জন্য ডেটাবেস ডিফল্ট অবস্থানগুলি পরিবর্তন করুন এবং গন্তব্য পথে লগ করুন। সার্ভার থেকে লগ অফ করুন।

    উদাহরণ: পরিবর্তন C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\করতেE:\projects\DataBaseFiles\MSSQL\DATA\

  2. এসকিউএল সার্ভারের উদাহরণ বন্ধ করুন।

  3. ফাইল বা ফাইলগুলি নতুন স্থানে অনুলিপি করুন। গন্তব্য ফোল্ডারে প্রবেশের অনুমতিগুলি অনুলিপি করতে ফাইলগুলি সরানোর জন্য রবোকপি ব্যবহার করুন। সেন্টিমিডি খুলুন এবং প্রশাসক হিসাবে চালান এবং নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

    রোবকপি / সেকেন্ড উত্স ফোল্ডার গন্তব্যফোল্ডার

কমান্ডটি চালানোর জন্য উত্সের স্থানে যাওয়া ভাল। অনুলিপি করা সিস্টেম ডাটাবেস ফাইল ব্যতীত অন্য ফাইলগুলি মুছুন। উদাহরণ:

 robocopy /sec .\DATA E:\projects\DataBaseFiles\MSSQL\DATA\

(এখানে আমরা সমস্ত সিস্টেম ডাটাবেস ফাইলগুলিকে নতুন অবস্থানে নিয়ে যাচ্ছি))

  1. স্টার্ট মেনু থেকে, সমস্ত প্রোগ্রামগুলিতে নির্দেশ করুন, মাইক্রোসফ্ট এসকিউএল সার্ভারের দিকে নির্দেশ করুন, কনফিগারেশন সরঞ্জামগুলিতে নির্দেশ করুন এবং তারপরে এসকিউএল সার্ভার কনফিগারেশন পরিচালককে ক্লিক করুন।

এসকিউএল সার্ভার কনফিগারেশন ম্যানেজারে ফলউইং পদক্ষেপগুলি সম্পাদন করুন:

এসকিউএল সার্ভার পরিষেবাদি নোডে, এসকিউএল সার্ভারের উদাহরণটি ডান ক্লিক করুন (উদাহরণস্বরূপ, এসকিউএল সার্ভার (এমএসএসকিউএলএসভার)) এবং বৈশিষ্ট্যগুলি নির্বাচন করুন .. এসকিউএল সার্ভারে (উদাহরণ_নাম) বৈশিষ্ট্য ডায়ালগ বাক্সে, স্টার্টআপ পরামিতি ট্যাবে ক্লিক করুন। বিদ্যমান পরামিতি বাক্সে, মাস্টার ডেটা ফাইল সরানোর জন্য 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 এসকিউএল সার্ভারের পুনরায় সূচনা করুন।

  1. saএসএসএমএসে ব্যবহারকারী হিসাবে লগ ইন করুন এবং নিম্নলিখিত কোয়েরিটি সম্পাদন করে ডাটাবেস ফাইলগুলির অবস্থান যাচাই করুন:

    USE master;
    SELECT * FROM sys.master_files;

সব শেষ.


: আপনি এসকিউএল ফাংশন সমস্ত ডাটাবেস জন্য টাস্ক স্বয়ংক্রিয় ব্যবহার করতে পারে stackoverflow.com/a/19505918/439524
amuliar

3

আপনি ধাপে ধাপে:


  1. রোলব্যাকের সাথে তাত্ক্ষণিকভাবে সমস্ত সংযোগ বন্ধ করুন

  2. অফলাইনে স্ট্যাটাস সহ
    ডেটাবেস সেট করুন ডেটাব্যাস মাইডিবি সেট অফলাইনে TER

  3. নতুন পাথের জন্য
    ডেটাবেস মাইডিবি মোডিফাই ফাইল (নাম = মাইডিবি, ফাইলের নাম = 'এন: ATA ডেটা \ মাইডিবি.এমডিএফ') পরিবর্তন করুন

  4. অনলাইন স্ট্যাটাস সহ ডাটাবেস
    সেট করুন ডেটাব্যাস মাইডিবি অনলাইন সেট করুন

  5. একাধিক-ব্যবহারকারী
    অল্টার ডেটাবেস মাইডিবি সেট করুন মাল্টি_উসার


3

ডাটাবেস অফলাইনে না নিয়ে ডাটাবেস ডেটা ফাইল সরানোর একটি উপায় রয়েছে (লগফাইলে এটি করার কোনও উপায় আছে কিনা তা এখনও নিশ্চিত নয়)।

এই পদ্ধতির জন্য দেজন নাকারদা-কর্ডিকের এখানে একটি ব্যাখ্যা + স্ক্রিপ্ট রয়েছে: https://www.itprotoday.com/sql-server/move-database-files-without-taking-database-offline

সংক্ষিপ্ত সংস্করণটি হ'ল আপনি নতুন স্থানে অন্য একটি ডাটাবেস ফাইল যুক্ত করুন এবং তারপরে পুরানো ফাইল থেকে ডেটাটি নতুন ফাইলে স্থানান্তরিত করতে EMPTYFILE বিকল্প সহ ডিবিসিসি সঙ্কোচফিল ব্যবহার করুন। এটি হয়ে গেলে আপনি পুরানো ডেটা ফাইলটি সরাতে পারেন।

আমার সমাধান নয়, আমি নিজেই এই সমাধানটি খুঁজছিলাম এবং এটি আমাদের উত্পাদন পরিবেশের জন্য খুব দরকারী বলে মনে করি।

Thorfinn


1

এই 4 টি সহজ পদক্ষেপ অনুসরণ করুন:

  1. এসএসএমএস খুলুন এবং উইন্ডোর উপরের অংশ থেকে নতুন প্রশ্নের বিকল্প নির্বাচন করুন । তারপরে ডাটাবেসটির পাথের সন্ধানের জন্য নিম্নলিখিত প্রশ্নের অনুলিপি করুন এবং সম্পাদন করুন যা আমরা নতুন পথে যেতে চাই এবং CurrentLocationকলামে আপনি যে পাথটি দেখিয়েছেন তা নোট করুন ।

SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID('DATABASE_NAME');

  1. এখন সেই পথে যান এবং ডাটাবেস_নাম.এমডিএফ এবং ডাটাবেস_নাম_লগ.ল্ডফ ফাইলগুলির নামটি নোট করুন । তারপরে ডেটাবেসকে নির্দিষ্ট স্থানে সরিয়ে নেওয়ার জন্য নিম্নলিখিত দুটি কোয়েরি কার্যকর করুন।

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');

  1. এখন, ডান ক্লিক করে সার্ভারটি থামানServer_Name যার উপর আপনি অবজেক্ট এক্সপ্লোরার (বাম দিক) দেখতে পাবেন।

    এখানে চিত্র বর্ণনা লিখুন

  2. তারপরে উভয় ফাইলকে পুরানো পথ থেকে নতুন পথে সরান এবং আবার সার্ভার_নেমে ডান ক্লিক করে সার্ভারটি শুরু করুন। আবার 1 ম পদক্ষেপের ক্যোয়ারি চালিয়ে ডেটাবেসের নতুন পথ নিশ্চিত করুন।


0

আমি নিশ্চিত নই যে এটিই সর্বোত্তম উপায় (আমি কীভাবে তা নয় তা জানাতে আমি কোনও মন্তব্যকে স্বাগত জানাব), তবে এটি খুব সহজ (এবং আপনার যদি একটি ছোট ডাটাবেস থাকে তবে দ্রুত):

প্রথমে, .bak ফাইলে ডাটাবেসটি ব্যাকআপ করুন। তারপরে, একই .bak ফাইল থেকে ডাটাবেসটি পুনরুদ্ধার করুন, পুনরুদ্ধার কাজের জন্য ফাইলের বিকল্পগুলির অধীনে নতুন .mdf এবং .ldf ফাইলের অবস্থান নির্বাচন করুন।

পুনরুদ্ধারের সময় আপনি ডাটাবেসটি অ্যাক্সেস করতে না পারায় কোনও রক্ষণাবেক্ষণ উইন্ডোর বাইরে কোনও পরিবেশের পরিবেশে এটি করব না। অন্যান্য পদ্ধতিগুলি যা আমি উপরে দেখলাম তাতে একই রকম ত্রুটি থাকতে পারে। পুনরুদ্ধার কাজ শেষ হওয়ার পরে, আপনাকে পুরানো ফাইলটি মুছতে হবে না। এটি স্বয়ংক্রিয়ভাবে সম্পন্ন হয়েছে।


1
এই দৃশ্যের কিছু ত্রুটি রয়েছে। পুনরুদ্ধার করার সময়, মূল ডিবি অবশ্যই ওভাররাইট বা পুনঃনাম করা উচিত। বড় ডাটাবেসের জন্য, পদ্ধতিটি গুরুতর আইও ওভারহেডের পরিচয় দেয়। বর্ণনা অনুযায়ী ফাইলগুলি সরালে আলাদা সংযুক্ত বা ডিবি পরিবর্তন পদ্ধতি উপায় দ্রুত। যদি ফাইলগুলি একই এনটিএফএস পার্টিশনের মধ্যে স্থানান্তরিত হয় তবে এটি কেবল একটি মেটাডেটা অপারেশন।
ভনপ্রাইজ

@ অলি - ব্যাকআপ এবং পুনরুদ্ধার করুন। বেশি সময় নিতে পারে তবে এটি সাধারণত একটি নিরাপদ পথ। হারোণের বারট্রান্ড এর বিশ্লেষণ দেখুন: blogs.sqlsentry.com/aaronbertrand/bad-habits-file-backups এছাড়াও: sqlmag.com/blog/should-i-be-using-san-snapshots-backup-solution
RLF

খুব বড় ডাটাবেসের জন্য, এই পদ্ধতির (এবং বিচ্ছিন্নকরণ / সংযুক্তি পদ্ধতির) যথেষ্ট ডাউনটাইম পরিচয় করিয়ে দেয়। এটি এড়াতে, উত্স ডাটাবেসটিকে পুরো পুনরুদ্ধার মোডে রাখুন, তারপরে প্রাথমিক ব্যাকআপ পুনরুদ্ধার করুন গন্তব্য ডিবি অ-কার্যক্ষম অবস্থায় রেখে perform তারপরে এক বা একাধিক লেনদেন লগের ব্যাকআপ / পুনরুদ্ধার করুন। লেনদেনের লগের চূড়ান্ত ব্যাকআপ / পুনরুদ্ধারকালে ডাটাবেসটি নীচে নেমে যেতে হবে, এতে একটি নির্বিচারে ছোট সময় এবং আকার থাকতে পারে। স্পষ্টতই আপনাকে অন্য কোনও নামে পুনরুদ্ধার করতে হবে এবং তারপরে একটি নাম অদলবদল করতে হবে। এই পদ্ধতির প্রায় লগ শিপিং সমতুল্য।
ব্রায়ান

0

বিদ্যমান উত্তরগুলির পরিপূরক করতে: 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অব্যাহতিপ্রাপ্ত, যেহেতু এটির পাথ এসকিউএল সার্ভারের প্রারম্ভিক বিকল্পগুলি দ্বারা নির্ধারিত হয় (উদাহরণস্বরূপ, বিশদগুলির জন্য এই উত্তরটি দেখুন)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.