SQL Server 2008 Express - „Najlepsze” rozwiązanie do tworzenia kopii zapasowych?

20

Jakie rozwiązania do tworzenia kopii zapasowych poleciłbyś podczas używania SQL Server 2008 Express ? Jestem całkiem nowy w SQL Server, ale ponieważ pochodzę z MySQL , pomyślałem o skonfigurowaniu replikacji na innym komputerze i po prostu wykonałem kopie zapasowe Xcopy tego serwera.

Niestety replikacja nie jest dostępna w wersji Express Edition.

Witryna jest często odwiedzana, więc nie może być żadnych opóźnień ani przestojów. Zastanawiam się też nad zrobieniem kopii zapasowej dwa razy dziennie czy coś takiego.

Co byś polecił? Mam wiele komputerów, których mogę używać, ale nie wiem, czy to mi pomaga, ponieważ używam wersji Express.

alexn
źródło
Czy ktoś wie, czy występują problemy z samym użyciem do tego celu Kopii zapasowej systemu Windows Server?
James

Odpowiedzi:

30

SQL Server Express 2008 obsługuje kopie zapasowe bazy danych. Brakuje agenta SQL, który pozwala zaplanować tworzenie kopii zapasowych, oraz kreatora planu konserwacji do tworzenia zadań tworzenia kopii zapasowych.

Możesz wykonać kopię zapasową baz danych na dwa różne sposoby:

  1. Użyj Microsoft SQL Server Management Studio Express, który ma opcję Kopia zapasowa w menu po kliknięciu prawym przyciskiem myszy dla każdej bazy danych w „zadaniach”.
  2. Użyj T-SQL, aby ręcznie napisać skrypt kopii zapasowej. Przeczytaj dokumentację MSDN dotyczącą polecenia T-SQL BACKUP .
    Składnia coś takiego:BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

Jeśli chcesz zaplanować zadania tworzenia kopii zapasowych, musisz napisać skrypt T-SQL, a następnie użyć harmonogramu zadań systemu Windows, aby wywołać SQLCmd w celu uruchomienia skryptu według każdego harmonogramu, który Cię interesuje:

 sqlcmd -s server_name\sqlexpress -i C:\SqlJobs\backup.sql -o C:\Logs\output.txt
splattne
źródło
1
Składnia BACKUP wygląda mniej więcej tak: BACKUP DATABASE MyDatabase TO DISK = 'C: \ MyDatabase.bak';
Martin Marconcini,
Dzięki za te informacje, zamierzam to wypróbować.
alexn
Korzystając ze skryptu T-sql, upewnij się, że nazwy db nie zawierają spacji.
redknight,
+1 Jeszcze jeden kawałek informacji: nie zapomnij wspomnieć o nazwie instancji, -S ".\SomeInstance"jeśli wystąpią błędy logowania z sqlcmd.
Tomalak
Przydałoby się to reszcie, którzy szukają tej samej odpowiedzi na to pytanie, jeśli podasz SQL, którego używasz do uruchomienia kopii zapasowej.
Ian Boyd
6

Używam SQLBackupAndFTP - fantastyczny i prosty produkt.


źródło
sqlbackupandftp jest najlepszy .. jeśli chcesz wrócić + kompresować + automatyczne usuwanie (po określonych dniach)
suraj jain
Tak, również tego używam. Działa dobrze.
Alan B
5

Napisano mi skrypt do tworzenia kopii zapasowych do samodzielnego użytku, zainstaluj zgodnie z opisem przesłanym przez 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 ''
Joan Pham
źródło
2

Używam ExpressMaint i działa świetnie jako zaplanowane zadanie. Po prostu przekaż odpowiednie parametry dla rodzaju wykonywanej pracy.

Istnieje również kod źródłowy. Zmieniliśmy go nieznacznie, aby dodać wpis w dzienniku zdarzeń aplikacji w przypadku niepowodzenia.

CPU_BUSY
źródło
1

Na podstawie posta UndertheFold zrobiłem trochę google i znalazłem szczegóły ExpressMaint. Nie widziałem tego wcześniej, więc bardzo się cieszę, że to znalazłem.

Do Twojej wiadomości, strona internetowa to http://expressmaint.codeplex.com/

Następnie użyłem jednego z przykładów, które znalazłem, aby utworzyć ten plik wsadowy, który zaplanowałem na noc codziennie.

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

To zajmuje kopię zapasową, przechowuje każdą kopię zapasową ( -BU) przez cztery dni, dzięki czemu uzyskujesz historię w przypadku uszkodzenia. Dzienniki ( -RU) są przechowywane przez tydzień.

Używam go tylko od kilku tygodni, ale jestem z niego bardzo zadowolony, ponieważ jest to podejście bez użycia rąk. Lokalnie umieszczam kopie zapasowe na drugim dysku, a następnie korzystam z JungleDisk, aby wykonać kopię zapasową poza siedzibą w chmurze Amazon EC2 .

Gupik
źródło
Problem z expressmaint polega na tym, że nie obsługuje on SQL Server 2008 R2. Będzie działać z 2008 r. I będzie działać, jeśli zainstalujesz 2008, a następnie uaktualnisz do 2008 R2, ale nie znajdzie baz danych w nowej instalacji 2008 R2. Jest to znany błąd z przesłaną łatką, ale plik wykonywalny nie został zaktualizowany wraz z łatką.
James
1

Możesz użyć DBSave . To świetne narzędzie do tworzenia kopii zapasowych i przywracania MS SQL Server. Jest bardzo prosty w konfiguracji i obsłudze.

Peter Mortensen
źródło
0

Używam zadania harmonogramu systemu Windows do tworzenia kopii zapasowej ekspresowej bazy danych SQL Server co kilka godzin przy użyciu pliku wsadowego. Wydaje się, że działa dobrze.

nikt
źródło
Należy również wspomnieć, w jaki sposób plik wsadowy tworzy kopię zapasową bazy danych.
Ian Boyd
0

Sprawdziłbym SQLServerBooster: http://www.sqlserverbooster.com .

Wygląda na to, że ma ładny zestaw funkcji i jest bezpłatny. Wsparcie dla lazurowego / S3 / lodowca jest również miłe.

Ben Lachman
źródło