تغيير اسم قاعدة البيانات في SQL Server + إعادة تسمية ملفات MDF و LDF (بدون فقد بيانات)
الدليل ده مرتب بخطوات عملية من البداية للنهاية لتغيير اسم قاعدة البيانات من Recovered_Recovered_ZAD إلى ZAD، ثم تغيير أسماء الملفات المنطقية (Logical Names) وأسماء ملفات .mdf / .ldf داخل نفس المسار: E:\Hamed\Data.
قبل ما تبدأ مهم
- ✅ يفضّل تعمل Backup للقاعدة (احتياطي).
- ✅ لازم تكون فاتح SSMS بصلاحيات Admin (أو مستخدم له صلاحيات ALTER DATABASE).
- ✅ خطوات تعديل Logical Names والمسارات لازم تتم والقاعدة Online.
- ✅ تغيير أسماء ملفات MDF/LDF في الويندوز لازم يتم والقاعدة Offline.
الخطوة 1: عرض معلومات الملفات الحالية تأكد
الاستعلام ده يطلع لك الاسم المنطقي والمسار الحالي للـ MDF/LDF.
SELECT name AS logical_name, physical_name FROM sys.master_files WHERE database_id = DB_ID(N'Recovered_Recovered_ZAD');
الخطوة 2: تغيير اسم قاعدة البيانات على السيرفر Server Rename
ده يغيّر اسم القاعدة داخل SQL Server من Recovered_Recovered_ZAD إلى ZAD.
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
عشان نعدل أسماء الملفات المنطقية والمسارات بدون تعارض اتصالات.
ALTER DATABASE [ZAD] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
الخطوة 4: تغيير أسماء Logical Names Logical
هنغيّر:
Recovered_Recovered_ZAD ➜ ZAD
Recovered_Recovered_ZAD_log ➜ ZAD_log
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: “من النهاردة دور على الملفات بالأسماء الجديدة” (لسه هنغيرها فعليًا بعد شوية).
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: جعل القاعدة Offline قبل تعديل ملفات الويندوز Offline
لازم القاعدة تكون Offline عشان تقدر تعيد تسمية ملفات MDF/LDF.
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
الخطوة 8: رجّع القاعدة Online ثم Multi User Finish
بعد ما تغيّر أسماء الملفات على الهارد، نفّذ التالي:
ALTER DATABASE [ZAD] SET ONLINE; ALTER DATABASE [ZAD] SET MULTI_USER;
الخطوة 9: تأكيد نهائي Verification
الاستعلام ده لازم يطلع لك الملفات بالأسماء الجديدة:
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.
/*==========================================================
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');
إرسال تعليق