ما هو بسيط سطر الأوامر البرنامج أو البرنامج النصي النسخ الاحتياطي SQL server قواعد البيانات ؟
-
02-07-2019 - |
سؤال
لقد تم التساهل مع أداء 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.
يعمل كبيرة!و لأنه جاء من مايكروسوفت, أشعر أنها جميلة شرعي.
أساسا هناك نوعان من الخطوات.
- إنشاء إجراء مخزن في سيدك ديسيبل.انظر msft الرابط أو إذا كان مكسور حاول هنا: http://pastebin.com/svRLkqnq
جدولة النسخ الاحتياطي من جدولة المهام.قد ترغب في وضعها في .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 النسخ الاحتياطي/"
تقريبا مؤكد لا ينصح في معظم الحالات, لكنها بسيطة مثل جميع المنافسات.