pengembangan-web-mp-pd.com

SQL Server 2008 Express - solusi cadangan "Terbaik"?

Solusi cadangan apa yang akan Anda rekomendasikan saat menggunakan SQL Server 2008 Express ? Saya cukup baru untuk SQL Server, tetapi karena saya berasal dari MySQL latar belakang saya berpikir untuk mengatur replikasi di komputer lain dan hanya mengambil Xcopy backup dari server itu .

Namun sayangnya replikasi tidak tersedia di Edisi Express.

Situs ini sangat diakses, sehingga tidak boleh ada penundaan dan downtime. Saya juga berpikir untuk melakukan backup dua kali sehari atau sesuatu.

Apa yang akan kamu rekomendasikan? Saya memiliki beberapa komputer yang dapat saya gunakan, tetapi saya tidak tahu apakah itu membantu saya karena saya menggunakan versi Express.

20
alexn

SQL Server Express 2008 mendukung backup database. Tidak ada SQL Agent, yang memungkinkan untuk menjadwalkan pencadangan, dan panduan rencana pemeliharaan untuk membuat tugas pencadangan.

Anda dapat membuat cadangan basis data dengan dua cara berbeda:

  1. Gunakan Microsoft SQL Server Management Studio Express yang memiliki opsi Cadangan pada menu klik kanan untuk setiap database di bawah "tugas."
  2. Gunakan T-SQL untuk menulis skrip cadangan secara manual. Baca dokumentasi MSDN untuk perintah T-SQL BACKUP .
    Sintaksis seperti: BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

Jika Anda ingin menjadwalkan pekerjaan pencadangan Anda, Anda harus menulis skrip T-SQL dan kemudian menggunakan Jadwal Tugas Windows untuk memanggil SQLCmd untuk menjalankan skrip pada setiap jadwal yang Anda minati:

 sqlcmd -s server_name\sqlexpress -i C:\SqlJobs\backup.sql -o C:\Logs\output.txt
30
splattne

Saya menggunakan SQLBackupAndFTP - produk yang fantastis dan sederhana.

6
Ruslan Sudentas

Saya menulis skrip cadangan untuk digunakan sendiri, instal seperti yang disebutkan dalam pos oleh splattne:

----- 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

Saya menggunakan ExpressMaint , dan berfungsi dengan baik sebagai tugas terjadwal. Cukup berikan parameter yang sesuai untuk jenis pekerjaan yang Anda lakukan.

Kode sumber juga ada di luar sana. Kami mengubahnya sedikit untuk menambahkan entri di event aplikasi log on kegagalan.

2
CPU_BUSY

Berdasarkan tulisan UndertheFold Saya melakukan beberapa pencarian di Google dan menemukan detail ExpressMaint. Saya belum pernah melihat ini sebelumnya, jadi saya sangat senang telah menemukannya.

FYI, halaman webnya adalah, http://expressmaint.codeplex.com/

Saya kemudian menggunakan salah satu contoh yang saya temukan untuk membuat file batch ini yang telah saya jadwalkan untuk dijalankan setiap hari.

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

Ini membutuhkan cadangan, membuat setiap cadangan (-BU) selama empat hari, jadi Anda mendapatkan sejarah jika ada korupsi. Log (-RU) disimpan selama satu minggu.

Saya hanya menggunakannya selama beberapa minggu, tetapi saya sangat senang dengan itu, karena ini adalah pendekatan lepas tangan. Secara lokal saya meletakkan cadangan pada disk kedua, saya kemudian menggunakan JungleDisk untuk melakukan backup di luar lokasi ke Amazon EC2 penyimpanan cloud.

1
Guppy

Anda dapat menggunakan DBSave . Ini adalah alat freeware yang hebat untuk membuat cadangan dan memulihkan MS SQL Server. Pengaturan dan penggunaannya sangat sederhana.

1
MP1963

Saya akan memeriksa SQLServerBooster: http://www.sqlserverbooster.com .

Sepertinya memiliki set fitur yang bagus dan gratis. Dukungan untuk Azure/S3/gletser juga bagus.

0
Ben Lachman

Saya menggunakan pekerjaan windows scheduler untuk mem-backup database SQL Server express setiap beberapa jam dengan menggunakan file batch. Tampaknya bekerja dengan baik.

0
no_one