السلام عليكم
هل يمكن عمل Backup و Restore
كامل للسيرفر بجميع قواعد البيانات الموجودة عليه
و ذلك عن طرق خطوة واحدة فقط
بمعني عمل Backup لجميع قواعد البيانات الموجودة علي السيرفر في ملف واحد مع امكانية عمل Restore لهذا الملف
ارجوا سرعة الرد
السلام عليكم
هل يمكن عمل Backup و Restore
كامل للسيرفر بجميع قواعد البيانات الموجودة عليه
و ذلك عن طرق خطوة واحدة فقط
بمعني عمل Backup لجميع قواعد البيانات الموجودة علي السيرفر في ملف واحد مع امكانية عمل Restore لهذا الملف
ارجوا سرعة الرد
أعتقد أن هذا اللينك فيه ما تريده
http://msdn.microsoft.com/library/?url=/li..._ba-bz_35ww.asp
يا حى يا قيوم برحمتك أستغيث اصلح لى شأنى كله ولا تكلنى إلى نفسى طرفة عين
اللهم أعنا على ذكرك وشكرك وحسن عبادتك
اللهم انك عفو كريم حليم تحب العفو فاعفو عنا
اللهم إنى أسألك رضاك والجنة وأعوذ بك من سخطك والنار
اللهم إرحمنا فوق الأرض وإرحمنا تحت الأرض وإرحمنا وإعتق رقابنا يوم العرض
اللهم لا تدع لنا ذنبًا إلا غفرته ولا همًا إلا فرجته ولا مريضًا ولا دينًا إلا قضيته ولا عيبا إلا سترته ولا حاجًا هى لك رضا إلا قضيتها
اللهم انى أسألك موجبات رحمتك وعزائم مغفرتك والسلامة من كل إثم والغنيمة من كل بر والفوز بالجنة و النجاة من النار اللهم أمين يا رب العالمين
اعتقد انه لا يمكن ذلك باستخدام الادوات الاساسية الموجودة داخل الsQL Server (ربما يكون هنالك اداة اضافية من شركة اخرى غير مايكروسوفت تقوم بذلك )الا اذا عملت Script و لكن تكون كل قاعدة بيانات لها ملف خاص بها في الBackup و الله اعلم
انظر هذه الاداة
اشكر الاخت enjyshahin علي هذا الرد
لكن هذه الطريقة تقوم بعمل ملف لكل قاعدة بيانات لكني اريد
عمل Backup لجميع قواعد البيانات الموجودة علي السيرفر في ملف واحد مع امكانية عمل Restore لهذا الملف
ايضا اشكر الاخ AbuZakaria
اعتقد ان هذه الاداة قوية وسوف اقوم بتجربتها إن شاء الله
لكنها ايضا كما اعتقد لا تقوم بالوظيفة التي اريدها
علي اي حال اشكركم جميعا علي تعاونكم معي
:)
جرب هذا السكريبت
sp_msforeachdb 'Backup database ? to disk = ''C:\ServerBackup'' with Name= ''?'''
عند عمل ريستور من ال enterprise manager بعد اختيار الملف اضغط View contents لاستعادة قاعدة البيانات التي تريدها
تم تعديل هذه المشاركة بواسطة IUnknown في 20 مايو 2006 في 16:01
ما شاء الله عليك
اشكرك اخ IUnknown علي هذا الاستجابة
هذه الامر في غاية القوة في حال عمل backup
لكن هل من طريقه لعمل Restore بشكل مشابه
دون تحديد اسماء قواعد البيانات
ملحوظة علي الكود الخاص بك اخ IUnknown
EXEC sp_MSforeachdb
'IF N''?'' NOT IN(''tempdb'', ''distribution'', ''Northwind'', ''pubs'')
BEGIN
DECLARE @sql varchar(1000);
set @sql = ''BACKUP DATABASE '' + (''?'') + '' TO DISK =
''''D:\MSSQL2000\MSSQL\BACKUP'' + (''?'') + ''.bak'''' WITH INIT''
EXEC (@sql)
END'ملحوظة وجدت ايضا اثناء بحثي بإحدي المواقع الاجنبية
هذا الكود يقوم بعمل لووب علي جميع قواعد البيانات الموجودة علي السيرفر و عمل Backup لكل قاعدة
مع إضافة تاريخ عمل الـ Backup الي اسم الملف
وضعتها فقط لكي يستفيد الجميع
هذا الكود
set quoted_identifier off
declare @query varchar(1000)
declare @path varchar(100)
declare @dbname varchar(128)
set @path ='c:\backup\'
declare DBcursor cursor for select name from sysdatabases where name not in ('master','msdb','tempdb','model')
open DBCursor
Fetch DBCursor into @dbname
while @@fetch_status = 0
begin
set @query = 'backup database ' + @dbname+ ' to disk="' +@path+ @DBname+ '-'+replace(replace(convert (varchar(22),getdate(),120),':','-'),' ','-')+ '.bak" with init'
print @query
exec (@query)
Fetch DBCursor into @dbname
end
close DBCursor
deallocate DBCursorتم تعديل هذه المشاركة بواسطة adel_elgo في 20 مايو 2006 في 18:11
بعد البحث وصلت الي ما يلي
الكود الخاص بالـ Backup الذي تفضل بوضعه الاخ IUnknown
وهو يعمل بشكل ممتاز
sp_msforeachdb 'Backup database ? to disk = ''C:\ServerBackup'' with Name= ''?'''
الكود الخاص بعمل Restore لهذا الملف
حيث وجدت بعض الاكواد علي احدي المواقع فقمت بتعديله لكي يناسب
الوظيفة التي اريدها من اجله
لكنه لا يعمل بشكل جيد :wacko:
لذلك ارجوا من الاخوة الاعضاء
ممن لديه اي ملاحظة علي هذا الكود فلا يبخل علينا بها
ALTER PROC sp_RestoreFromAllFilesInDirectory
@SourceDirBackupFiles nvarchar(200), @DestDirDbFiles nvarchar(200)
AS
CREATE TABLE #bdev(
BackupName nvarchar(128),
BackupDescription nvarchar(255),
BackupType smallint,
ExpirationDate datetime,
Compressed tinyint,
Position smallint,
DeviceType tinyint,
UserName nvarchar(128),
ServerName nvarchar(128),
DatabaseName nvarchar(128),
DatabaseVersion int,
DatabaseCreationDate datetime,
BackupSize numeric(20,0),
FirstLSN numeric(25,0),
LastLSN numeric(25,0),
CheckpointLSN numeric(25,0),
DatabaseBackupLSN numeric(25,0),
BackupStartDate datetime,
BackupFinishDate datetime,
SortOrder smallint,
CodePage smallint,
UnicodeLocaleId int,
UnicodeComparisonStyle int,
CompatibilityLevel tinyint,
SoftwareVendorId int,
SoftwareVersionMajor int,
SoftwareVersionMinor int,
SoftwareVersionBuild int,
MachineName nvarchar(128),
Flags int,
BindingID uniqueidentifier,
RecoveryForkID uniqueidentifier,
Collation nvarchar(128))
DECLARE @DbName sysname
DECLARE @sql nvarchar(1000)
INSERT #bdev
EXEC('RESTORE HEADERONLY FROM DISK = ''' + @SourceDirBackupFiles + '''')
DECLARE qqq CURSOR FOR
SELECT DatabaseName FROM #bdev
OPEN qqq
FETCH NEXT FROM qqq INTO @DbName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'RESTORE DATABASE ' + @DbName + ' FROM DISK = ''' + @DestDirDbFiles + ''' WITH MOVE '
end
CLOSE qqq
DEALLOCATE qqq
GOو للإستدعاء البروسيديور
exec sp_RestoreFromAllFilesInDirectory 'c:\ServerBackup', 'c:\2\'
ملحوظة
'c:\ServerBackup' هو مسار ملف الـ Backup
'c:\2\' هو المسار الذي سيتم تخزين قاعدة البيانات به
تم تعديل هذه المشاركة بواسطة adel_elgo في 21 مايو 2006 في 08:57
الاخ العزيز
مرفق كود الاسترجاعز قد يكون معقدا بعض الشيئ ولكنه يفي بالغرض
سأترك لك مهمة استثناء قواعد بيانات النظام ;)
Set NOCOUNT ON /* backup devices*/
CREATE TABLE #bdev(BackupName nvarchar(128),BackupDescription nvarchar(255),BackupType smallint,ExpirationDate datetime,Compressed tinyint,Position smallint,DeviceType tinyint,UserName nvarchar(128),ServerName nvarchar(128),DatabaseName nvarchar(128),DatabaseVersion int,DatabaseCreationDate datetime,BackupSize numeric(20,0),FirstLSN numeric(25,0),LastLSN numeric(25,0),CheckpointLSN numeric(25,0),DatabaseBackupLSN numeric(25,0),BackupStartDate datetime,BackupFinishDate datetime,SortOrder smallint,CodePage smallint,UnicodeLocaleId int,UnicodeComparisonStyle int,CompatibilityLevel tinyint,SoftwareVendorId int,SoftwareVersionMajor int,SoftwareVersionMinor int,SoftwareVersionBuild int,MachineName nvarchar(128),Flags int,BindingID uniqueidentifier,RecoveryForkID uniqueidentifier,Collation nvarchar(128))
/*data files and log files*/
CREATE TABLE #dbfiles(LogicalName nvarchar(128),PhysicalName nvarchar(260),Type char(1),FileGroupName nvarchar(128),Size numeric(20,0),MaxSize numeric(20,0))
declare @dirfile varchar(1000)
declare @sql varchar(1000)
declare @tmpsql varchar(1000)
declare @DbName varchar(128)
declare @LogicalName varchar(128)
declare @PhysicalName varchar(260)
declare @pos smallint
declare @type char(1)
declare @fname varchar(1000)
declare @DestDirDbFiles varchar(260)
set @dirfile='c:\ServerBackup'
set @DestDirDbFiles ='C:\Program Files\Microsoft SQL Server\MSSQL\Data'
--Get database name from RESTORE HEADERONLY
INSERT #bdev
EXEC('RESTORE HEADERONLY FROM DISK = ''' + @dirfile + '''')
declare curDBs cursor for SELECT DatabaseName,Position FROM #bdev open curDBs
fetch next from curDBs into @DbName ,@pos
while @@fetch_status = 0
begin SET @sql = 'RESTORE DATABASE ' + @DbName + ' FROM DISK = ''' + @dirfile + ''' WITH MOVE '
--Get information about database files from backup device into temp table
TRUNCATE TABLE #dbfiles
set @tmpsql = 'RESTORE FILELISTONLY FROM DISK = ''' + @dirfile + ''' with File =' + cast(@pos as varchar(3))+ ''
INSERT #dbfiles EXEC( @tmpsql )
declare dbfiles cursor for select LogicalName, PhysicalName, type from #dbfiles OPEN dbfiles
FETCH NEXT FROM dbfiles INTO @LogicalName, @PhysicalName, @type
--For each database file that the database uses
WHILE @@FETCH_STATUS = 0
BEGIN SET @sql = @sql + '''' + @LogicalName + ''' TO ''' + @DestDirDbFiles + '\' + @LogicalName
IF @type = 'D'
SET @sql = @sql + '.mdf'', MOVE '
ELSE IF @type = 'L'
SET @sql = @sql + '.ldf'''
FETCH NEXT FROM dbfiles INTO @LogicalName, @PhysicalName, @type
END
--Here's the actual RESTORE command
PRINT @sql
--Remove the comment below if you want the procedure to actually execute the restore command.
--EXEC(@sql)
CLOSE dbfiles
DEALLOCATE dbfiles
fetch next from curDBs into @DbName ,@pos
end
close curDBs
deallocate curDBs
drop table #dbfiles
drop table #bdevتم التعديل ليلائم طلبك
تم تعديل هذه المشاركة بواسطة IUnknown في 21 مايو 2006 في 09:20
اخي IUnknown
عندما اقوم بعمل Backup بواسطة
sp_msforeachdb 'Backup database ? to disk = ''C:\ServerBackup'' with Name= ''?'''
ثم اقوم بعمل Restore بواسطة الكود الموجود في المشاركة رقم 8
يعطيني الكثير من الاخطاء
علما بانني قمت بتعديل الجزء الخاص بإستعاد قواعد النظام
وذلك كما يلي
IF @DbName NOT IN('tempdb', 'distribution', 'Northwind', 'pubs', 'master', 'model', 'msdb')
BEGIN PRINT @sql
EXEC(@sql)
ENDتم تعديل هذه المشاركة بواسطة adel_elgo في 21 مايو 2006 في 12:29
الأخ عادل؛
هل من الممكن عمل if بدلا من in
ارجو ارسال الأخطاء حتى استطيع معاجتها
اخ IUnknown
قمت بعمل عدد 2 قاعدة بيانات و هما Test1 و Test2
قمت بعمل Backup
ثم قمت بتنفيذ كود الـ Restore
و ذلك بعد حذف قواعد البيانات من سيرفر
فاعطاني هذه الخطأ
RESTORE DATABASE test1 FROM DISK = 'c:\ServerBackup' WITH MOVE 'test1_Data' TO 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\test1_Data.mdf', MOVE 'test1_Log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\test1_Log.ldf' Server: Msg 3234, Level 16, State 2, Line 1 Logical file 'test1_Data' is not part of database 'test1'. Use RESTORE FILELISTONLY to list the logical file names. Server: Msg 3013, Level 16, State 1, Line 1 RESTORE DATABASE is terminating abnormally. RESTORE DATABASE test2 FROM DISK = 'c:\ServerBackup' WITH MOVE 'test2_Data' TO 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\test2_Data.mdf', MOVE 'test2_Log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\test2_Log.ldf' Server: Msg 3234, Level 16, State 2, Line 1 Logical file 'test2_Data' is not part of database 'test2'. Use RESTORE FILELISTONLY to list the logical file names. Server: Msg 3013, Level 16, State 1, Line 1 RESTORE DATABASE is terminating abnormally.
تم تعديل هذه المشاركة بواسطة adel_elgo في 21 مايو 2006 في 16:59
الأخ عادل
الكود الذي ارفقته في البدايه ليس 100% bullet prooft اي انه يجب ان يحتوي على العديد من الـ Validations والتي لا يتسع المجال لذكرها
مثلا هل انت متأكد ان المسار D:\Program Files\Microsoft SQL Server\MSSQL\Data\ l موجود
اخي العزيز شكرا علي تواصلك معي :)
اقتباسالكود الذي ارفقته في البدايه ليس 100% bullet prooft اي انه يجب ان يحتوي على العديد من الـ Validations والتي لا يتسع المجال لذكرهامثلا هل انت متأكد ان المسار D:\Program Files\Microsoft SQL Server\MSSQL\Data\ l موجود
نعم انا متاكد من هذا المسار
لا شكر على واجب يا أخي
عموما لقد أدركت الخطأ
في جمله الاسترجاع لم احدد رقم الملف (رقم قاعدة البيانات داخل ملف الحفظ الاحتياطي)
add this statement
with File = cast(@pos as varchar(3))
اسف لعدم الكتابة بالكامل فسوف اغادر الآن
اراك غدا
تم تعديل هذه المشاركة بواسطة IUnknown في 21 مايو 2006 في 18:17
اخ IUnknown
انا لا اعرف ماذا قول لكي اشكرك علي تعاونك معي بصرف النظر عن ان هناك اي اخطاء ام لا
سعدت جدا بتواصلك معي :)
إشتغلت (h)
بفضل الله اولا ثم الاخ IUnknown
لذلك سأقوم بتلخيص الموضوع في نقطتين
الاولي - عمل Backup لجميع قواعد البيانات الموجودة علي السيرفر
sp_msforeachdb 'Backup database ? to disk = ''C:\ServerBackup'' with Name= ''?'''
الثانية - عمل Restore لذلك الملف الموجود علي المسار ''C:\ServerBackup''
طبعا بعد حذف قواعد البيانات التي تم إنشائها علي السيرفر
Set NOCOUNT ON /* backup devices*/
CREATE TABLE #bdev(BackupName nvarchar(128),BackupDescription nvarchar(255),BackupType smallint,ExpirationDate datetime,Compressed tinyint,Position smallint,DeviceType tinyint,UserName nvarchar(128),ServerName nvarchar(128),DatabaseName nvarchar(128),DatabaseVersion int,DatabaseCreationDate datetime,BackupSize numeric(20,0),FirstLSN numeric(25,0),LastLSN numeric(25,0),CheckpointLSN numeric(25,0),DatabaseBackupLSN numeric(25,0),BackupStartDate datetime,BackupFinishDate datetime,SortOrder smallint,CodePage smallint,UnicodeLocaleId int,UnicodeComparisonStyle int,CompatibilityLevel tinyint,SoftwareVendorId int,SoftwareVersionMajor int,SoftwareVersionMinor int,SoftwareVersionBuild int,MachineName nvarchar(128),Flags int,BindingID uniqueidentifier,RecoveryForkID uniqueidentifier,Collation nvarchar(128))
/*data files and log files*/
CREATE TABLE #dbfiles(LogicalName nvarchar(128),PhysicalName nvarchar(260),Type char(1),FileGroupName nvarchar(128),Size numeric(20,0),MaxSize numeric(20,0))
declare @dirfile varchar(1000)
declare @sql varchar(1000)
declare @tmpsql varchar(1000)
declare @DbName varchar(128)
declare @LogicalName varchar(128)
declare @PhysicalName varchar(260)
declare @pos smallint
declare @type char(1)
declare @fname varchar(1000)
declare @DestDirDbFiles varchar(260)
set @dirfile='c:\ServerBackup'
set @DestDirDbFiles ='D:\Program Files\Microsoft SQL Server\MSSQL\Data'
--Get database name from RESTORE HEADERONLY
INSERT #bdev
EXEC('RESTORE HEADERONLY FROM DISK = ''' + @dirfile + '''')
declare curDBs cursor for SELECT DatabaseName,Position FROM #bdev open curDBs
fetch next from curDBs into @DbName ,@pos
while @@fetch_status = 0
begin SET @sql = 'RESTORE DATABASE ' + @DbName + ' FROM DISK = N''' + @dirfile + ''' WITH FILE =' + cast(@pos as varchar(3)) + ' , NOUNLOAD, STATS = 10, RECOVERY, REPLACE, MOVE '
--Get information about database files from backup device into temp table
TRUNCATE TABLE #dbfiles
set @tmpsql = 'RESTORE FILELISTONLY FROM DISK = ''' + @dirfile + ''' with File =' + cast(@pos as varchar(3))+ ''
INSERT #dbfiles EXEC( @tmpsql )
declare dbfiles cursor for select LogicalName, PhysicalName, type from #dbfiles OPEN dbfiles
FETCH NEXT FROM dbfiles INTO @LogicalName, @PhysicalName, @type
--For each database file that the database uses
WHILE @@FETCH_STATUS = 0
BEGIN SET @sql = @sql + '''' + @LogicalName + ''' TO ''' + @DestDirDbFiles + '\' + @LogicalName
IF @type = 'D'
SET @sql = @sql + '.mdf'', MOVE '
ELSE IF @type = 'L'
SET @sql = @sql + '.ldf'''
FETCH NEXT FROM dbfiles INTO @LogicalName, @PhysicalName, @type
END
IF @DbName NOT IN('tempdb', 'distribution', 'Northwind', 'pubs', 'master', 'model', 'msdb')
BEGIN PRINT @sql
EXEC(@sql)
END
CLOSE dbfiles
DEALLOCATE dbfiles
fetch next from curDBs into @DbName ,@pos
end
close curDBs
deallocate curDBs
drop table #dbfiles
drop table #bdevتم تعديل هذه المشاركة بواسطة adel_elgo في 21 مايو 2006 في 20:43
جربت استخدام الامر :
sp_msforeachdb 'Backup database ? to disk = ''C:\ServerBackup'' with Name= ''?'''
ولم ينفع ظهرت لي رسالة :
Msg 3201, Level 16, State 1, Server NEWSERVER\MSSQLSERVER, Line 1
Cannot open backup device 'c:\backup\'. Device error or device off-line. See the SQL Server error log for more details.
Msg 3013, Level 16, State 1, Server NEWSERVER\MSSQLSERVER, Line 1
BACKUP DATABASE is terminating abnormally.
هذا الموضوع مغلق.