SQL Server 2008 Express - solusi cadangan "Terbaik"?


20

Solusi cadangan apa yang akan Anda rekomendasikan saat menggunakan SQL Server 2008 Express ? Saya cukup baru untuk SQL Server, tetapi karena saya berasal dari latar belakang MySQL, saya berpikir untuk membuat replikasi di komputer lain dan hanya mengambil cadangan Xcopy 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 banyak komputer yang dapat saya gunakan, tetapi saya tidak tahu apakah itu membantu saya karena saya menggunakan versi Express.


Adakah yang tahu jika ada masalah dengan hanya menggunakan Windows Server Backup untuk melakukan ini?
James

Jawaban:


30

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

1
Sintaks BACKUP terlihat seperti ini: DATABASE CADANGAN MyDatabase TO DISK = 'C: \ MyDatabase.bak';
Martin Marconcini

Terima kasih untuk informasi ini kawan, saya akan mencoba ini.
alexn

saat menggunakan skrip T-sql, pastikan nama db Anda tidak mengandung spasi.
redknight

+1 Satu lagi info: Jangan lupa menyebutkan nama instance via -S ".\SomeInstance"jika Anda mendapatkan kesalahan login dari sqlcmd.
Tomalak

Akan sangat membantu, bagi kita semua yang datang ke pertanyaan ini mencari jawaban yang sama, jika Anda menyertakan SQL yang Anda gunakan untuk menjalankan cadangan.
Ian Boyd

6

Saya menggunakan SQLBackupAndFTP - produk yang fantastis dan sederhana.


sqlbackupandftp adalah yang terbaik .. jika Anda ingin kembali + kompres + auto delete (setelah hari yang ditentukan)
suraj jain

Ya saya juga menggunakan ini. Bekerja dengan baik.
Alan B

5

Saya menulis skrip cadangan untuk digunakan sendiri, instal sebagai metioned in post by splattne :

----- Version: 2.0 - 2009-12-12 - SQL 2000 Compatible
----- Pham Kim Ngan (jbngan@gmail.com)
----- 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 ''

2

Saya menggunakan ExpressMaint , dan bekerja sangat baik sebagai tugas yang dijadwalkan. 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.


1

Berdasarkan posting UndertheFold, saya melakukan beberapa googling dan menemukan rincian 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 semalam 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, sehingga Anda mendapatkan riwayat 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 cadangan di luar kantor ke penyimpanan cloud Amazon EC2 .


Masalah dengan expressmaint adalah tidak mendukung SQL Server 2008 R2. Ini akan bekerja dengan 2008 dan akan berfungsi jika Anda menginstal 2008 dan kemudian memutakhirkan ke 2008 R2, tetapi tidak akan menemukan database pada instalasi baru 2008 R2. Ini adalah bug yang dikenal dengan tambalan yang dikirimkan tetapi yang dapat dieksekusi belum diperbarui dengan tambalan.
James

1

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


0

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


Anda juga harus menyebutkan bagaimana file batch mencadangkan database.
Ian Boyd

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.