یک اسکریپت پویا برای بازیابی پایگاه داده SQL Server از رویه ذخیره شده
با استفاده از اسکریپت SQL پویا یک روش ذخیره شده متمرکز ، عمومی و قابل استفاده مجدد ایجاد کنید که می تواند پایگاه داده ها را با استفاده از تعدادی پارامتر به عنوان بخشی از یک برنامه تعمیر و نگهداری گسترده بازیابی کند
روند
روند بازیابی یک پایگاه داده را می توان از SSMS نوشت. وقتی این مورد در یک روش ذخیره شده ذخیره می شود ، می تواند از طریق پردازنده یا سرورهای دیگر فراخوانی شود و به ویژه به عنوان بخشی از یک برنامه تعمیر و نگهداری مشترک مفید است.
در زیر ما دو اسکریپت ایجاد کرده ایم.
با اسکریپت ساده از کدی که از SSMS تولید شده استفاده کنید و محتوای Stored Procedure را جایگزین کنید.
با استفاده از اسکریپت عمومی ، می توان پایگاه داده های منفرد را با استفاده از متغیرها بازیابی کرد ، به این معنی که می توانید دوباره از آن استفاده کنید.
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
اسکریپت قابل استفاده مجدد
این اسکریپت از تعدادی پارامتر استفاده می کند تا بتواند از جاهای دیگر فراخوانی شود ، بنابراین در صورت لزوم می توان دوباره از آن استفاده کرد و cross server نامید.
- 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