对于大的数据库,备份花费的时间是非常多的,而且很耗费资源。如果能让备份跑的更快?
可以使用下面的参数:
1. 将数据库备份多到个文件(多个磁盘)
2.启用压缩功能(2008,R2之后都有)
3. 使用参数maxtransfersize和buffercount
4.调整备份侧率,使用文件和文件组备份
BUFFERCOUNT :指定用于备份操作的 I/O 缓冲区总数。可以指定任何正整数;但是,较大的缓冲区数可能导致由于 Sqlservr.exe 进程中的虚拟地址空间不足而发生“内存不足”错误。
缓冲区使用的总计空间由下面公式确定:buffercount*maxtransfersize。
将数据库备份到多个文件多个磁盘,这样做有几个好处:
1.备份到多个磁盘,可以充分利用磁盘IO,减少备份时间
2. 另外如果单个磁盘空间不足的话,备份到多个文件可以使备份文件变小,解决磁盘空间问题,另外通过网络移动到其他地方也比较方便。
3.备份到多个文件可以SQL Server使用多个备份线程,提供效率。
我们可以使用Management studio或者T-SQL实现备份到多个文件:
T-SQL:
BACKUP DATABASE [AdventureWorks]TO DISK=N'D:\MSSQL\MSSQL10.SQL2K8\MSSQL\Backup\AdventureWorks.bak',
DISK = N'E:\MSSQL\MSSQL10.SQL2K8\MSSQL\Backup\advantureWorks1.bak',
DISK = N'F:\MSSQL\MSSQL10.SQL2K8\MSSQL\Backup\AdventureWorks2.bak'WITHNOFORMAT,NOINIT,
NAME = N'AdventureWorks-Full Database Backup',SKIP,NOREWIND,NOUNLOAD, STATS= 10
GO
还原也很简单:
restore database [AdventureWorks]from
DISK = N'D:\MSSQL\MSSQL10.SQL2K8\MSSQL\Backup\AdventureWorks.bak',
DISK = N'E:\MSSQL\MSSQL10.SQL2K8\MSSQL\Backup\advantureWorks1.bak',
DISK = N'F:\MSSQL\MSSQL10.SQL2K8\MSSQL\Backup\AdventureWorks2.bak'withreplace
另外注意一点:在备份的时候使用CHECKSUM选项,虽然会增加备份的时间,但是可以保证备份的质量。如果最后还原的时候发现备份无法使用是很糟糕的。