ما هو بسيط سطر الأوامر البرنامج أو البرنامج النصي النسخ الاحتياطي SQL server قواعد البيانات ؟

StackOverflow https://stackoverflow.com/questions/122690

سؤال

لقد تم التساهل مع أداء DB النسخ الاحتياطي على الخوادم الداخلية.

هل هناك بسيطة سطر الأوامر البرنامج الذي يمكنني استخدام النسخ الاحتياطي بعض قواعد البيانات في SQL Server 2005?أو هل هناك بسيطة VBScript?

هل كانت مفيدة؟

المحلول

النسخ الاحتياطي قاعدة بيانات واحدة من سطر الأوامر, استخدام osql أو sqlcmd.

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe" 
    -E -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak' WITH FORMAT"

سوف تحتاج أيضا إلى قراءة الوثائق على النسخ الاحتياطي و استعادة و الإجراءات العامة.

نصائح أخرى

يمكنني استخدام ExpressMaint.

احتياطية لجميع قواعد بيانات المستخدم أفعل على سبيل المثال:

C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS

الجدول التالي لجميع النسخ الاحتياطي قواعد البيانات:

Use Master

Declare @ToExecute VarChar(8000)

Select @ToExecute = Coalesce(@ToExecute + 'Backup Database ' + [Name] + ' To Disk =     ''D:\Backups\Databases\' + [Name]   + '.bak'' With Format;' + char(13),'')
From
Master..Sysdatabases
Where
[Name] Not In ('tempdb')
and databasepropertyex ([Name],'Status') = 'online'

Execute(@ToExecute)

وهناك أيضا المزيد من التفاصيل على بلدي بلوق:كيفية أتمتة SQL Server Express النسخ الاحتياطي.

لقد وجدت هذا على صفحة دعم مايكروسوفت http://support.microsoft.com/kb/2019698.

يعمل كبيرة!و لأنه جاء من مايكروسوفت, أشعر أنها جميلة شرعي.

أساسا هناك نوعان من الخطوات.

  1. إنشاء إجراء مخزن في سيدك ديسيبل.انظر msft الرابط أو إذا كان مكسور حاول هنا: http://pastebin.com/svRLkqnq
  2. جدولة النسخ الاحتياطي من جدولة المهام.قد ترغب في وضعها في .bat أو .cmd الملف أولا ثم جدولة هذا الملف.

    sqlcmd -S YOUR_SERVER_NAME\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='C:\SQL_Backup\', @backupType='F'"  1>c:\SQL_Backup\backup.log            
    

ومن الواضح أن يحل محل YOUR_SERVER_NAME مع اسم الكمبيوتر الخاص بك أو اختياريا محاولة .\SQLEXPRESS و تأكد من مجلد النسخ الاحتياطي موجود.في هذه الحالة هو محاولة وضعه في c:\SQL_Backup

يمكنك استخدام تطبيق النسخ الاحتياطي عن طريق وحول apexsql.على الرغم من انها واجهة المستخدم الرسومية التطبيق لديه كل الميزات المعتمدة في CLI.من الممكن أيضا إجراء لمرة واحدة عمليات النسخ الاحتياطي ، أو إنشاء عمل نسخة احتياطية محدد من قواعد البيانات على أساس منتظم.يمكنك التحقق من تبديل قواعد exampled في المواد:

أنا باستخدام tsql ضمن على لينكس/يونكس البنية التحتية للوصول إلى قواعد بيانات MSSQL.هنا هو بسيط شيل تفريغ جدول إلى ملف:

#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}

في نهاية المطاف إذا لم يكن لديك اتصال موثوق مثل –E التبديل تعلن

استخدام سطر الأوامر التالي

"[program dir]\[sql server version]\Tools\Binn\osql.exe" -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak'" -S [server] –U [login id] -P [password]

حيث

[برنامج dir] هو الدليل حيث osql.exe موجود

On 32bit OS c:\Program Files\Microsoft SQL Server\
On 64bit OS c:\Program Files (x86)\Microsoft SQL Server\

[sql server الإصدار] sql server الإصدار 110 أو 100 أو 90 أو 80 تبدأ مع أكبر عدد

[server] الخاص بك servername أو server ip

[معرف تسجيل الدخول] ms-sql server تسجيل الدخول اسم المستخدم

[كلمة المرور] مطلوب كلمة مرور تسجيل الدخول

وفيما يلي برنامج نصي بسيط لجعل النسخ الاحتياطي لقاعدة البيانات.

DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name


-- specify database backup directory
SET @path = 'C:\Backup\'  


-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 


DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases


OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   


WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @fileName = @path + @name + '_' + @fileDate + '.BAK'  
       BACKUP DATABASE @name TO DISK = @fileName  


       FETCH NEXT FROM db_cursor INTO @name   
END   


CLOSE db_cursor   
DEALLOCATE db_cursor

هل يمكن استخدام برنامج VB كتبت بالضبط لهذا الغرض:https://github.com/ezrarieben/mssql-backup-vbs/

جدولة المهام في "جدولة المهام" تنفيذ البرنامج النصي كما تريد و سوف النسخ الاحتياطي كامل DB إلى BAK الملف وحفظه أينما كنت في تحديد ذلك.

SET NOCOUNT ON;
declare @PATH VARCHAR(200)='D:\MyBackupFolder\'
 -- path where you want to take backups
IF OBJECT_ID('TEMPDB..#back') IS NOT NULL

DROP TABLE #back

CREATE TABLE #back
(
RN INT IDENTITY (1,1),
DatabaseName NVARCHAR(200)

)

INSERT INTO #back 
SELECT       'MyDatabase1'
UNION SELECT 'MyDatabase2'
UNION SELECT 'MyDatabase3'
UNION SELECT 'MyDatabase4'

-- your databases List

DECLARE @COUNT INT =0 ,  @RN INT =1, @SCRIPT NVARCHAR(MAX)='',  @DBNAME VARCHAR(200)

PRINT '---------------------FULL BACKUP SCRIPT-------------------------'+CHAR(10)
SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN

SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.bak'''+CHAR(10)+'WITH COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

 PRINT '---------------------DIFF BACKUP SCRIPT-------------------------'+CHAR(10)

  SET  @COUNT  =0 SET  @RN  =1 SET @SCRIPT ='' SET @DBNAME =''
 SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN
SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.diff'''+CHAR(10)+'WITH DIFFERENTIAL, COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

إذا كان يمكنك العثور على ملفات DB..."م أ DBFiles النسخ الاحتياطي/"

تقريبا مؤكد لا ينصح في معظم الحالات, لكنها بسيطة مثل جميع المنافسات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top