set @TSQL= 'BACKUP DATABASE ['+@DBName +'] TO DISK = N'''+@FilePath+'\'+@DBName+'_backup_'+@Date+'.bak'' WITH NOFORMAT, NOINIT, NAME = N'''+@FilePath+'\'+@DBName+'_backup_'+@Date+''', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10'
我有上面的T SQL语句来备份我的数据库。在两次运行相同的语句时,将覆盖先前的备份集并增加备份的大小。在上面的陈述中,我对NOINIT和SKIP的互动感到困惑。
根据MSDN:
NOINIT:控制备份操作是附加还是覆盖备份媒体上的现有备份集。默认设置是附加到媒体上的最新备份集。
但是我注意到我的备份大小在第二次备份同一个数据库时呈指数级增长。
任何人都可以解释这个命令的运作方式吗?
答案 0 :(得分:1)
在.bak文件中你可以有多个备份,所以基本上你在指定INIT / NOINIT时设置的是覆盖完整的.bak文件(这是备份集而不是单个备份)或者只是放置你的备份在其中使用以前的备份。 尝试恢复备份,您将看到可以从备份集中选择特定备份。
SKIP会在覆盖之前检查备份的到期日期,以防您选择这样做,而不是将备份相互追加到.bak文件中。
此处有更多详细信息(我猜你已经访问了它,但以防万一):https://msdn.microsoft.com/en-US/library/ms186865(v=sql.120).aspx