Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 备份所有数据库+;索引创建脚本?_Sql_Sql Server_Tsql_Sql Server 2008 - Fatal编程技术网

Sql 备份所有数据库+;索引创建脚本?

Sql 备份所有数据库+;索引创建脚本?,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,Sql Server 2008,我尝试备份所有SQL Server数据库时,遇到以下脚本: 这工作得非常好,只是我想在恢复数据库之后,我必须重建数据库的所有索引。我想知道是否可以转储所有索引的CREATE语句,以便在恢复所有这些数据库后可以一次性重新运行它们?这是常规维护备份操作吗?如果没有,那么它必须添加一个子句,否则它会断开备份链 作为定期维护备份,这相当糟糕: 它会忽略每个数据库恢复模型(可能不同) 它在安排完整/差异/日志备份方面做得不好(即使用了太多的磁盘空间,导致了太多的灾难恢复数据丢失) 这不是错误安全的,一个

我尝试备份所有SQL Server数据库时,遇到以下脚本:


这工作得非常好,只是我想在恢复数据库之后,我必须重建数据库的所有索引。我想知道是否可以转储所有索引的
CREATE
语句,以便在恢复所有这些数据库后可以一次性重新运行它们?

这是常规维护备份操作吗?如果没有,那么它必须添加一个子句,否则它会断开备份链

作为定期维护备份,这相当糟糕:

  • 它会忽略每个数据库恢复模型(可能不同)
  • 它在安排完整/差异/日志备份方面做得不好(即使用了太多的磁盘空间,导致了太多的灾难恢复数据丢失)
  • 这不是错误安全的,一个db错误将使整个循环失败
  • 它不会清理生成的文件名(例如,名为
    [a:b]
    的数据库将创建无效的文件名并始终失败)
  • 它不维护旧备份,也不从过时备份中回收磁盘空间
  • 它不允许像这样的事情
  • 在与数据库相同的磁盘上进行备份是一种无用的安全错觉,您将丢失磁盘上的所有数据
但归根结底,根本问题是你从错误的角度看待它。您的目标不是制定备份计划,而是制定恢复计划。请在此处阅读更多:。顺便说一句,你也需要一个
master
的恢复计划


至于您关于索引的问题,我认为您根本不了解SQL Server备份是如何工作的。从这里开始:

数据库备份确实包含索引。这非常相关,我重复一遍:备份数据库时,该数据库中的索引包含在备份中。至少,SQL Server是这样的。嗯。。。有人告诉我我不能备份索引!:(但我猜我听错了。谢谢你的澄清。太好了!@Legend我想你需要去了解消息来源。:-)事情是这样的。我正在努力寻找源头。当我找到它的时候,我会把它贴在这里,现在我绝望了!我不可能得出这样的结论,因为我是SQL Server新手:)谢谢您提供了详细的指针列表。我将浏览这些链接。我的场景是这样的:我将从帐户A迁移到帐户B(在同一台机器上),但我使用帐户A创建了这些数据库。但在我放弃A之前,我不知道B是什么。我不确定是否仍然可以从B访问这些DBs,因为我是从A中创建的。因此,我试图做的是准备一个迁移计划,而不是一个精确的备份计划。如果你认为这可以简化,请告诉我。我仍将使用同一台机器,但登录名不同。是的,迁移计划与备份计划有所不同。首先也是最重要的一点:您是否有现有的备份计划?这个迁移计划会毁掉它,因为它会破坏备份链,您必须仅对COPY\u使用
。无论如何,我建议您使用此选项,以防以后在有维护计划的服务器上再次重用迁移代码。除迁移之外,还存在热备份替代方案,如日志传送或镜像
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 

SET @path = 'C:\Backup\'  

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')  

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