AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 4542
Accepted
alexn
alexn
Asked: 2009-05-05 23:44:05 +0800 CST2009-05-05 23:44:05 +0800 CST 2009-05-05 23:44:05 +0800 CST

SQL Server 2008 Express - “最佳”备份解决方案?

  • 772
锁定。这个问题及其答案被锁定,因为这个问题离题但具有历史意义。它目前不接受新的答案或交互。

使用SQL Server 2008 Express时,您会推荐哪些备份解决方案?我对 SQL Server 还很陌生,但是由于我来自MySQL背景,所以我想在另一台计算机上设置复制,然后对该服务器进行Xcopy备份。

但不幸的是,Express Edition 中不提供复制功能。

该站点访问量很大,因此必须没有延迟和停机时间。我也在考虑每天做两次备份之类的。

你会推荐什么?我有多台可以使用的计算机,但我不知道这是否对我有帮助,因为我使用的是 Express 版本。

windows backup sql-server-2008 sql
  • 8 8 个回答
  • 68186 Views

8 个回答

  • Voted
  1. Best Answer
    splattne
    2009-05-05T23:59:49+08:002009-05-05T23:59:49+08:00

    SQL Server Express 2008 支持数据库备份。它缺少允许计划备份的 SQL 代理,以及用于创建备份任务的维护计划向导。

    您可以通过两种不同的方式备份数据库:

    1. 使用Microsoft SQL Server Management Studio Express,它在“任务”下的每个数据库的右键菜单中都有备份选项。
    2. 使用 T-SQL 手动编写备份脚本。阅读T-SQL BACKUP 命令的 MSDN 文档。
      语法类似于:BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

    如果要安排备份作业,则必须编写 T-SQL 脚本,然后使用 Windows 任务计划调用SQLCmd以按照您感兴趣的每个计划运行脚本:

     sqlcmd -s server_name\sqlexpress -i C:\SqlJobs\backup.sql -o C:\Logs\output.txt
    
    • 30
  2. Ruslan Sudentas
    2009-06-20T12:09:50+08:002009-06-20T12:09:50+08:00

    我使用SQLBackupAndFTP - 奇妙而简单的产品。

    • 6
  3. Joan Pham
    2009-12-18T22:46:02+08:002009-12-18T22:46:02+08:00

    我编写了备份脚本供自己使用,按照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
  4. CPU_BUSY
    2009-05-06T20:19:34+08:002009-05-06T20:19:34+08:00

    我使用ExpressMaint,它非常适合作为计划任务。只需为您正在做的工作类型传递适当的参数。

    源代码也在那里。我们对其稍作更改,以在失败的应用程序事件日志中添加一个条目。

    • 2
  5. Guppy
    2010-03-27T00:28:42+08:002010-03-27T00:28:42+08:00

    根据UndertheFold 的帖子,我进行了一些谷歌搜索并找到了 ExpressMaint 的详细信息。我以前没见过这个,所以我很高兴找到它。

    仅供参考,网页是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云存储进行异地备份。

    • 1
  6. MP1963
    2010-06-20T00:05:31+08:002010-06-20T00:05:31+08:00

    您可以使用DBSave。它是一个很棒的免费软件工具来备份和恢复 MS SQL Server。它的设置和使用非常简单。

    • 1
  7. no_one
    2009-05-06T00:35:58+08:002009-05-06T00:35:58+08:00

    我正在使用 Windows 调度程序作业,通过使用批处理文件每隔几个小时备份一次 SQL Server express 数据库。似乎工作正常。

    • 0
  8. Ben Lachman
    2013-04-10T08:12:10+08:002013-04-10T08:12:10+08:00

    我会查看 SQLServerBooster:http ://www.sqlserverbooster.com 。

    看起来它有一个很好的功能集并且是免费的。对 azure/S3/glacier 的支持也很好。

    • 0

相关问题

  • 在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

  • 最佳混合环境(OS X + Windows)备份?[关闭]

  • 如何从 SQL Server 2008 中的备份中排除索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve