我目前正在接替一位负责备份不同平台上 250 多台服务器的人,直到我们找到替代者。我的主要问题是:
如果我们使用备份软件(例如 Symantec Backup Exec),它是否会对 MSSQL Server 执行正确的备份?
我在听Stack Overflow 播客,我听他们说不能只备份 SQL 数据文件,还需要事务日志?那么,如果我们只备份整个机器,我们是否能够正确恢复它,因为我们将备份数据文件和日志?
谢谢!
答案1
人们备份数据库的方法有两种。一种是将数据库转储(我不是 dba,所以我不确定转储的机制)到文本文件,然后将该文件写入磁带。第二种是使用知道您正在使用的 RDBMS 的代理。这两种方法都可以为您提供将数据库恢复到工作状态所需的一切。
您可以使用备份执行程序,但您需要确保在这些系统上安装了 MSSQL 代理。由于您有 250 多台服务器,我猜您至少有一名 dba 在职 - 我会问他们目前如何备份 SQL 服务器。他们应该至少了解一些基础知识,足以让您入门。他们会知道您的前任是否使用代理或备份文本转储等信息。
答案2
您需要查看 Brent Ozar 关于 SQL Server 的博客。他知识渊博。话虽如此,备份 SQL Server 可能非常简单,也可能非常复杂,具体取决于需要的数据有多新鲜。如果您可以处理一天的丢失数据,那么简单的 SQL Server 备份就很好用。如果您需要确保您拥有更新的数据文件,那么日志传送可能是您的下一个最佳选择。
找一个友好的 DBA 来审核并确保您确实获得了良好的备份。
答案3
如果您使用带有 SQL 代理选项的 Backup Exec,那么它确实会通过使用 SQL API 执行备份来正确备份数据库。我认为播客中提到的 SQL 备份问题与脱机备份有关(停止 SQL 服务器然后备份文件)。请注意,使用 Backup Exec,您需要执行事务日志备份以及完整备份,以阻止事务日志增长(如果您的数据库处于完整恢复模式)。请查看http://www.backupexecfaq.com/articles/concepts/backing-up-microsoft-sql-server.html了解更深入的信息。
答案4
这是我使用的脚本:
声明@DBName varchar(255)
声明@DATABASES_Fetch int
声明数据库光标 CURSOR FOR 从 sys.master_files s_mf 中选择数据库名称 = db_name(s_mf.database_id) 其中 -- ONLINE s_mf.state = 0
-- Only look at databases to which we have access and has_dbaccess(db_name(s_mf.database_id))
= 1
-- Not master, tempdb or model and db_name(s_mf.database_id) not in ('Master','tempdb','model') group by s_mf.database_id order by 1
打开数据库游标
从 DATABASES_CURSOR 获取下一个到 @DBName
WHILE @@FETCH_STATUS = 0 BEGIN 声明 @DBFileName varchar(256)
设置 @DBFileName = datename(dw, getdate()) + ' - ' + replace(replace(@DBName,':','')'\','')+'.BAK'exec ('BACKUP DATABASE [' + @DBName + '] TO DISK =
N''$systemdrive$:\somewhereFun\' + @DBFileName + ''' WITH NOFORMAT, INIT, NAME = N''' + @DBName + '-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 100')
FETCH NEXT FROM DATABASES_CURSOR INTO @DBName END
关闭数据库游标 释放数据库游标
您只需恢复 .BAK 文件即可。无需备份执行程序