it-swarm.asia

SQL Server 2008 Express - "En iyi" yedekleme çözümü?

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.

20
alexn

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:

  1. "Görevler" altında her veritabanı için sağ tıklama menüsünde Yedekleme seçeneğine sahip Microsoft SQL Server Management Studio Express kullanın.
  2. Yedek komut dosyanızı el ile yazmak için T-SQL kullanın. T-SQL BACKUP komutu için MSDN belgelerini okuyun .
    Sözdizimi şuna benzer: 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
30
splattne

SQLBackupAndFTP - fantastik ve basit bir ürün kullanıyorum.

6
Ruslan Sudentas

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 ''
5
Joan Pham

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.

2
CPU_BUSY

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.

1
Guppy

DBSave kullanabilirsiniz. MS SQL Server'ı yedeklemek ve geri yüklemek için harika bir ücretsiz araçtır. Kurulumu ve kullanımı çok basit.

1
MP1963

SQLServerBooster'ı kontrol ederim: http://www.sqlserverbooster.com .

Güzel bir özellik seti var ve ücretsiz. Azure/S3/buzul desteği de güzel.

0
Ben Lachman

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.

0
no_one