برنامج نصي ديناميكي لاستعادة قاعدة بيانات SQL Server من إجراء مخزن
إنشاء إجراء مخزن مركزي ، عام وقابل لإعادة الاستخدام باستخدام برنامج نصي SQL ديناميكي يمكنه استعادة قواعد البيانات باستخدام عدد من المعلمات كجزء من خطة صيانة أوسع
معالجة
يمكن كتابة عملية استعادة قاعدة البيانات من SSMS. عندما يتم حفظ هذا في إجراء مخزن ، يمكن استدعاؤه من خوادم معالجة أو خوادم أخرى ، ويكون مفيدًا بشكل خاص كجزء من خطة صيانة مرتبطة.
أدناه قمنا بإنشاء نصين.
باستخدام البرنامج النصي البسيط ، استخدم الكود الذي تم إنشاؤه من SSMS واستبدل محتوى الإجراء المخزن.
باستخدام البرنامج النصي العام ، يمكن استعادة قواعد البيانات الفردية باستخدام المتغيرات ، مما يعني أنه يمكنك إعادة استخدامها.
Simple Script
USE [utilities]GOCREATE PROC [maint].RestoreDatabase_{dbname} AS BEGINRESTORE DATABASE [dbname] FROM DISK=N'c:\backupfolder\{dbname}.bak' WITH FILE= 1,MOVE N'{dbname}' TO N'd:\database\{dbname}.mdf',MOVE N'{dbname}_log' TO N'e:\database\{dbname}.ldf',NOUNLOAD, REPLACE, STATS= 10,STANDBY=N'e:\database\ROLLBACK_UNDO_{dbname}.bak'ENDGO
نص قابل لإعادة الاستخدام
يستخدم هذا البرنامج النصي عددًا من المعلمات لتمكين استدعاؤه من مكان آخر ، لذلك يمكن إعادة استخدامه وتسميته عبر الخادم إذا لزم الأمر.
- dbname - اسم قاعدة البيانات التي تريد استدعاؤها
- Directory_Bak - المجلد حيث يتم تخزين النسخ الاحتياطية
- Directory_Dat - من الأفضل الاحتفاظ بملفات السجل وملفات قاعدة البيانات على أقراص مختلفة ، لذلك هذا هو الدليل الذي تريد تخزينه عليه
- Directory_Log - كما هو مذكور أعلاه ، استخدم دليلاً منفصلاً لملف السجل الخاص بك
- Directory_Stand - تم تطوير هذا مع وضع شحن السجل في الاعتبار ، لذلك يمكن استخدام هذا لإجراء استعادة من قاعدة البيانات الرئيسية إلى قاعدة بيانات التقارير
SQL
USE [utilities]GOCREATE PROC [maint].RestoreDatabase(@dbname NVARCHAR(100),@Directory_Bak NVARCHAR(100),@Directory_Dat NVARCHAR(100),@Directory_Log NVARCHAR(100),@Directory_Stand BIT) AS BEGINDECLARE @SQL NVARCHAR(MAX)='RESTORE DATABASE ['+@dbname+'] FROM DISK=N'''+@Directory_Bak+''+@dbname+'.bak'' WITH FILE= 1,MOVE N'''+@dbname+''' TO N'''+@Directory_Dat+@dbname+'.mdf'',MOVE N'''+@dbname+'_log'' TO N'''+@Directory_Log+@dbname+'.ldf'',NOUNLOAD, REPLACE, STATS=10'--Standby CodeIF ISNULL(@Directory_Bak,'')<>''SET @SQL=@SQL+',STANDBY=N'''+@Directory_Stand+'ROLLBACK_UNDO_'+@dbname+'.bak'''EXEC master..sp_executesql @SQLENDGO