如何备份SQL Server 2008上的所有数据库

时间:2015-02-06 17:14:20

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

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

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

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

我在以下路径中找到了

  

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

我找到的每个数据库的所有数据库:

  1. databasename_log.ldf
  2. databasename.mdf
  3. 我将这些文件复制到外部硬盘驱动器。

    我的问题:

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

3 个答案:

答案 0 :(得分:5)

我发现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

答案 1 :(得分:1)

您可以使用 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

OR

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

答案 2 :(得分:0)

  

格式化后,这些文件是否足以导入数据库?如果我安装(格式化后)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