目前,我正在接pipe负责在不同平台上备份超过250台服务器的人员,直到我们聘用replace人员。 我的主要问题是:
如果我们使用备份软件(如Symantec备份执行程序),是否会为MSSQL Server执行正确的备份?
我正在听堆栈溢出播客 ,我听到他们谈论你不能只备份SQL数据文件,但你也需要事务日志? 所以,如果我们只备份整台机器,我们是否能够正确地恢复它,因为我们将备份数据文件和日志?
谢谢!
人们备份数据库有两种方法。 一个是做数据库转储(我不是一个DBA,所以我不知道转储的机制)到一个文本文件,然后将该文件写入磁带。 其次是使用知道您正在使用的RDBMS的代理。 这两种方法都可以帮助您将所有数据恢复到工作状态。
您可以使用备份exec,但您需要确保MSSQL代理安装在这些系统上。 由于你有更多的250服务器,我猜你至less有一个工作人员的DBA – 我会问他们如何备份的SQL服务器正在完成。 他们应该知道一些基本知识,至less可以让你开始。 他们会知道你的前任是使用代理还是备份文本转储。
你需要在sql server上查看Brent Ozar的博客。 他是伟大知识的泉源。 这就是说,根据数据的新鲜程度,备份SQL服务器可能非常容易或者非常复杂。 如果你能处理一天丢失的数据,那么简单的SQL服务器备份工作的效果很好。 如果你需要确保你有一个更新的数据文件,那么日志传送可能是你的下一个最好的select。
找一个友好的DBA进行审计,确保你实际上获得了很好的备份。
如果将Backup Exec与SQL代理选项配合使用,则可以通过使用SQL API执行备份来正确备份数据库。 我认为播客中引用的SQL备份问题是关于离线备份(停止SQL Server然后备份文件)。 请注意,使用Backup Exec,您需要执行事务日志备份以及完整备份,以便停止事务日志的增长(如果数据库处于完全恢复模式)。 查看http://www.backupexecfaq.com/articles/concepts/backing-up-microsoft-sql-server.html了解更多深入的信息。
这是我使用的脚本:
DECLARE @DBName varchar(255)
DECLARE @DATABASES_Fetch int
DECLARE DATABASES_CURSOR CURSOR从sys.master_files中selectDATABASE_NAME = db_name(s_mf.database_id)s_mf其中 – 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
将DATABASES_CURSOR中的下一个FETCHinput到@DBName中
WHILE @@ FETCH_STATUS = 0 BEGIN declare @DBFileName varchar(256)
set @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 ENDclosuresDATABASES_CURSOR DEALLOCATE DATABASES_CURSOR
所有你必须从这里做的是恢复.BAK文件。 不需要备份exec