数据库备份

sql 复制代码
--全量备份
backup database master to disk='E:\database\full\master.bak' with init;
--差异备份
backup database master to disk='E:\database\diff\master.diff' WITH differential;
--事务日志备份示例:
BACKUP LOG master TO DISK = 'C:\Backup\MyDatabase_Log.trn' WITH COMPRESSION;




dp:
-- 快速完整备份
BACKUP DATABASE MyDB TO DISK = 'C:\Backup\MyDB.bak' WITH INIT;
-- 追加备份(不覆盖)
BACKUP DATABASE MyDB TO DISK = 'C:\Backup\MyDB.bak' WITH NOINIT;
-- 备份时跳过一致性检查(紧急情况)
BACKUP DATABASE MyDB TO DISK = 'C:\Backup\MyDB.bak' WITH CONTINUE_AFTER_ERROR;
-- 备份到网络路径
BACKUP DATABASE MyDB TO DISK = '\\Server\Share\MyDB.bak' WITH COMPRESSION;

在目标服务器恢复,并移动文件(若路径不同):

sql 复制代码
RESTORE DATABASE [目标数据库名] 
FROM DISK = N'E:\Backup\源数据库名.bak'
WITH 
    MOVE '源数据库逻辑文件名' TO 'D:\Data\目标数据库名.mdf',
    MOVE '源数据库日志逻辑文件名' TO 'L:\Log\目标数据库名_log.ldf',
    RECOVERY, -- 恢复后立即可用
    STATS = 5; -- 每完成5%显示进度

分离与附加 (最快速):

sql 复制代码
-- 1. 在源服务器分离数据库 (将导致数据库暂时离线)
USE [master];
GO
ALTER DATABASE [源数据库名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
EXEC sp_detach_db @dbname = N'源数据库名';
GO

-- 2. 将数据库的MDF和LDF文件复制到目标服务器

-- 3. 在目标服务器附加数据库
USE [master];
GO
CREATE DATABASE [目标数据库名] ON 
    (FILENAME = 'E:\Data\源数据库名.mdf'),
    (FILENAME = 'E:\Log\源数据库名_log.ldf')
FOR ATTACH;
GO

注意检查:

sql 复制代码
--在恢复前,务必先验证备份文件,避免恢复一个已损坏的备份。
-- 1. 验证备份文件完整性
RESTORE VERIFYONLY FROM DISK = N'D:\Backup\YourDatabase.bak';

-- 2. 查看备份文件内的备份集信息(关键!)
RESTORE HEADERONLY FROM DISK = N'D:\Backup\YourDatabase.bak';
-- 查看结果中的 Position, BackupType, BackupStartDate 等字段
-- Position=1 通常是完整备份




--恢复完成后,必须验证数据的完整性和一致性。
-- 1. 运行DBCC CHECKDB进行完整性检查
DBCC CHECKDB ([YourDatabase]) WITH NO_INFOMSGS, ALL_ERRORMSGS;-- 如果返回结果没有错误信息,通常表示数据库逻辑一致。

-- 2. 检查关键表的数据行数
SELECT COUNT(*) AS RowCount FROM [YourDatabase].[dbo].[YourImportantTable];

-- 3. 验证关键存储过程或视图是否正常
EXEC [YourDatabase].[dbo].[YourCriticalStoredProcedure];

--数据库备份跟踪表:

sql 复制代码
--数据库备份跟踪表

select getdate(),bs.media_set_id  , bs.backup_set_id,
bs.server_name,bs.user_name,database_name = bs.database_name,
'开始时间' =  bs.backup_start_date ,
结束时间 = bs.backup_finish_date ,
[耗时(秒)] = DATEDIFF(second,bs.backup_start_date,bs.backup_finish_date),
存储文件 = bmf.physical_device_name,
back_type = 
	(case when bs.[type]='D' then '完整备份'
	 when bs.[type]='I' then '差异备份'
	 when bs.[type]='L' then 'log'
	 when bs.[type]='F' then 'File/Filegroup'
	 when bs.[type]='G' then 'Differential File'
	 when bs.[type]='P' then 'partial'
	 when bs.[type]='Q' then 'Differential partial'
	else ''
	end),
	[文件大小(G)] = cast(round(((bs.backup_size/1024)/1024/1024),2)  as decimal(18,2)),
	bs.database_version , 
	数据库版本号 = bs.software_major_version  
from msdb.dbo.backupmediafamily bmf with(nolock)
inner join
msdb.dbo.backupset bs with(nolock)
on bmf.media_set_id  = bs.media_set_id  
where bs.backup_start_date>=getdate()- 7
相关推荐
做萤石二次开发的哈哈1 小时前
萤石蓝海AIoT一站式工作台计费说明
网络·数据库·萤石开放平台·蓝海aiot一站式工作台
竹枝溪1 小时前
MySQL数据库零基础入门
数据库·sql·mysql·navicat·ddl·dml·dql
龙仔7251 小时前
人大金仓Kingbase V8 自动全量备份部署完整笔记
数据库·笔记·备份·人大金仓
王志来137944730081 小时前
从选型到交付,工控服务器机箱一站式采购平台匀天如何实现服务闭环?
数据库
ShuiShenHuoLe1 小时前
HmarkX(码笺)的本地数据库模块重构实战
数据库·oracle·重构
Databend1 小时前
从 Kafka 到 Databend Cloud:万亿级 Agent Trace 接入链路的工程实践
大数据·数据库·agent
倔强的石头_2 小时前
SQL Server数据迁移,不只是把数据搬过去
数据库
MC皮蛋侠客2 小时前
Redis 系列(五):持久化——RDB、AOF 与混合持久化
数据库·redis·bootstrap
acd120092 小时前
Redis 缓存和数据库一致性,到底怎么搞?
数据库·redis·缓存
sugar__salt2 小时前
MyBatis-Plus 从入门到实战:高效简化数据库开发的完整指南
数据库·spring boot·mybatis·数据库开发