首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何备份Server 2008上的所有数据库

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

Stack Overflow用户
提问于 2015-02-06 17:14:20
回答 3查看 10.5K关注 0票数 2

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

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

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

我在下面的道路上找到了

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

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

  1. databasename_log.ldf
  2. databasename.mdf

我把这些文件复制到一个外部硬盘上。

我的问题是:

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

EN

回答 3

Stack Overflow用户

发布于 2015-02-09 14:59:39

我发现来自这篇文章的SQL在对服务器上的所有数据库进行备份时非常有用。

代码语言:javascript
运行
复制
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
票数 5
EN

Stack Overflow用户

发布于 2017-01-07 13:15:59

您可以使用选择语句或游标,如下所示:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

票数 1
EN

Stack Overflow用户

发布于 2015-02-10 06:21:41

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

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

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

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

使用SSMS附加数据库

附加样例脚本

代码语言:javascript
运行
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28371150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档