it-swarm-vi.tech

SQL Server 2008 Express - Giải pháp sao lưu "tốt nhất"?

Những giải pháp sao lưu nào bạn muốn giới thiệu khi sử dụng SQL Server 2008 Express ? Tôi khá mới với SQL Server, nhưng vì tôi đến từ nền tảng MySQL Tôi đã nghĩ đến việc thiết lập sao chép trên một máy tính khác và chỉ cần Xcopy sao lưu của máy chủ đó .

Nhưng thật không may, sao chép không có sẵn trong Express Edition.

Trang web được truy cập rất nhiều, do đó không có sự chậm trễ và thời gian chết. Tôi cũng đang nghĩ đến việc thực hiện sao lưu hai lần một ngày hoặc một cái gì đó.

Bạn muốn giới thiệu gì? Tôi có nhiều máy tính tôi có thể sử dụng, nhưng tôi không biết điều đó có giúp tôi không vì tôi đang sử dụng phiên bản Express.

20
alexn

SQL Server Express 2008 hỗ trợ sao lưu cơ sở dữ liệu. Nó thiếu SQL Agent, cho phép lên lịch sao lưu và trình hướng dẫn kế hoạch bảo trì để tạo một tác vụ sao lưu.

Bạn có thể sao lưu cơ sở dữ liệu theo hai cách khác nhau:

  1. Sử dụng Microsoft SQL Server Management Studio Express có tùy chọn Sao lưu trên menu nhấp chuột phải cho mỗi cơ sở dữ liệu trong "tác vụ".
  2. Sử dụng T-SQL để tự viết kịch bản sao lưu của bạn. Đọc tài liệu MSDN cho lệnh BACKUP T-SQL .
    [.__.] Cú pháp giống như: BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

Nếu bạn muốn lên lịch cho các công việc sao lưu của mình, bạn phải viết một tập lệnh T-SQL và sau đó sử dụng Lịch trình tác vụ của Windows để gọi SQLCmd để chạy tập lệnh theo mọi lịch trình mà bạn quan tâm:

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

Tôi sử dụng SQLBackupAndFTP - sản phẩm tuyệt vời và đơn giản.

6
Ruslan Sudentas

Tôi đã được viết kịch bản sao lưu để sử dụng cho chính mình, cài đặt như được đề cập trong bài viết của 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

Tôi sử dụng ExpressMaint và nó hoạt động tuyệt vời như một tác vụ theo lịch trình. Chỉ cần vượt qua các tham số thích hợp cho loại công việc bạn đang làm.

Mã nguồn cũng ở ngoài đó. Chúng tôi đã thay đổi nó một chút để thêm một mục trong nhật ký sự kiện ứng dụng khi thất bại.

2
CPU_BUSY

Dựa trên Bài đăng của UndertheFold Tôi đã làm một số việc và tìm thấy các chi tiết của ExpressMaint. Tôi chưa từng thấy điều này trước đây, vì vậy tôi rất vui mừng khi tìm thấy nó.

FYI, trang web là, http://expressmaint.codeplex.com/

Sau đó, tôi đã sử dụng một trong những ví dụ tôi tìm thấy để tạo tệp bó này mà tôi đã lên lịch để chạy qua đêm mỗi ngày.

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

Cái này cần một bản sao lưu, giữ mỗi bản sao lưu (-BU) trong bốn ngày, vì vậy bạn có được lịch sử nếu có tham nhũng. Các bản ghi (-RU) được giữ trong một tuần.

Tôi mới chỉ sử dụng được vài tuần, nhưng tôi rất hài lòng với nó, vì đây là một cách tiếp cận thực tiễn. Tại địa phương tôi đặt các bản sao lưu vào đĩa thứ hai, sau đó tôi sử dụng JungleDisk để thực hiện sao lưu ngoại vi vào Amazon EC2 lưu trữ đám mây.

1
Guppy

Bạn có thể sử dụng DBSave . Đây là một công cụ phần mềm miễn phí tuyệt vời để sao lưu và khôi phục MS SQL Server. Nó rất đơn giản để thiết lập và sử dụng.

1
MP1963

Tôi sẽ kiểm tra SQLServerBooster: http://www.sqlserverbooster.com .

Có vẻ như nó có một bộ tính năng Nice và miễn phí. Hỗ trợ cho Azure/S3/sông băng cũng rất tuyệt.

0
Ben Lachman

Tôi đang sử dụng một công việc lập lịch trình windows để sao lưu cơ sở dữ liệu SQL Server express mỗi vài giờ bằng cách sử dụng một tệp bó. Có vẻ để làm việc tốt.

0
no_one