SQL Server数据库备份与还原详解

本文主要讲解SQL Server数据库备份与还原的详细执行语句与操作方法。

数据库备份语句演示

复制代码
BACKUP DATABASE [testdb]
TO DISK = N'D:\Backup\testdb.bak'
WITH
  NAME = N'testdb-bak',
  NOFORMAT, INIT, SKIP,
  CHECKSUM,
  COMPRESSION,
  STATS = 5;

语句解析

BACKUP DATABASE testdb:"testdb"就是要备份的数据库名;

TO DISK = N'D:\Datab\Backup\testdb.bak':要备份的具体目标路径,testdb.bak就是存在硬盘上的bak文件的真实的物理文件名称;

NAME = N'testdb-bak':这个名字"testdb-bak"写在 bak 文件内部,给这一次备份起一个备注标签,用来区分同一个bak文件里面的多份备份集,不影响磁盘上的物理文件名;

NOFORMAT:不对备份介质(即bak文件)做格式化处理,保留bak文件的介质头部信息,只是操作备份集,不会销毁介质本身;

FORMAT:把整个备份介质(即bak文件)做格式化,销毁介质上原有的所有备份内容,生成一个全新的备份介质头信息;

NOINIT:如果这个bak文件在目标路径存在,则会追加一份备份进去,一个 bak 里面存多个备份集,后续还原操作容易选错备份集;

INIT:覆盖目标路径下这个bak文件内所有旧备份集,bak里只保留本次这一份备份,数据库迁移场景建议选择这个设置;

SKIP:跳过备份过期校验,配合"INIT"设置使用;

CHECKSUM:开启数据校验,建议保留该设置;

STATS = 5:每5%输出一次进度,方便查看备份进度;

COMPRESSION:压缩备份包,节省磁盘空间。

数据库还原语句演示

复制代码
USE master;
GO
ALTER DATABASE testdb SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

RESTORE DATABASE testdb
FROM DISK = 'D:\Backup\testdb.bak'
WITH 
REPLACE,
MOVE N'testdb' TO N'C:\Park\data\testdb.mdf',
MOVE N'testdb_log' TO N'C:\Park\data\testdb_log.ldf',
STATS=5;

ALTER DATABASE testdb SET MULTI_USER;
GO

语句解析

USE master:切换到系统主库master,还原数据库命令必须在master主库上下文执行,这是硬性要求,不能在testdb库里面执行,否则会报数据库正在使用无法独占的错误;

GO:批处理分隔符,意即先把前面语句单独执行完,再执行后面的语句;

ALTER DATABASE testdb SET SINGLE_USER WITH ROLLBACK IMMEDIATE:把目标库testdb切换成单用户模式,"SINGLE_USER"表示同一时间只允许1个连接访问testdb库,"WITH ROLLBACK IMMEDIATE"表示立刻强制断开所有已经连接到testdb上的会话,未提交的事务直接回滚,不等待业务操作执行完成,目的是杜绝比如Navicat或页面等其他程序占用数据库,以防止数据库还原操作执行失败;

RESTORE DATABASE testdb:这是核心还原命令,把数据库备份文件还原到名为testdb的数据库;

FROM DISK = 'D:\Backup\testdb.bak':指定备份文件的物理路径为当前这台服务器的"D:\Backup\testdb.bak"位置;

WITH:后面跟着数据库还原操作的配置参数,多个参数用英文逗号隔开;

REPLACE:强制覆盖开关,如果目标数据库已经存在testdb数据库,直接覆盖原有的mdf/ldf文件,原有数据全部清空,如果不加该参数,若目标库已存在则还原操作会直接报错以阻止覆盖原有数据库;

MOVE 【备份包内部逻辑文件名】 TO 【服务器物理文件路径】:【N'testdb'】表示备份包内部的逻辑文件名,可以执行【RESTORE FILELISTONLY FROM DISK='D:\Backup\testdb.bak'】语句查询LogicalName得到逻辑文件名,【C:\Park\data\testdb.mdf】表示执行还原操作时数据文件存放的物理路径,同理,【testdb_log】是备份包内日志逻辑名,对应日志物理文件【C:\Park\data\testdb_log.ldf】;

STATS=5:表示打印输出进度,还原操作每完成5%,就输出一行进度日志,对于大库还原来说很实用;

ALTER DATABASE testdb SET MULTI_USER:还原成功后,把数据库切回多用户模式,单用户模式下,除了当前连接,其他程序都连不上库,多用户模式下,业务系统等其他程序才能正常访问testdb库;

GO:批处理结束标记。

相关推荐
DevOpenClub42 分钟前
高考一分一段 API:分数查位次、科类枚举与历史对照
linux·数据库·高考
Java后端的Ai之路1 小时前
Java并发编程07-等待通知机制优化循环等待
java·数据库·python
AllData公司负责人1 小时前
AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地
大数据·arm开发·数据库·人工智能·oceanbase·kingbase
bksczm1 小时前
C++Redis开发(Ubuntu 22.04)
数据库·redis·缓存
zhangjw341 小时前
1-6 PostgreSQL 特色类型实战:数组、JSON & JSONB、枚举、范围类型
数据库·postgresql
杨云龙UP1 小时前
Oracle 同义词(SYNONYM)详解及 Toad for Oracle SQL 智能补全配置实战
运维·数据库·sql·oracle·同义词·toad·toad for oracle
倔强的石头_2 小时前
MongoDB迁移的新选项:在金仓KES上,用SQL管理文档数据
数据库
loulanyue_2 小时前
AI Agent记忆从不是向量库:Oracle拆解读写分离与记忆晋升门,终结无脑存聊天的伪智能——读Wojtek Pluta演讲
数据库·人工智能·oracle
曼岛_2 小时前
[图解密码学]第5章 对称加密基础
java·数据库·密码学