博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLSERVER 备份还原1
阅读量:4709 次
发布时间:2019-06-10

本文共 4684 字,大约阅读时间需要 15 分钟。

SQLSERVER 备份还原

  参考文献:

--概念讲解:http://www.jb51.net/article/31038.htm

--事务日志概念:http://www.cnblogs.com/CareySon/archive/2012/02/13/2349751.html(非常详细)

上面这些文章已经将得很详细了,小弟只是做一些总结和具体的实例演示;你可以先看看大神的,再看看小弟的,都会有收货

sqlserver 的备份可以很简单,也可以很难,就看你对他理解多少了!

A.恢复模式

              1.简单恢复模式(将不产生事务日志,无法进行事务日志备份,在简单恢复模式下,日志仅仅是为了保证SQL Server事务的ACID。并没有恢复数据的功能)

              2.完整恢复模式(完整备份并不像其名字“完整”那样备份所有部分,而是仅备份数据库本身,而不备份日志(虽然仅仅备份少量日志用于同步))

              3.大容量日志恢复模式 

SQL语句切换模式:

ALTER DATABASE NAME SET RECOVERY SIMPLE        --简单模式   ALTER DATABASE NAME SET RECOVERY FULL          --完整模式      ALTER DATABASE NAME SET RECOVERY BULK_LOGGED   --容量模式

B.各种备份  

              1.完整备份 (创建完一个新数据库之后,强烈建议甚至强制做一次完整备份)

              2.差异备份
              3.事务日志备份
              4.文件和文件组备份

 

使用下面的语句可以看出,那些数据库做过备份

SELECT * FROM MSDB.dbo.BACKUPSET

 C.参数讲解

 

              先讲解一些基本的语法和参数使用(主要是with 后面的参数)

               { NOINIT | INIT }

                控制备份操作是追加到还是覆盖备份介质中的现有备份集。 默认为追加到介质中最新的备份集 (NOINIT)。

 

  D.具体实例

 1.完整模式下使用事务日志备份和还原

