菜鸟科技网

SQLServer命令行备份如何操作?

SQL Server 提供了多种备份方式,其中命令行备份(主要通过 sqlcmdosql 工具结合 T-SQL 命令实现)是一种灵活且适用于自动化场景的方法,通过命令行,管理员可以编写脚本实现定时备份、差异备份、事务日志备份等操作,尤其适合在服务器无图形界面的环境下使用,以下是关于 SQL Server 命令行备份的详细说明。

SQLServer命令行备份如何操作?-图1
(图片来源网络,侵删)

命令行备份的基本语法

SQL Server 命令行备份的核心是通过 T-SQL 的 BACKUP DATABASEBACKUP LOG 语句实现,结合 sqlcmd 工具执行,基本语法如下:

sqlcmd -S 服务器名 -U 用户名 -P 密码 -Q "BACKUP DATABASE 数据库名 TO DISK = '备份文件路径' [WITH 选项]"
  • -S:指定 SQL Server 实例名(如 localhost服务器名\实例名);
  • -U-P:分别用于指定登录用户名和密码(若使用 Windows 身份验证,可省略 -U-P,改用 -E);
  • -Q:表示执行 T-SQL 命令后退出;
  • BACKUP DATABASE:备份完整数据库,BACKUP LOG 备份事务日志;
  • TO DISK:指定备份文件的路径(需包含文件扩展名,如 .bak);
  • WITH 子句:可配置备份选项,如 INIT(覆盖现有备份文件)、NOINIT(追加到文件)、COMPRESSION(压缩备份)等。

常见备份类型及示例

完整数据库备份

完整数据库备份是备份整个数据库的数据和日志,适合定期全量备份,示例:

sqlcmd -S localhost -U sa -P 123456 -Q "BACKUP DATABASE [TestDB] TO DISK = 'D:\Backup\TestDB_Full.bak' WITH INIT, NAME = 'TestDB完整备份', COMPRESSION"
  • INIT:覆盖同名的备份文件(若省略,则追加到文件);
  • NAME:为备份操作指定描述性名称;
  • COMPRESSION:启用压缩以减少备份文件大小。

差异备份

差异备份仅备份自上次完整备份后发生更改的数据页,需先执行一次完整备份,示例:

sqlcmd -S localhost -U sa -P 123456 -Q "BACKUP DATABASE [TestDB] TO DISK = 'D:\Backup\TestDB_Diff.bak' WITH DIFFERENTIAL, NAME = 'TestDB差异备份'"
  • DIFFERENTIAL:指定差异备份,依赖最近的完整备份。

事务日志备份

事务日志备份备份自上次日志备份后的所有事务日志,需数据库恢复模式为“完整”或“批量日志恢复”,示例:

SQLServer命令行备份如何操作?-图2
(图片来源网络,侵删)
sqlcmd -S localhost -U sa -P 123456 -Q "BACKUP LOG [TestDB] TO DISK = 'D:\Backup\TestDB_Log.trn' WITH NAME = 'TestDB日志备份', NOINIT"
  • NOINIT:追加到现有日志备份文件(避免覆盖)。

备份到网络路径

备份文件可存储在网络共享目录中,需确保 SQL Server 服务账户对该路径有写入权限,示例:

sqlcmd -S localhost -U sa -P 123456 -Q "BACKUP DATABASE [TestDB] TO DISK = '\\ServerName\Share\TestDB_Network.bak' WITH COMPRESSION"

备份选项说明

选项 说明
INIT 覆盖备份文件,若文件存在则删除原有内容(默认为 NOINIT
NOINIT 追加备份到文件末尾,保留原有内容
COMPRESSION 启用备份压缩(需 SQL Server 企业版或标准版)
NAME = '备份名' 为备份操作指定逻辑名称,便于管理
DESCRIPTION = '描述' 添加备份的描述信息(可选)
STATS = 10 每备份 10% 的数据输出一次进度信息(便于监控大备份进度)
CHECKSUM 在备份过程中计算校验和,验证数据完整性

自动化备份脚本示例

通过批处理脚本(.bat)结合 sqlcmd 可实现定时备份,创建 backup.bat 文件:

@echo off
set "DBName=TestDB"
set "BackupPath=D:\Backup"
set "Date=%date:~0,4%%date:~5,2%%date:~8,2%"
set "FullBackup=%BackupPath%\%DBName%_Full_%Date%.bak"
set "DiffBackup=%BackupPath%\%DBName%_Diff_%Date%.bak"
:: 执行完整备份
sqlcmd -S localhost -U sa -P 123456 -Q "BACKUP DATABASE [%DBName%] TO DISK = '%FullBackup%' WITH INIT, NAME = '%DBName%完整备份', COMPRESSION"
echo 完整备份已完成:%FullBackup%
:: 执行差异备份
sqlcmd -S localhost -U sa -P 123456 -Q "BACKUP DATABASE [%DBName%] TO DISK = '%DiffBackup%' WITH DIFFERENTIAL, NAME = '%DBName%差异备份'"
echo 差异备份已完成:%DiffBackup%
pause

将此脚本添加到 Windows 任务计划程序,即可实现定时自动备份。

相关问答FAQs

问题1:命令行备份时提示“拒绝访问”如何解决?
解答:通常是由于 SQL Server 服务账户对备份路径无写入权限,需确保:

SQLServer命令行备份如何操作?-图3
(图片来源网络,侵删)
  • 备份路径(如 D:\Backup 或网络共享)对当前登录用户(或 SQL Server 服务账户)具有“完全控制”权限;
  • 若使用网络路径,检查防火墙设置及共享文件夹的权限配置。

问题2:如何验证备份文件是否有效?
解答:可通过 RESTORE VERIFYONLY 命令验证备份文件的完整性,无需实际恢复数据库,示例:

sqlcmd -S localhost -U sa -P 123456 -Q "RESTORE VERIFYONLY FROM DISK = 'D:\Backup\TestDB_Full.bak'"

若执行后提示“数据库备份已验证”,说明备份文件有效;若报错,则可能存在文件损坏或权限问题。

分享:
扫描分享到社交APP
上一篇
下一篇