【问题标题】:How to backup all databases on SQL Server 2008如何备份 SQL Server 2008 上的所有数据库
【发布时间】:2015-02-06 17:14:20
【问题描述】:

我已经在 SQL Server 2008 R2 上工作了 4 年,是时候格式化我的笔记本电脑了。

我只使用默认实例,我可以使用. 作为服务器名称访问它,然后使用我的用户名和密码进行用户身份验证。

现在我想格式化我的笔记本电脑,手动备份所有数据库几乎是不可能的。

我在以下路径中找到了

C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL

我拥有的所有数据库,对于我找到的每个数据库:

  1. 数据库名_log.ldf
  2. 数据库名.mdf

我将这些文件复制到了外部硬盘。

我的问题:

这些文件是否足以在格式化后导入数据库?如果我安装(格式化后)SQL Server 2012 而不是 2008 R2,它们会起作用吗?

【问题讨论】:

  • 您可以这样做,但前提是您要使用相同的版本。最好备份数据库,然后从新服务器上的备份文件中恢复。请注意,如果要升级,则应重建所有索引,因为它们会分散在各处。
  • @SeanLange 我完成了格式化,现在想再次安装 sql server 2008 r2,请问我安装了哪些节目?当我点击下载时,我有很多选项,我使用的是 64 位,请写一个答案接受它microsoft.com/en-us/download/details.aspx?id=30438
  • 我不能告诉你应该买哪一个。在下载链接下方向下滚动并展开“详细信息”。我认为您会想要 64 位版本之一,但我不知道您需要什么功能。该网站解释了每个版本的内容。根据您的需要做出决定并顺其自然。

标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012


【解决方案1】:

我发现来自this article 的 SQL 在备份服务器上的所有数据库时很有用。

DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name


-- specify database backup directory
SET @path = 'C:\Backup\'  


-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 


DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases


OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   


WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @fileName = @path + @name + '_' + @fileDate + '.BAK'  
       BACKUP DATABASE @name TO DISK = @fileName  


       FETCH NEXT FROM db_cursor INTO @name   
END   


CLOSE db_cursor   
DEALLOCATE db_cursor

【讨论】:

    【解决方案2】:

    您可以像这样使用 SELECT 语句或 CURSOR

    DECLARE @PathForBackUp VARCHAR(255)
    SET @PathForBackUp = 'F:\Backup\User DB\'
    
    SELECT 'BACKUP DATABASE [' + name + '] TO  DISK = N''' + @PathForBackUp + '' + name + '.bak''
    WITH NOFORMAT, NOINIT,  NAME = N''' + name + '_FullBackUp'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 5'
    FROM sys.databases
    WHERE database_id > 4
    

    DECLARE @DBName VARCHAR(255)  
    DECLARE @PathForBackUp VARCHAR(255) 
    DECLARE @FileName VARCHAR(255)  
    DECLARE @DateFile VARCHAR(255)
    DECLARE @SQL NVARCHAR(2048) 
    SET @PathForBackUp = 'F:\Backup\User DB\'  
    SET @DateFile = REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120) ,' ','T'), ':','') 
    
    DECLARE BACKUPING CURSOR FOR   
    SELECT name  
    FROM master.dbo.sysdatabases WHERE dbid > 4 
    
    OPEN BACKUPING    
    FETCH NEXT FROM BACKUPING INTO @DBName    
    WHILE @@FETCH_STATUS = 0    
    
    BEGIN    
            SET @FileName = @PathForBackUp + @DBName + '_' + @DateFile + '.BAK'  
        SET @SQL = 'BACKUP DATABASE '+@DBName+ ' TO DISK = '''+@FileName+''' WITH COMPRESSION ' 
        PRINT @SQL 
        EXECUTE sp_executesql @sql   
        FETCH NEXT FROM BACKUPING INTO @DBName  
    
    END    
    
    CLOSE BACKUPING    
    DEALLOCATE BACKUPING 
    

    如果您想了解更多关于这些解决方案的信息,我在这里写了一篇关于此的帖子: http://www.pigeonsql.com/single-post/2016/12/20/Backup-All-Users-databases-via-Select-and-Cursor

    【讨论】:

      【解决方案3】:

      这些文件是否足以在格式化后导入数据库?如果我安装(格式化后)SQL Server 2012 而不是 2008 R2,它们会起作用吗?

      您正在对数据库 mdf 和 ldf 文件进行文件级备份,这与 T-SQL 备份有点不同。据我所知,您已经格式化了您的机器并且您没有进行备份,所以在这种情况下,请将 mdf 和 ldf 文件复制到本地驱动器上,然后附加这些文件以创建数据库。

      请注意,在附加之前确保您已安装 Service Pack(SP),如果它在格式化之前安装在 SQL Server 2008 r2 上。如果没有请在附加数据库后安装SP。

      要附加数据库,您可以使用 TSQL 和 GUI。下面的链接将帮助您附加数据文件。在打开 SSMS 之前,请右键单击 SSMS 并选择以管理员身份运行以避免任何访问被拒绝消息。

      Attach a database using SSMS

      附加脚本示例

      CREATE DATABASE DatabaseName 
          ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
          (FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
           (FILENAME = 'FilePath\SecondaryDataFile.ndf)  -- Optional - any secondary data files
          FOR ATTACH 
      GO 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多