تغيير اسم قاعدة البيانات في SQL Server بدون التأثير على البيانات

تغيير اسم قاعدة البيانات في SQL Server + إعادة تسمية ملفات MDF و LDF (بدون فقد بيانات)

الدليل ده مرتب بخطوات عملية من البداية للنهاية لتغيير اسم قاعدة البيانات من Recovered_Recovered_ZAD إلى ZAD، ثم تغيير أسماء الملفات المنطقية (Logical Names) وأسماء ملفات .mdf / .ldf داخل نفس المسار: E:\Hamed\Data.

تغيير اسم قاعدة البيانات في SQL Server

قبل ما تبدأ مهم

  • ✅ يفضّل تعمل Backup للقاعدة (احتياطي).
  • ✅ لازم تكون فاتح SSMS بصلاحيات Admin (أو مستخدم له صلاحيات ALTER DATABASE).
  • ✅ خطوات تعديل Logical Names والمسارات لازم تتم والقاعدة Online.
  • ✅ تغيير أسماء ملفات MDF/LDF في الويندوز لازم يتم والقاعدة Offline.
ملحوظة: T-SQL لا يقدر يغيّر اسم الملفات على الهارد مباشرة، لذلك هنغيّر “توقع SQL Server” لمسار/اسم الملف أولاً، ثم نغيّر اسم الملف فعليًا من الويندوز.

الخطوة 1: عرض معلومات الملفات الحالية تأكد

الاستعلام ده يطلع لك الاسم المنطقي والمسار الحالي للـ MDF/LDF.

T-SQL
SELECT name AS logical_name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID(N'Recovered_Recovered_ZAD');
لو القاعدة اتغير اسمها مسبقًا، استخدم DB_ID(N'ZAD') بدل الاسم القديم.

الخطوة 2: تغيير اسم قاعدة البيانات على السيرفر Server Rename

ده يغيّر اسم القاعدة داخل SQL Server من Recovered_Recovered_ZAD إلى ZAD.

T-SQL
ALTER DATABASE [Recovered_Recovered_ZAD] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [Recovered_Recovered_ZAD] MODIFY NAME = [ZAD];
ALTER DATABASE [ZAD] SET MULTI_USER;

الخطوة 3: تحويل القاعدة إلى Single User (وهي Online) Safe Mode

عشان نعدل أسماء الملفات المنطقية والمسارات بدون تعارض اتصالات.

T-SQL
ALTER DATABASE [ZAD] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

الخطوة 4: تغيير أسماء Logical Names Logical

هنغيّر:

Recovered_Recovered_ZAD ➜ ZAD
Recovered_Recovered_ZAD_log ➜ ZAD_log

T-SQL
ALTER DATABASE [ZAD] MODIFY FILE (NAME = N'Recovered_Recovered_ZAD',     NEWNAME = N'ZAD');
ALTER DATABASE [ZAD] MODIFY FILE (NAME = N'Recovered_Recovered_ZAD_log', NEWNAME = N'ZAD_log');

الخطوة 5: تحديث أسماء/مسارات ملفات MDF/LDF داخل SQL Server Metadata

هنا بنقول لـ SQL Server: “من النهاردة دور على الملفات بالأسماء الجديدة” (لسه هنغيرها فعليًا بعد شوية).

T-SQL
ALTER DATABASE [ZAD]
MODIFY FILE (NAME = N'ZAD', FILENAME = N'E:\Hamed\Data\ZAD.mdf');

ALTER DATABASE [ZAD]
MODIFY FILE (NAME = N'ZAD_log', FILENAME = N'E:\Hamed\Data\ZAD_log.ldf');
تنبيه: لا تغيّر مسار الدرايف إلا لو متأكد من صلاحيات خدمة SQL Server على الفولدر الجديد.

الخطوة 6: جعل القاعدة Offline قبل تعديل ملفات الويندوز Offline

لازم القاعدة تكون Offline عشان تقدر تعيد تسمية ملفات MDF/LDF.

T-SQL
ALTER DATABASE [ZAD] SET OFFLINE WITH ROLLBACK IMMEDIATE;

الخطوة 7: إعادة تسمية الملفات من الويندوز Windows

اذهب إلى المسار: E:\Hamed\Data\ ثم غيّر أسماء الملفات:

  • Recovered_Recovered_ZAD.mdf ZAD.mdf
  • Recovered_Recovered_ZAD_log.ldf ZAD_log.ldf
مهم: لو لقيت الملفات “مقفولة” أو مش راضي يغيّر الاسم، تأكد إن القاعدة Offline فعلًا.

الخطوة 8: رجّع القاعدة Online ثم Multi User Finish

بعد ما تغيّر أسماء الملفات على الهارد، نفّذ التالي:

T-SQL
ALTER DATABASE [ZAD] SET ONLINE;
ALTER DATABASE [ZAD] SET MULTI_USER;

الخطوة 9: تأكيد نهائي Verification

الاستعلام ده لازم يطلع لك الملفات بالأسماء الجديدة:

T-SQL
SELECT name AS logical_name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID(N'ZAD');
النتيجة المتوقعة:
ZAD → E:\Hamed\Data\ZAD.mdf
ZAD_log → E:\Hamed\Data\ZAD_log.ldf

السكريبت النهائي (يُنفّذ خطوة بخطوة) Copy & Run

السكربت التالي مُقسّم إلى خطوات واضحة (STEP 1 إلى STEP 8 + تحقق نهائي). لا تشغّله مرة واحدة دفعة واحدة؛ نفّذه خطوة بخطوة كما هو مُرتّب. لاحظ أن الخطوة (7) تتم يدويًا من الويندوز لإعادة تسمية ملفات MDF/LDF.

نصيحة سريعة: بعد كل خطوة نفّذ الاستعلامات الخاصة بالتأكد (BEFORE/AFTER) لو احتجت، وتأكد أن القاعدة Online في الخطوات (3-5)، وOffline في الخطوة (6) قبل إعادة تسمية الملفات.
T-SQL Script
/*==========================================================
  Script: Rename DB + Logical File Names + Physical MDF/LDF
  Old DB Name : Recovered_Recovered_ZAD
  New DB Name : ZAD

  Current files (before rename):
   - E:\Hamed\Data\Recovered_Recovered_ZAD.mdf
   - E:\Hamed\Data\Recovered_Recovered_ZAD_log.ldf

  Goal (after rename):
   - DB name: ZAD
   - Logical names: ZAD , ZAD_log
   - Physical files:
       E:\Hamed\Data\ZAD.mdf
       E:\Hamed\Data\ZAD_log.ldf
==========================================================*/

------------------------------------------------------------
-- (0) Optional: Show current logical/physical names before
------------------------------------------------------------
PRINT '--- BEFORE ---';
SELECT name AS logical_name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID(N'Recovered_Recovered_ZAD');

------------------------------------------------------------
-- (1) Rename Database on SQL Server (Recovered... -> ZAD)  - إعادة تسمية قاعدة البيانات على خادم SQL
--     This does NOT change MDF/LDF file names yet. - هذا لا يغير أسماء ملفات MDF/LDF حتى الآن.
------------------------------------------------------------
PRINT '--- STEP 1: Rename database ---';

-- Close connections and force rollback - أغلق الاتصالات وأجبر على التراجع
ALTER DATABASE [Recovered_Recovered_ZAD] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

-- Rename DB
ALTER DATABASE [Recovered_Recovered_ZAD] MODIFY NAME = [ZAD];

-- Return to multi-user (we will switch again later) - العودة إلى وضع المستخدمين المتعددين (سنقوم بالتبديل مرة أخرى لاحقاً)
ALTER DATABASE [ZAD] SET MULTI_USER;

------------------------------------------------------------
-- (2) Confirm DB exists as ZAD and get current file info - تأكد من وجود قاعدة البيانات باسم ZAD واحصل على معلومات الملف الحالي
------------------------------------------------------------
PRINT '--- STEP 2: Confirm current file info for ZAD ---';
SELECT name AS logical_name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID(N'ZAD');

