SQL Server 2008 Express kullanırken hangi yedekleme çözümlerini önerirsiniz? SQL Server için oldukça yeniyim, ancak MySQL arka planından geldiğim için, başka bir bilgisayarda çoğaltma ayarlamayı düşündüm ve sadece bu sunucunun Xcopy yedeklerini almayı düşündüm .
Ancak ne yazık ki Express Edition'da çoğaltma kullanılamıyor.
Siteye yoğun bir şekilde erişildiğinden, gecikme ve kesinti süresi olmamalıdır. Ayrıca günde iki kez yedekleme yapmayı düşünüyorum.
Ne önerirsiniz? Kullanabileceğim birden çok bilgisayarım var, ancak Express sürümünü kullandığım için bana yardımcı olup olmadığını bilmiyorum.
SQL Server Express 2008 veritabanı yedeklemelerini destekler. Yedeklemeleri zamanlamaya izin veren SQL Agent ve yedekleme görevleri oluşturmak için bakım planı sihirbazı eksik.
Veritabanlarını iki farklı şekilde yedekleyebilirsiniz:
BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';
Yedekleme işlerinizi zamanlamak istiyorsanız, bir T-SQL komut dosyası yazmanız ve daha sonra Windows Görev Zamanlaması'nı kullanarak SQLCmd komut dosyasını ilgilendiğiniz her programda çalıştırmak için kullanmanız gerekir:
sqlcmd -s server_name\sqlexpress -i C:\SqlJobs\backup.sql -o C:\Logs\output.txt
SQLBackupAndFTP - fantastik ve basit bir ürün kullanıyorum.
Kendimi kullanmak için yedekleme komut dosyası yazıldım, splattne ile yazıda belirtildiği gibi yükleyin:
----- Version: 2.0 - 2009-12-12 - SQL 2000 Compatible
----- Pham Kim Ngan ([email protected])
----- Usage:
-- Copy 7za.exe (http://www.7-Zip.org/download.html - Command Line Version) to @CFG_BACKUP_PATH
-- Modify @CFG_BACKUP_PATH = <Backup Store Path> - no long filename/directory please
-- Modify @CFG_DAYS_DELETE = Days to keep backups
-- Enable 'xp_cmdshell' (SQL 2005/EXPRESS or higher)
----- Configuration Variables
DECLARE @CFG_BACKUP_PATH NVARCHAR(256)
DECLARE @CFG_DAYS_DELETE INT
SET @CFG_BACKUP_PATH = 'C:\DatabaseBackup'
SET @CFG_DAYS_DELETE = 30
DECLARE @Today DATETIME
DECLARE @TodayName CHAR(8)
SET @Today = GETDATE()
SET @TodayName = CONVERT(CHAR(8), @Today, 112)
DECLARE @id INT
DECLARE @name VARCHAR(50)
DECLARE @path VARCHAR(256)
DECLARE @cmd VARCHAR(256)
----- Create Temporarity Directory
DECLARE @TempDir VARCHAR(256)
SET @TempDir = @CFG_BACKUP_PATH + '\' + CONVERT(VARCHAR(256), NEWID())
SET @cmd = 'md ' + @TempDir
EXEC xp_cmdshell @cmd, no_output
----- List of current databases, only 'ONLINE' databases to be backup
DECLARE @dbList TABLE
(
dbno INT IDENTITY,
dbname NVARCHAR(256)
)
INSERT INTO @dbList ( dbname )
SELECT name
FROM master.dbo.sysdatabases
WHERE ( name NOT IN ( 'tempdb' ) )
AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'
------ Starting backup, one by one
SELECT @id = dbno,
@name = dbname
FROM @dbList
WHERE dbno = 1
WHILE @@ROWCOUNT = 1
BEGIN
PRINT N'++ Backup: ' + @name
SET @path = @TempDir + '\' + @name + '.bak'
BACKUP DATABASE @name TO DISK = @path
SELECT @id = dbno,
@name = dbname
FROM @dbList
WHERE dbno = @id + 1
END
PRINT N'++ Compressing: ' + @TempDir
----- Delete output file if existed
SET @cmd = 'del /f /q ' + @CFG_BACKUP_PATH + '\' + @TodayName + '.Zip'
EXEC xp_cmdshell @cmd, no_output
DECLARE @Count INT
DECLARE @StartTime DATETIME
SET @StartTime = GETDATE()
----- Compress, -mx1 = Set Compression Ratio to 1 (very low)
SET @cmd = @CFG_BACKUP_PATH + '\7za.exe a -bd -y -tzip -mx1 '
SET @cmd = @cmd + @CFG_BACKUP_PATH + '\' + @TodayName + '.Zip ' + @TempDir + '\*.bak"'
EXEC xp_cmdshell @cmd, no_output
SET @Count = DATEDIFF(second, @StartTime, GETDATE())
PRINT N'++ Compression Time: ' + CONVERT(VARCHAR, @Count) + ' seconds'
SET @Count = DATEDIFF(second, @Today, GETDATE())
PRINT N'++ Total Execution Time: ' + CONVERT(VARCHAR, @Count) + ' seconds'
---- Delete temporarity directory
SET @cmd = 'rd /s /q ' + @TempDir
EXEC xp_cmdshell @cmd, no_output
---- Delete previous backup versions
DECLARE @OlderDateName CHAR(8)
SET @OlderDateName = CONVERT(CHAR(8), @Today - @CFG_DAYS_DELETE, 112)
----- List all .Zip files
CREATE TABLE #delList
(
subdirectory VARCHAR(256),
depth INT,
[file] BIT
)
INSERT INTO #delList
EXEC xp_dirtree @CFG_BACKUP_PATH, 1, 1
DELETE #delList
WHERE RIGHT(subdirectory, 4) <> '.Zip'
SELECT @Count = COUNT(1)
FROM #delList
PRINT N'++ Number of Backups: ' + CONVERT(NVARCHAR, @Count)
SELECT TOP 1
@name = subdirectory
FROM #delList
WHERE LEN(subdirectory) = 12
AND RIGHT(subdirectory, 4) = '.Zip'
AND REPLACE(subdirectory, '.Zip', '') < @OlderDateName
WHILE ( @@ROWCOUNT = 1 )
BEGIN
PRINT N'++ Delete Older Backup: ' + @name
SET @cmd = 'del /f /q ' + @CFG_BACKUP_PATH + '\' + @name
EXEC xp_cmdshell @cmd, no_output
DELETE #delList
WHERE subdirectory = @name
SELECT TOP 1
@name = subdirectory
FROM #delList
WHERE LEN(subdirectory) = 12
AND RIGHT(subdirectory, 4) = '.Zip'
AND REPLACE(subdirectory, '.Zip', '') < @OlderDateName
END
DROP TABLE #delList
PRINT N'++ Done.'
PRINT ''
PRINT ''
PRINT ''
ExpressMaint kullanıyorum ve zamanlanmış bir görev olarak harika çalışıyor. Yaptığınız işin türü için uygun parametreleri iletmeniz yeterli.
Kaynak kodu da orada. Uygulama olay günlüğü açma hatasına bir girdi eklemek için biraz değiştirdik.
ndertheFold'un gönderisi Bazı googling yaptım ve ExpressMaint'in ayrıntılarını buldum. Bunu daha önce görmemiştim, bu yüzden bulduğum için çok memnunum.
Bilginize, web sayfası: http://expressmaint.codeplex.com/
Daha sonra her gün bir gece çalışmayı planladığım bu toplu iş dosyasını oluşturmak için bulduğum örneklerden birini kullandım.
c:\expressmaint\expressmaint -S (local)\SQLExpress -D ALL_USER -T DB -R E:\backups\sqlexpress\backupreports -RU WEEKS -RV 1 -B E:\backups\sqlexpress -BU DAYS -BV 4 -V -C
Bu bir yedek alır, her yedeklemeyi tutar (-BU
) dört gün boyunca, böylece yolsuzluk varsa bir geçmiş elde edersiniz. Günlükler (-RU
) bir hafta boyunca saklanır.
Sadece birkaç haftadır kullanıyorum, ancak bir el ele tutumu yaklaşımı olduğu için bundan çok memnun kaldım. Yerel olarak yedekleri ikinci bir diske koydum, daha sonra Amazon EC2 bulut depolama alanına site dışı yedekleme yapmak için JungleDisk kullanıyorum.
DBSave kullanabilirsiniz. MS SQL Server'ı yedeklemek ve geri yüklemek için harika bir ücretsiz araçtır. Kurulumu ve kullanımı çok basit.
SQLServerBooster'ı kontrol ederim: http://www.sqlserverbooster.com .
Güzel bir özellik seti var ve ücretsiz. Azure/S3/buzul desteği de güzel.
Bir toplu iş dosyası kullanarak SQL Server hızlı veritabanı birkaç saatte bir yedeklemek için bir windows zamanlayıcı iş kullanıyorum. İyi çalışıyor gibi görünüyor.