SQL Server 2008 Express - โซลูชันสำรองข้อมูลที่ดีที่สุด?


20

สิ่งที่โซลูชั่นการสำรองข้อมูลที่คุณจะแนะนำเมื่อใช้SQL Server 2008 Express ? ฉันค่อนข้างใหม่กับ SQL Server แต่เมื่อฉันมาจากพื้นหลังMySQLฉันคิดว่าการตั้งค่าการจำลองแบบบนคอมพิวเตอร์เครื่องอื่นและเพียงแค่ใช้การสำรองข้อมูลXcopyของเซิร์ฟเวอร์นั้น

แต่น่าเสียดายที่การจำลองแบบไม่สามารถใช้ได้ใน Express Edition

มีการเข้าถึงไซต์อย่างหนักดังนั้นจึงไม่มีความล่าช้าและการหยุดทำงาน ฉันยังคิดที่จะทำการสำรองข้อมูลสองครั้งต่อวันหรือบางสิ่งบางอย่าง

คุณจะแนะนำอะไร ฉันมีคอมพิวเตอร์หลายเครื่องที่ฉันสามารถใช้ได้ แต่ฉันไม่รู้ว่าจะช่วยฉันได้หรือไม่เพราะฉันใช้รุ่น Express


ใครทราบหรือไม่ว่ามีปัญหากับการใช้ Windows Server Backup เพื่อทำสิ่งนี้
James

คำตอบ:


30

SQL Server Express 2008 รองรับการสำรองฐานข้อมูล ตัวแทน SQL ขาดหายไปซึ่งอนุญาตให้กำหนดเวลาการสำรองข้อมูลและตัวช่วยสร้างแผนการบำรุงรักษาสำหรับการสร้างงานสำรอง

คุณสามารถสำรองฐานข้อมูลได้สองวิธี:

  1. ใช้Microsoft SQL Server Management Studio Expressซึ่งมีตัวเลือก Backup ในเมนูคลิกขวาสำหรับแต่ละฐานข้อมูลภายใต้ "งาน"
  2. ใช้ T-SQL เพื่อเขียนสคริปต์สำรองของคุณด้วยตนเอง อ่านเอกสาร MSDN สำหรับคำสั่งสำรอง
    ไวยากรณ์ที่ชอบ:BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

หากคุณต้องการกำหนดเวลางานสำรองของคุณคุณต้องเขียนสคริปต์ T-SQL จากนั้นใช้ Windows Task Schedule เพื่อเรียกSQLCmdเพื่อเรียกใช้สคริปต์ในสิ่งที่คุณสนใจทุกตารางเวลา:

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

1
ไวยากรณ์ BACKUP มีลักษณะดังนี้: BACKUP DATABASE MyDatabase TO DISK = 'C: \ MyDatabase.bak';
Martin Marconcini

ขอบคุณสำหรับข้อมูลเหล่านี้ฉันจะลองทำดู
alexn

เมื่อใช้สคริปต์ T-sql ตรวจสอบให้แน่ใจว่าชื่อ db ของคุณไม่มีช่องว่าง
redknight

+1 ข้อมูลอีกหนึ่งบิต: อย่าลืมพูดถึงชื่ออินสแตนซ์ผ่านทาง-S ".\SomeInstance"ถ้าคุณได้รับข้อผิดพลาดในการเข้าสู่ระบบจาก sqlcmd
Tomalak

มันจะเป็นประโยชน์สำหรับพวกเราที่เหลือที่มาถึงคำถามนี้ที่กำลังมองหาคำตอบเดียวกันถ้าคุณรวม SQL ที่คุณใช้เพื่อสำรองข้อมูล
เอียนบอยด์

6

ฉันใช้SQLBackupAndFTP - ผลิตภัณฑ์ที่ยอดเยี่ยมและเรียบง่าย


sqlbackupandftp ที่ดีที่สุดคือ .. ถ้าหากต้องการกลับ + + ลูกประคบลบอัตโนมัติ (หลังจากวันที่ระบุไว้)
suraj jain

ใช่ฉันใช้มันเช่นกัน ทำได้ดี.
Alan B

5

ฉันถูกเขียนสคริปต์สำรองเพื่อใช้ตัวเองติดตั้งเป็น metioned ในโพสต์โดย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

ฉันใช้ExpressMaintและใช้งานได้ดีตามภารกิจที่กำหนด เพียงผ่านพารามิเตอร์ที่เหมาะสมสำหรับประเภทของงานที่คุณกำลังทำ

รหัสแหล่งที่มาก็มี เราเปลี่ยนแปลงเล็กน้อยเพื่อเพิ่มรายการในบันทึกเหตุการณ์แอปพลิเคชันเมื่อความล้มเหลว


1

จากโพสต์ของ UndertheFoldฉันทำ googling และพบรายละเอียดของ ExpressMaint ฉันไม่เคยเห็นสิ่งนี้มาก่อนดังนั้นฉันยินดีเป็นอย่างยิ่งที่ได้พบ

FYI หน้าเว็บคือhttp://expressmaint.codeplex.com/

ฉันใช้หนึ่งในตัวอย่างที่ฉันพบเพื่อสร้างไฟล์แบตช์นี้ซึ่งฉันได้กำหนดให้ทำงานข้ามคืนทุกวัน

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) เป็นเวลาสี่วันดังนั้นคุณจะได้รับประวัติหากเกิดความเสียหาย บันทึก ( -RU) จะถูกเก็บไว้เป็นเวลาหนึ่งสัปดาห์

ฉันใช้มันมาสองสามสัปดาห์แล้ว แต่ฉันก็มีความสุขกับมันมาก ในพื้นที่ฉันวางข้อมูลสำรองไว้ในดิสก์ที่สองจากนั้นฉันใช้JungleDiskเพื่อสำรองข้อมูลภายนอกไปยังที่เก็บข้อมูลบนคลาวด์ของAmazon EC2


ปัญหาเกี่ยวกับ expressmaint คือมันไม่รองรับ SQL Server 2008 R2 มันจะทำงานกับ 2008 และจะทำงานถ้าคุณติดตั้ง 2008 แล้วอัพเกรดเป็น 2008 R2 แต่จะไม่พบฐานข้อมูลในการติดตั้งใหม่ของ 2008 R2 เป็นข้อผิดพลาดที่ทราบแล้วซึ่งมีการส่งแพตช์ แต่ตัวปฏิบัติการไม่ได้รับการอัพเดตด้วยตัวปะแก้
James


0

ฉันใช้งาน Windows Scheduler เพื่อสำรองฐานข้อมูล SQL Server Express ทุก ๆ สองสามชั่วโมงโดยใช้แบตช์ไฟล์ ดูเหมือนว่าจะทำงานได้ดี


คุณควรพูดถึงว่าแบตช์ไฟล์สำรองฐานข้อมูลอย่างไร
เอียนบอยด์

0

ฉันต้องการตรวจสอบออก SQLServerBooster: http://www.sqlserverbooster.com

ดูเหมือนว่าจะมีชุดคุณสมบัติที่ดีและฟรี การรองรับ azure / S3 / ธารน้ำแข็งก็ดีเช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.