------------------------------------------------------------
-- (3) Put DB in SINGLE_USER (ONLINE) to safely change metadata - ضع قاعدة البيانات في وضع المستخدم الفردي (عبر الإنترنت) لتغيير البيانات الوصفية بأمان
------------------------------------------------------------
PRINT '--- STEP 3: Set SINGLE_USER (ONLINE) ---';
ALTER DATABASE [ZAD] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

------------------------------------------------------------
-- (4) Rename Logical File Names (still ONLINE) - إعادة تسمية أسماء الملفات المنطقية (لا يزال متاحًا عبر الإنترنت)
--     From:
--       Recovered_Recovered_ZAD      -> ZAD
--       Recovered_Recovered_ZAD_log  -> ZAD_log
------------------------------------------------------------
PRINT '--- STEP 4: Rename logical file names ---';
ALTER DATABASE [ZAD] MODIFY FILE (NAME = N'Recovered_Recovered_ZAD',     NEWNAME = N'ZAD');
ALTER DATABASE [ZAD] MODIFY FILE (NAME = N'Recovered_Recovered_ZAD_log', NEWNAME = N'ZAD_log');

------------------------------------------------------------
-- (5) Tell SQL Server the NEW physical file names/paths (ONLINE) - إبلاغ خادم SQL بأسماء/مسارات الملفات الفعلية الجديدة (عبر الإنترنت)
--     NOTE: The files are NOT renamed on disk yet.  - ملاحظة: لم يتم تغيير أسماء الملفات على القرص بعد.
--           We are only updating SQL metadata so it expects the new names.  - نقوم فقط بتحديث بيانات تعريف SQL، لذا فهو يتوقع الأسماء الجديدة.
------------------------------------------------------------
PRINT '--- STEP 5: Update physical file paths in SQL metadata ---';
ALTER DATABASE [ZAD]
MODIFY FILE (NAME = N'ZAD',     FILENAME = N'E:\Hamed\Data\ZAD.mdf');

ALTER DATABASE [ZAD]
MODIFY FILE (NAME = N'ZAD_log', FILENAME = N'E:\Hamed\Data\ZAD_log.ldf');

------------------------------------------------------------
-- (6) Take DB OFFLINE (required before renaming files on disk)  قم بإيقاف تشغيل قاعدة البيانات (مطلوب قبل إعادة تسمية الملفات على القرص)
------------------------------------------------------------
PRINT '--- STEP 6: Set OFFLINE (now rename files in Windows) ---';
ALTER DATABASE [ZAD] SET OFFLINE WITH ROLLBACK IMMEDIATE;

------------------------------------------------------------
/*
  (7) MANUAL STEP (WINDOWS):   الخطوة اليدوية (ويندوز):
      Go to folder: انتقل إلى المجلد
         E:\Hamed\Data\

      Rename files:  أعد تسمية الملفات
         Recovered_Recovered_ZAD.mdf      -->  ZAD.mdf
         Recovered_Recovered_ZAD_log.ldf  -->  ZAD_log.ldf

      After renaming the files, come back and run STEP 8.  بعد إعادة تسمية الملفات، ارجع ونفّذ الخطوة 8.
*/
------------------------------------------------------------

------------------------------------------------------------
-- (8) Bring DB ONLINE and return MULTI_USER - قم بتشغيل قاعدة البيانات عبر الإنترنت وأرجع MULTI_USER
------------------------------------------------------------
PRINT '--- STEP 8: Set ONLINE + MULTI_USER ---';
ALTER DATABASE [ZAD] SET ONLINE;
ALTER DATABASE [ZAD] SET MULTI_USER;

------------------------------------------------------------
-- (9) FINAL CHECK: show final logical + physical names - التدقيق النهائي: عرض الأسماء المنطقية والفعلية النهائية
------------------------------------------------------------
PRINT '--- AFTER ---';
SELECT name AS logical_name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID(N'ZAD');
✅ بعد نسخ السكربت وتشغيله، تأكد أن أسماء الملفات على الهارد بقت: E:\Hamed\Data\ZAD.mdf و E:\Hamed\Data\ZAD_log.ldf.

comments

أحدث أقدم