it-swarm.asia

كيف أنقل ملفات قاعدة بيانات SQL Server؟

لدي قاعدة بيانات وأريد نقل .mdf و .ldf ملفات لموقع آخر. لكنني لا أريد إيقاف خدمة MSSQLSERVER ، ولا أريد التصدير إلى خادم آخر.

كيف يمكنني أن أفعل هذا؟

116
user2645263

لست مضطرًا لإيقاف خدمة SQL Server لنقل ملفات قاعدة البيانات ، ولكن عليك جعل قاعدة البيانات المحددة في وضع عدم الاتصال. هذا لأنه لا يمكنك نقل الملفات أثناء الوصول إليها ويؤدي إيقاف قاعدة البيانات دون اتصال إلى إيقاف استخدام الملفات من قبل تطبيق SQL Server.

عملية نقلها بسيطة إلى حد ما. تم وصف فصل/إرفاق بالفعل ، ولكنه ليس بهذا التعقيد تقريبًا.

تغيير مواقع الملفات ب 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;

نقل/نسخ الملفات إلى الموقع الجديد

ما عليك سوى نسخ الملفات باستخدام طريقتك المفضلة (انقر فوق 'n Drag و XCopy و Copy-Item و Robocopy)

إحضار قاعدة البيانات عبر الإنترنت

ALTER DATABASE foo SET ONLINE;

يمكنك رؤية هذا موضح بمزيد من التفاصيل هنا .

168
Mike Fal

ملفات MDF و LDF محمية ولا يمكن نقلها أثناء اتصال قاعدة البيانات.

إذا كنت لا تمانع في إيقاف عمل قاعدة البيانات ، فيمكنك DETACH ذلك ، ونقل الملفات ثم ATTACH.

  • انقر بزر الماوس الأيمن على اسم قاعدة البيانات
  • اختر Properties
  • انتقل إلى علامة التبويب Files
  • دوّن ملاحظة عن Path و FileName من MDF وملفات LDF هذه الخطوة مهمة في حال لم ترغب في البحث عن ملفات مفقودة ...
  • انقر بزر الماوس الأيمن على اسم قاعدة البيانات
  • تحديد Tasks -> Detach
  • انقل الملفات حيث تريد
  • انقر بزر الماوس الأيمن على العقدة Databases في الخادم
  • اختر Attach
  • انقر على زر Add
  • أشر إلى الموقع الجديد
  • انقر OK

يجب أن تكون بخير الآن. يمكن العثور على معلومات حول عملية DETACH - ATTACHهنا .

في الرابط عن DETACH - ATTACH هناك توصية باستخدام ALTER DATABASE العبارة في حالة الاحتفاظ بقاعدة البيانات على نفس مثيل SQL Server. المزيد من المرجع في نقل قواعد بيانات المستخدم .

إذا كنت ترغب في استمرار تشغيله أثناء الحركة ، فقم بإجراء BACKUP - RESTORE. في عملية الاستعادة ، يمكنك تحديد الموقع الجديد لملفات قاعدة البيانات.

53
Giannis Paraskevopoulos

لنقل ملفات قاعدة بيانات النظام اتبع الخطوات التالية:

  1. تسجيل الدخول كمستخدم sa في SSMS

  2. خذ نسخة احتياطية من قاعدة البيانات التي أنشأها المستخدم للسلامة.

  3. إنهاء جميع الجلسات المتصلة بالخادم من SSMS.

  4. نفّذ الأمر التالي للتحقق من موقع الملف الحالي لقواعد بيانات النظام:

    USE master;
    SELECT * FROM sys.master_files;

حدد المسار ولاحظ المسار الحالي للملفات.

  1. استخدم TSQL لتغيير مسار الملف لجميع قواعد البيانات باستثناء الرئيسية:

    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. في SSMS انقر بزر الماوس الأيمن على الخادم وحدد الخصائص. انتقل الخصائص الداخلية إلى إعدادات قاعدة البيانات. قم بتغيير المواقع الافتراضية لقاعدة البيانات للبيانات والسجل إلى مسار الوجهة. تسجيل الخروج من الخادم.

    مثال: غيّر C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\ إلى E:\projects\DataBaseFiles\MSSQL\DATA\

  2. قم بإيقاف مثيل SQL Server.

  3. انسخ الملف أو الملفات إلى الموقع الجديد. استخدم Robocopy لنقل الملفات من أجل نسخ أذونات الوصول إلى المجلد الوجهة. افتح cmd وقم بتشغيله كمسؤول واستخدم الأمر التالي:

    ملف robocopy/sec sourceFolder destinationFolder

من الأفضل الانتقال إلى موقع المصدر لتشغيل الأمر. حذف الملفات الأخرى غير ملفات قاعدة بيانات النظام التي يتم نسخها. على سبيل المثال:

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

(هنا نقوم بنقل جميع ملفات قاعدة بيانات النظام إلى موقع جديد.)

  1. من القائمة ابدأ ، أشر إلى كافة البرامج ، وأشر إلى Microsoft SQL Server ، وأشر إلى أدوات التكوين ، ثم انقر فوق إدارة تكوين SQL Server.

نفذ الخطوات التالية في إدارة تكوين SQL Server:

في العقدة SQL Server Services ، انقر بزر الماوس الأيمن فوق مثيل SQL Server (على سبيل المثال ، SQL Server (MSSQLSERVER)) واختر خصائص .. في مربع الحوار خصائص SQL Server (example_name) ، انقر فوق علامة التبويب معلمات بدء التشغيل. في المربع المعلمات الموجودة ، حدد المعلمة –d لنقل ملف البيانات الرئيسي. انقر فوق تحديث لحفظ التغيير. في المربع تحديد معلمة بدء التشغيل ، قم بتغيير المعلمة إلى المسار الجديد لقاعدة البيانات الرئيسية. في المربع المعلمات الموجودة ، حدد المعلمة –l لنقل ملف السجل الرئيسي. انقر فوق تحديث لحفظ التغيير. في المربع تحديد معلمة بدء التشغيل ، قم بتغيير المعلمة إلى المسار الجديد لقاعدة البيانات الرئيسية.

يجب أن تتبع قيمة المعلمة لملف البيانات المعلمة -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

إذا كان النقل المخطط لملف البيانات الرئيسي هو E:\SQLData ، فسيتم تغيير قيم المعلمات على النحو التالي:

-dE:\projects\DataBaseFiles\MSSQL\DATA\master.mdf
-lE:\projects\DataBaseFiles\MSSQL\DATA\mastlog.ldf

قم بإيقاف تشغيل مثيل SQL Server عن طريق النقر بزر الماوس الأيمن فوق اسم المثيل واختيار Stop. أعد تشغيل مثيل SQL Server.

  1. قم بتسجيل الدخول كمستخدم sa في SSMS وتحقق من موقع ملفات قاعدة البيانات بتنفيذ الاستعلام التالي:

    USE master;
    SELECT * FROM sys.master_files;

كله تمام.

6
abhay sreekumar

أنت تفعل خطوة بخطوة:

  1. أغلق كل الاتصال
    ALTER DATABASE MyDB SET SINGLE_USER with ROLLBACK IMMEDIATE

  2. تعيين قاعدة بيانات مع الحالة دون اتصال
    ALTER DATABASE MyDB SET OFFLINE

  3. إلى مسار جديد
    ALTER DATABASE MyDB MODIFY FILE (Name = MyDB، Filename = 'N:\DATA\MyDB.MDF')

  4. تعيين قاعدة بيانات بالحالة عبر الإنترنت
    ALTER DATABASE MyDB SET ONLINE

  5. تعيين مستخدم متعدد
    ALTER DATABASE MyDB SET MULTI_USER

3
Nguyễn Hải Đăng

توجد طريقة لنقل ملفات بيانات قاعدة البيانات (لست متأكدًا بعد إذا كانت هناك طريقة للقيام بذلك لملفات السجل) دون جعل قاعدة البيانات في وضع عدم الاتصال.

Dejan Nakarada-Kordic لديه شرح + نصوص لهذه الطريقة هنا: https://www.itprotoday.com/sql-server/ نقل-قاعدة بيانات-ملفات-بدون-أخذ-قاعدة بيانات-غير متصل

النسخة القصيرة هي أنك تضيف ملف قاعدة بيانات آخر في الموقع الجديد ، ثم تستخدم ملف تقليص DBCC ، مع خيار EMPTYFILE لنقل البيانات من الملف القديم إلى الملف الجديد. عندما يتم ذلك يمكنك إزالة ملف البيانات القديم.

ليس الحل الخاص بي ، كنت أبحث عن هذا الحل بنفسي ووجدته مفيدًا جدًا لبيئة الإنتاج لدينا.

ثورفين

3
Thorfinn Thomassen

اتبع الخطوات الأربع البسيطة التالية:

  1. افتح SSMS وحدد الخيار استعلام جديد من أعلى النافذة. ثم قم بنسخ الاستعلام التالي وتنفيذه للعثور على مسار قاعدة البيانات الذي نريد نقله إلى مسار جديد ولاحظ المسار الذي تعرضه في العمود CurrentLocation.

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

  1. انتقل الآن إلى هذا المسار ولاحظ اسم Database_Name.mdf & Database_Name_log.ldf الملفات. ثم قم بتنفيذ الاستعلامات التالية لنقل قاعدة البيانات إلى موقع محدد.

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 والتي يمكنك رؤيتها في Object Explorer (الجانب الأيسر).

    enter image description here

  2. ثم انقل كلا الملفين من المسار القديم إلى مسار جديد وابدأ تشغيل الخادم مرة أخرى بالنقر بزر الماوس الأيمن فوق Server_Name. تأكيد مسار جديد لقاعدة البيانات مرة أخرى تنفيذ استعلام الخطوة الأولى.

1
Karan Raiyani

لتكملة الإجابات الموجودة: إليك برنامج نصي لإنشاء عبارات 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 معفى ، حيث يتم تحديد مساره من خلال خيارات بدء تشغيل SQL Server (انظر ، على سبيل المثال ، هذه الإجابة للحصول على التفاصيل).

1
Heinzi

لست متأكدًا من أن هذه هي أفضل طريقة (أرحب بأي تعليقات تخبرني كيف هي ليست كذلك) ، ولكنها بسيطة جدًا (وسريعة إذا كان لديك قاعدة بيانات صغيرة):

أولاً ، قم بنسخ قاعدة البيانات احتياطيًا إلى ملف .bak. بعد ذلك ، قم باستعادة قاعدة البيانات من نفس ملف .bak ، واختيار موقع الملف الجديد .mdf و .ldf ضمن خيارات الملف لمهمة الاستعادة.

لن أفعل ذلك في بيئة الإنتاج في نافذة الصيانة ، حيث لا يمكنك الوصول إلى قاعدة البيانات أثناء الاستعادة. الطرق الأخرى التي رأيتها أعلاه سيكون لها عيوب مماثلة بالرغم من ذلك. بعد الانتهاء من مهمة الاستعادة ، لن تضطر إلى حذف الملف القديم. يتم ذلك تلقائيًا.

0
Ali