备份脚本

    -- ---创建测试库
    --CREATE DATABASE testDB

    --USE testDB
    --CREATE TABLE [testTable]([id] INT,[name] VARCHAR(100))
    --INSERT INTO [testTable] SELECT 1,'test'
 
 
    DECLARE @CurrentTime VARCHAR(50), @FileName VARCHAR(200)
    SET @CurrentTime = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120 ),'-','_'),' ','_'),':','')

        
    --(test 数据库完整备份)
    SET @FileName = 'D:\SQLDB\Backup\test_FullBackup_' + @CurrentTime+'.bak'
    BACKUP DATABASE [testDB]
    TO DISK=@FileName WITH FORMAT ,COMPRESSION


      --(test 数据库日志备份) 
    SET @FileName = 'D:\SQLDB\Backup\test_logBackup_' + @CurrentTime+'.bak'
    BACKUP log [testDB]
    TO DISK=@FileName WITH FORMAT ,COMPRESSION

主从还原备份

--如果在执行 RESTORE DATABASE 操作时遇到错误,如消息 3101(无法获得独占访问权)、消息 3013(异常终止)和消息 3117(无法还原日志或差异备份)
--将数据库设置为单用户模式,以确保没有其他用户连接到数据库,从而获得独占访问权。使用以下 SQL 语句:
--ALTER DATABASE testDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
--在成功还原数据库后,将其恢复为多用户模式,
--ALTER DATABASE testDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
----------------------------------------------------
--设备的硬件扇区大小为 4096,但块大小参数却指定了不兼容的替代值 512。请用兼容的块大小重新发出该语句,只改BLOCKSIZE = 512为BLOCKSIZE = 4096
--alter database xzccdev set multi_user
--RESTORE DATABASE [xzccdev]
--FROM DISK = N'D:\SQLDB\Backup\test_FullBackup_2026_01_13_174605.bak'
--WITH BLOCKSIZE = 4096, REPLACE, STATS = 5;
---------------------------------------------------------
USE [master]
RESTORE DATABASE [testDB] FROM  DISK = N'D:\SQLDB\Backup\test_FullBackup_2026_01_13_174605.bak' WITH  FILE = 1, 
MOVE N'testDB' TO N'D:\SQLDB\Data\testDB.mdf', 
MOVE N'testDB_log' TO N'D:\SQLDB\Data\testDB_log.ldf', 
NOUNLOAD,NORECOVERY,  REPLACE,  STATS = 5
go

--注意一定要用NORECOVERY来还原备份
USE [master]
RESTORE DATABASE [testDB] FROM  DISK = N'D:\SQLDB\Backup\test_logBackup_2026_01_13_174605.bak' WITH  FILE = 1, 
NOUNLOAD,NORECOVERY,  REPLACE,  STATS = 5


--使用 RESTORE VERIFYONLY 命令验证备份文件的完整性。
--RESTORE VERIFYONLY FROM DISK = N'D:\SQLDB\Backup\test_FullBackup_2026_01_13_174605.bak';
--RESTORE VERIFYONLY FROM DISK = N'D:\SQLDB\Backup\test_logBackup_2026_01_13_174605.bak';

--查询状态

--SELECT name, state_desc FROM sys.databases WHERE name = 'testDB';


-- 如果在执行 RESTORE DATABASE 时使用了 WITH NORECOVERY 选项,主数据库会保持在“正在还原”状态,直到执行 WITH RECOVERY 命令为止。从库会不用该语句,会自动同步
--RESTORE DATABASE testDB WITH RECOVERY;

 

posted on 2026-03-03 20:18  阿平_哥  阅读(0)  评论(0)    收藏  举报