CREATE DATABASE MC  GO  USE MC  GO   ALTER DATABASE MC SET RECOVERY FULL    BACKUP DATABASE MC  TO DISK='F:\TEST\MC.BAK'      CREATE TABLE STU(   ID INT IDENTITY(1,1),   NAME VARCHAR(100)   )   GO     INSERT INTO STU VALUES('LIUQI1')   INSERT INTO STU VALUES('LIUQI2')   INSERT INTO STU VALUES('LIUQI3')      --执行一次事务日志备份   BACKUP LOG MC   TO DISK='F:\TEST\LOG\MC.TRN'      --然后我们再插入第二数据    INSERT INTO STU  VALUES('SECONDE')    INSERT INTO STU  VALUES('SECONDE')    INSERT INTO STU  VALUES('SECONDE')    GO        --进行第二次事务日志备份;    BACKUP LOG MC    TO DISK='F:TEST\LOG\MC1.TRN'        --    SELECT * FROM STU    TRUNCATE TABLE STU    SELECT * FROM STU    --突然间,数据被全部删除了,幸好老子又备份;            --先分离数据库mc 如果觉得无用,可以直接删除    --先恢复完整备份的数据库;    --USE master     --GO    --DROP DATABASE MC        RESTORE DATABASE NEW_MC1    FROM DISK='F:\TEST\MC.BAK'    WITH REPLACE,NORECOVERY        RESTORE LOG NEW_MC1    FROM DISK='F:\TEST\LOG\MC.TRN'    WITH NORECOVERY        RESTORE LOG NEW_MC1    FROM DISK='F:\TEST\LOG\MC1.TRN'    WITH RECOVERY        USE NEW_MC1     GO    SELECT * FROM STU
View Code

 2.完整模式下使用事务日志备份和还原(将数据库恢复到指定的时间点

--1.首先创建一个数据库CREATE DATABASE MC67GO--2.设置数据库的恢复模式为:完整。ALTER DATABASE MC67 SET RECOVERY FULL--3.进行一次完整备份(这个是必须的)BACKUP DATABASE MC67TO DISK='F:\TEST\MC67.BAK'WITH INITGOUSE MC67GO--4.创建表,并插入测试数据;CREATE TABLE STU( ID INT , NAME VARCHAR(50))GOINSERT INTO STU VALUES(1,'刘奇1')INSERT INTO STU VALUES(2,'刘奇2')INSERT INTO STU VALUES(3,'刘奇3')INSERT INTO STU VALUES(4,'刘奇4')GO--5.现在延迟五秒种WAITFOR DELAY '00:00:05'SELECT * FROM STU--6.现在某个时间不小小心误删了数据TRUNCATE TABLE STUGOSELECT GETDATE() --2015-10-06 15:05:17.380--7.备份事务日志BACKUP LOG MC67TO DISK='F:\TEST\MC67_LOG.TRN'WITH FORMAT--8.先恢复原先的数据库;(也就是备份的)USE masterGOSP_DETACH_DB MC67,TRUE  ----分离数据库GORESTORE DATABASE NEWMC67FROM DISK='F:\TEST\MC67.BAK'WITH REPLACE, NORECOVERY  --这里要使用NORECOVERY--9.现在来恢复事务日志;RESTORE LOG NEWMC67FROM DISK='F:\TEST\MC67_LOG.TRN'WITH STOPAT='2015-10-06 15:04'--10测试USE NEWMC67GOselect * FROM STU
View Code

 3.简单模式下的差异备份和还原 (有缺陷)

   这种方式是有缺陷的,如:我们在每周一0点做一次完整备份,在周三0点和周五0点分别做差异备份。在简单恢复模式下,如果周六数据库崩溃。我们的恢复计划只有根据周一0点的做的完整备份恢复后,再利用周五0点的差异备份进行恢复.而周五0点之后到服务器崩溃期间所有的数据将会丢失。

   

 

 4.完整模式下的差异备份和还原

  这里值的注意是:如果进行了两次全备份,mc67_full1.bak 接着又进行一次全备份 mc67_full2.bak,而你的差异备份是在mc67_full2.bak之后额的,那么在进行还原的时候,只能使用mc67_full2.bak进行差异还原。,总之,差异备份是基于前一次的全备份而进行的差异备份

USE MASTERGOCREATE DATABASE MC67GO--USE MC67--GOCREATE TABLE SHOW(  ID INT IDENTITY(1,1),  INFO VARCHAR(100))--进行一次完整备份BACKUP DATABASE MC67 TO DISK='F:\TEST\MC67_FULL.BAK'--第一次添加数据      INSERT INTO SHOW VALUES('第一次添加数据')      INSERT INTO SHOW VALUES('第一次添加数据')      INSERT INTO SHOW VALUES('第一次添加数据')--第一次差异备份     BACKUP DATABASE MC67 TO DISK='F:\TEST\MC67_DIFF1.BAK'     WITH DIFFERENTIAL--第二次添加数据      INSERT INTO SHOW VALUES('第二次次添加数据')      INSERT INTO SHOW VALUES('第二次次添加数据')      INSERT INTO SHOW VALUES('第二次次添加数据')--第二次差异备份       BACKUP DATABASE MC67 TO DISK='F:\TEST\MC67_DIFF2.BAK'       WITH DIFFERENTIAL        --还原;第一差异备份的   USE master   GO   RESTORE DATABASE MC67_1 FROM DISK='F:\TEST\MC67_FULL.BAK'    WITH NORECOVERY,   MOVE 'MC67' TO 'F:\TEST\ONE\MC67.MDF',   MOVE 'MC67_LOG' TO 'F:\TEST\ONE\MC67_LOG.LDF'         RESTORE DATABASE MC67_1 FROM DISK='F:\TEST\MC67_DIFF1.BAK'   WITH RECOVERY      USE MC67_1    GO   SELECT * FROM SHOW   --结果:   /*      1    第一次添加数据     2    第一次添加数据     3    第一次添加数据      */   --还原第二次差异备份的数据   USE master   GO   RESTORE DATABASE MC67_2 FROM DISK='F:\TEST\MC67_FULL.BAK'    WITH NORECOVERY,   MOVE 'MC67' TO 'F:\TEST\TWO\MC67.MDF',   MOVE 'MC67_LOG' TO 'F:\TEST\TWO\MC67_LOG.LDF'         RESTORE DATABASE MC67_2 FROM DISK='F:\TEST\MC67_DIFF2.BAK'   WITH RECOVERY       USE MC67_2   GO   SELECT * FROM SHOW   --结果:   /*    1    第一次添加数据    2    第一次添加数据    3    第一次添加数据    4    第二次次添加数据    5    第二次次添加数据    6    第二次次添加数据      */
View Code

转载于:https://www.cnblogs.com/mc67/p/4832413.html

你可能感兴趣的文章
vue踩坑记-在项目中安装依赖模块npm install报错
查看>>
mySQL优化, my.ini 配置说明
查看>>
mysql系统数据库
查看>>
alwayson监控
查看>>
浅谈 js 函数调用
查看>>
进程与线程
查看>>
python面试题
查看>>
MySQL 数据备份与还原
查看>>
Android Camera2 参数调节关键字翻译集合,常用关键字解析
查看>>
NSMutableString 常用操作
查看>>
php-Mysql示例1
查看>>
python第三方库requests学习笔记
查看>>
Oracle基本查询语言
查看>>
Word直接发表博客测试
查看>>
最短路模板
查看>>
sublime text2 中Emmet常用的技巧 和快捷键
查看>>
[PWA] Caching with Progressive libraries
查看>>
Intellij IDEA Run Dashboard面板
查看>>
_event_team
查看>>
SetProcessAffinityMask的问题
查看>>