使用SQL Server 20xx维护计划实现数据库定时自动备份 - [Database]

时间:2024.4.20

使用SQL Server 2008维护计划实现数据库定时自动备份 - [Database]

SQL Server中出于数据安全的考虑,所以需要定期的备份数据库。而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求管理员每天守到晚上1点去备份数据库。要实现数据库的定时自动备份,最常用的方式就是使用SQL Server代理中的作业。启动SQL Server Agent服务,然后在其中新建作业,作业中添加1个备份步骤,类型是T-SQL脚本,然后在命令中输入如下SQL语句,该语句实现了对数据库 TestDB1的完整备份,备份文件在C盘Backup文件夹中,文件名就是TestDB1+当时备份的日期字符串.bak。

declare @name varchar(250
set @name='C:\Backup\TestDB1_'+ 
convert(varchar(50),getdate(),112)+'.bak' 
BACKUP DATABASE [TestDB1] TO  
DISK = @name 
WITH NOFORMAT, NOINIT,  
NAME = N'TestDB1-完整 数据库 备份', 
SKIP, NOREWIND, NOUNLOAD

创建好步骤以后,接下来就是创建计划,创建计划的操作十分简单,界面上说明的很详细了,我就不多说了。另外还可以配置警报和通知,不过一般很少用这个。

使用SQL作业中执行SQL脚本进行备份的方法虽然已经很简单了,但是至少还是要去写BACKUP脚本,这点有些人觉得不爽,那有没有更简单,更懒的方法来实现数据库的自动定时备份呢?有,那就是“维护计划”。

“维护计划”是在SSMS的对象资源管理中“管理”节点下面。使用维护计划可以通过可视化的操作,只点点鼠标就可以创建数据库维护的SSIS包,然后仍然是通过SQL Server作业的方式来运行。维护计划与前面说到的备份方法本质的不同就是:维护计划是SSIS包,上面的是T-SQL脚本。

假设我们现在有一个生产系统的数据库需要进行备份,由于数据库中的数据很多,数据文件很大,如果每次都进行完整备份那么硬盘占用了很大空间,而且备份时间很长,维护起来也很麻烦。对此我们可以采用完整备份+差异备份的方式,每周日进行一次完整备份,每天晚上进行一次差异备份。使用差异备份可以减小备份文件的大小,同时还可以提高备份的速度,不过缺点就是必须使用上一次完整备份的文件和差异备份的文件才能还原差异备份时刻的数据库,单独只有差异备份文件是没有意义。

下面我来讲一下如何通过维护计划来实现完整备份+差异备份:

(1)在SSMS的对象资源管理器中右击“维护计划”,选择“维护计划向导”,系统将弹出向导窗口,如图:

这里向导已经告诉我们维护计划到底能够干什么了,其中最后一项“执行数据库备份”正是我们所需要的。

(2)点击“下一步”按钮,进入选择计划属性窗口,输入计划的名称,由于我们的计划包括2部分:完整备份和差异备份,这2部分的执行计划是不一样的,一个是一周执行一次,另一个是一天执行一次,所以要选择“每项任务单独计划”,如图:

(3)单击“下一步”按钮,选择维护任务,这里就是可以在维护计划中执行的任务,如果你想执行的任务在这里没有,那就还是不用维护计划来做,自己写 SSIS包或者SQL语句吧。我们要执行的任务都在这里,选中这2个任务,如图:

(4)单击“下一步”进入选择维护任务顺序的界面,这里我们可以看到选中的任务出现在列表中,但是我们并不能调整其顺序,那是因为在步骤2中我们选择的是每项任务单独计划,所以这2个任务是独立的,没有先后顺序可言。如果当时选择的是另一个选项,那么这里就可以调整顺序了。

(5)选中“备份数据库(完整)”然后单击“下一步”按钮,系统将转到定义完整备份任务的界面,如图:

这个界面实在太长了,我把任务栏隐藏了都显示不完,出现了滚动条,这里我们选择要进行备份的数据库,选择为每个数据库创建备份文件,文件保存在C盘 Backup目录下,扩展名是bak,出于安全起见,我们可以选中“验证备份完整性”,当然也可以不选。在SQL2008中提供了压缩备份的新特性,使得备份文件更小,备份速度更快,这里我们就是由压缩备份。最后是选择执行计划,我这里选的是每周日晚上0点的时候执行。

(6)单击“下一步”按钮,进入差异备份任务的设置界面,和上一步的界面是一样的,操作也是一样的,计划这里我们可以选择除了周日以外的每天进行差异备份,如图:

(7)单击“下一步”按钮,进入选择报告选项,这里我们可以将这个维护计划的执行报告写入文本文件中,也可以讲报告通过电子邮件发送给管理员。如果要发送邮件的话,那么需要配置SQL Server的数据库邮件,另外还要设置SQL Server代理中的操作员,关于邮件通知操作员的配置网上也讲的比较多,我这里就不详述了。

(8)单击“下一步”按钮,进入“完成该向导”的界面,系统列出了向导要完成的工作,如图:

(9)单击“完成”按钮,向导将创建对应的SSIS包和SQL作业:

(10)完成后,我们再刷新下对象资源管理器,我们可以看到对应的维护计划和该计划对应的作业:

现在维护计划是创建好了,急着想看看执行后的效果如何,不需要等到晚上12点去了,在“作业”下面,右击 DbBackupPlan.Subplan_1,选择“作业开始步骤”系统便立即执行该作业,系统运行完成后,我们便可在C:\Backup文件夹下面有我们做的完整备份的备份文件。

以上的操作可以是纯粹的无键盘操作,不用写任何脚本,只需要点点鼠标即可。

这里需要注意的是,我们如果不是周日制定的该维护计划,那么制定该维护计划前一定要做个完整备份,而且该备份至少要保留到下周,不然到时候出了问题,发现只有这几个工作日的差异备份,而上一次的完整备份又被删了,那就郁闷了。

除了使用维护计划向导以外,我们还可以直接新建维护计划,也可以修改意见创建的维护计划。我们就以修改维护计划为例。对于前面创建好的完整备份+ 差异备份维护计划,现在我们需要每周对数据库备份进行一次清理,在完整备份完成后,要将1个月前的备份删除掉。那么我们只需要修改一下维护计划即可,具体操作如下:

(1)右击我们的维护计划,在弹出式菜单中选择“修改”选项,系统将新建一个选项卡来显示当前的维护计划。如图:

左下角是可用的维护计划组件,右下面板是维护计划的流程设置面板,其上面就是该计划的子计划列表。

(2)选中Subplan_1子计划,也就是每周完整备份的子计划,将“清除历史记录”任务从工具箱中拖拽到计划面板中,然后在面板中单击“备份数据库(完整)”组件,系统将显示一个绿色的箭头,将绿色箭头拖拽到“清除历史记录”组件上,如图:

也就是说在成功完整备份了数据库后,接下来才执行清除历史记录任务。

(3)右击“清除历史记录”任务,在弹出式菜单中选择“编辑”选项,系统将弹出清除历史记录任务设置窗口,如图:

这里既可以清除历史记录日志,也可以删除硬盘上的历史数据。这里我们要删除4周前的历史备份数据,单击“确定”回到计划面板,我们可以看到原本“清除历史记录”任务上的小红叉不见了。单击“保存”按钮,该计划便保存起来。(说明:我在SQL2008中文版虚拟机里面做的时候一旦修改维护计划,保存的时候就报错灾难性故障,不过我本机的英文版是正常的,不知道是我虚拟机的问题还是中文版的Bug,反正在英文版里面是对的。)

这样修改后,以后我们都不用手动去删除那些很久以前的数据库备份了,系统在执行完备份后就会删除那些满足条件的备份数据。

另外如果用过SSIS的人应该知道,一个任务在完成时是绿色箭头,如果是失败时是红色箭头,我们这里也可以设置,如果上一步骤失败,那么将执行什么操作,双击绿色箭头,在弹出的对话框中选择约束选项中的值为“失败”即可。如图:

在维护计划中也可以设置很复杂的逻辑运算和执行流程,就和SSIS设计一样的,毕竟本质上他们都是在设计SSIS包。


第二篇:数据库总结


一:简单的SQL语句

1).select语句

1.查找表中所有数据

select * from 表名;如:select * from emp:

2.查找字段

select 字段1,字段2 from 表名 如:select empon,ename from emp;

3.包含算术表达式的select语句

A.对number类型数据可以使用算术操作符创建表达式(+、-、*/);

B.对date类型数据可以使用部分运算符创建表达式(+、-)。 如:select ename,sal*12 from emp;

4.包含连接表达式的select

使用方式:select ename || "work at" || job from emp;

5.空值的使用

A.包括空值的任何算术表达式都等于空;

B.包括空值的连接表达式等于与空字符串连接,也就是原来的字符串

6.字段别名

A.改变列的标题头显示;

B. 用于表示计算结果的含义,对于复杂的表达式尤为有用;

C.作为列的别名,被改语句的其他部分引用;

D.如果别名中使用特殊字符,或者是强制大小写敏感,或包含空格时,都需要加双引号

如:select ename “姓名”,sal “工资” from emp;

7.distinct--去掉重复值

注意:

A、distinct关键字一定是放在整个查询表的最前面;

B、作用范围--他后面的整个查询列表字段的组合。

8.带有限制条件的查询where

A、between、、、and、、、

select ename,sal from emp where sal between 1600 and 3000;

B、in

select * from emp where empno in(7788,7789,7790);

C、like

a--“%”可以表示零个或多个字符

b--"_"可表示一个字符

如:select * from emp where ename like ?_A%?;

D、null与not null

注:对于空值的等值比较,不能使用“=”

select * from emp where name is not null;

E、and、or、not

select * from emp where sal >1600 and job = 'CLERK';

SELECT * FROM EMP WHERE SAL > 1600 AND JOB = 'CLERK'; SELECT * FROM EMP WHERE JOB NOT IN ('CLERK','MANAGER'); 注意:优先级从高到低是:比较运算--not--and--or

9.对查询数据的排序

select * from emp order by ename;

注:A、asc:升序,默认;desc:降序

B、数字按照大小排序,日期按照时间的先后顺序排序,字符串按照字符的ASCII码进行排序

select * from emp order by ename ,sal desc;

注:ename为首先排序,sal为辅助排序

SQL中的函数

一、单行函数

1、字符类型函数(A-c)字符类,(D-J)字符处理类

A、LOWER 将字符串强制转换为小写

SELECT * FROM EMP WHERE LOWER(ename) = 'black';

B.UPPER 转换为大写

SELECT * FROM EMP WHERE UPPER(ename) = 'BLACK';

C.INITCAP 首字母大写

Select ename,Initcap(ename) from emp;

D.CONCAT 连接两个不同的列,CONCAt只能接受两个参数 Select CONCAT(EMPNO,ENAME) From EMP

Select CONCAT('A','B') From dual

E.SUBSTR 截取字符串,返回字串

select SUBSTR(ENAME,2) from EMP--从第2个位置截到末尾 select SUBSTR(ENAME,2,3) from EMP--从第2个位置截取3个 F.LENGTH 字符串长度

select ename,length(ename) from emp;

G.INSTR 找到字串位置

select ename,instr(ename,'A') from emp;

H.LPAD/RPAD 字符串填充补位(左/右)

select LPAD(SAL,10,'*') from emp;--将sal显示为10位,不足的位置在左边补上*

select RPAD(SAL,10,'*') from emp;

I.TRIM 两边虑空

select trim(' a b c ') from dual;

使用ltrim和rtrim过滤一边的空格

select ltrim(' a b c ') from dual;

J.REPLACE 替换字符串字串

select ename, replace(ename,'A','*') from emp;

2.数字类型函数

A.round对数字进行四舍五入

select round(23.345,2) "小数后两位",round(23.345,0) "整数",round(23.345,-1) "十位" from dual;

B.trunc对数字执行截取

C.mod求模

select mod(102,3) from dual;

3.日期类型函数

A.MONTHS_BETWEEN计算两个日期之间相差的月份

select ename,hiredate,MONTHS_BETWEEN(sysdate,hiredate) from emp;

B.ADD_BETWEEN在制定日期上增加或者减去若干个月得到新的日期

select ename,hiredate,add_between(hiredate,3) from emp;

C.NEXT_DAY计算从指定日期开始遇到的第一个指定星期几的日期 select next_day(sysdate,'星期一') from dual;

D.LAST_DAY计算指定日期所在月份的最后一天的日期

select last_day(sysdate) from dual;

E.ROUND取得按年或者月或者日等四舍五入得到的新的日期 Select ROUND(Sysdate,'yyyy') From DUAL;

Select ROUND(Sysdate,'MM') From DUAL;

F.TRUNC取得按年或者月或者日等截取得到的新的日期

Select trunc(Sysdate,'yyyy') from dual;

4.转换函数

A.TO_CHAR --to_char(date,'fmt')

用法:转换数字为字符;转换日期为字符

注:必须用单引号括起来,并且是大小写敏感;可包含任何有效的日期格式;有一个fm元素去掉前面的零

Select TO_CHAR(SAL,'$999,999.00') From EMP

Select TO_CHAR(Sysdate,'"今天是"YYYY-MM-DD DAY HH24:MI:SS AM') From DUAL

B.TO_DATE将字符串转换为日期格式

select to_char('01-5月-04') from dual;

select to_char('20xx-3-21','YYYY-MM-DD') from dual;

C.TO_NUMBER将字符串转换为数字格式

select to_number('$123,456.00','$999,99.00') from dual;

5.其他函数

A.NVL(exp1,exp2)将空值转换为一个替换值(支持多种类型,但是两个

参数的类型必须匹配)

如:

NVL(comm,0),NVL(hiredate,'01-JAN-97'),NVL(job,'no job yet')

B.NVL2(exp1,exp2,exp3)

如果exp1不为null,返回exp2,为null,返回exp3

C.NULLIF(exp1,exp2)

比较两个两个表达式,如果相等返回空值,如果不相等返回第一个表达式

select ename,NULLIF(length(ename),5) from emp;

D.coalesce(exp1,exp2,...expn)

用来匹配多个字段的值,如果表达式1的值为null,显示表达式2的值,如果表达式2也为空,显示表达式3的值,依次类推

E.case条件表达式

Select job,

Case JOB

When 'CLERK' Then '店员'

When 'SALESMAN' Then '销售'

Else '临时工'

End

From emp;

F.decode函数

Select job,

decode(JOB,

'CLERK','店员' ,

'SALESMAN' ,'销售',

'临时工')

From emp;

二、分组函数

1.概念:对一组数据返回一个值;

2.常用的分组函数

A.AVG(字段)求平均值

select avg(sal) from emp;

B.COUNT(*)/COUNT(字段)统计记录数

注:a--count(*)求实所有符合条件的记录数;

b--count(字段)求出所有符合条件并且字段值不为空的记录数 select count(*) from emp;

select count(ename) from emp;

C.MAX(字段)求最大值

select max(sal) from emp;

D.MIN(字段)求最小值

select min(sal) from emp;

E.SUM(字段)求和

select sum(sal) from emp;

3.分组函数和distinct关键词的搭配

Select COUNT(Distinct SAL) From EMP

4.组函数与空值

select count(comm) from emp

空值不参与运算,直接被过滤掉

5.分组数据

group by子句

SELECT COUNT(*) FROM EMP GROUP BY DEPTNO

6.使用group by规则

A.group by后面的字段不必显示在select列表中

B.反之则不行

也就是说:select后面的字段必须在group by子句中出现

例外的是:

在组函数(count,max,min等)中出现的字段除外

7.关于group by条件分组的问题

A.group by可以和where来搭配

where只能在group by的前面

Select JOB From EMP Where SAL>20xx Group By JOB;

group by后面不能有where

B.where子句中不能包括组函数

条件的表达只能使用having来表示

Select DEPTNO,Max(SAL),Min(SAL) From EMP Group By DEPTNO Having Max(SAL)>20xx;

多表连接和子查询

一、多表连接

1、等值连接

select emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno 注:多个条件之间可以用and连接

2、非等值连接

elect e.*,g.grade From emp e,salgrade g Where e.sal Between g.losal And g.hisal

3.外连接:把不满足条件的数据也显示出来

Select * From EMP E,DEPT D Where E.DEPTNO=D.DEPTNO(+); Select * From EMP E,DEPT D Where E.DEPTNO(+)=D.DEPTNO;

4、自连接:从同一个表中联合查询

select e.ename,m.ename from emp e,emp m where e.mgr = m.mgr;

--SQL99

5.cross join--交叉连接

其结果是笛卡尔集,是没加任何条件所产生出来的数据集合 select * from emp cross join dept;

6.NATURAL JOIN--自然连接

默认情况下,以两个表中有相同名称的列来进行连接查询

7.using

select * from emp join dept using(deptno);

8.on--指定连接具体条件

select * from emp e join dept d on d.deptno = e.deptno and e.depno = 20;

9.left/right outer join on

返回表格中左/右边的行和右/左边的数值,如果没有搭配的行,则返回零

select * from emp e left/right join dept d on (d.deptno = e.deptno);

10.full outer join on

返回两个表格中所有的行,用零填满每一个空格.

select * from emp e full outer join dept d on (d.deptno = e.deptno);

二、子查询

1.语句内部的字句

select * from emp where sal>(select sal from emp where ename='BLEAK');

2.子查询的基本使用规则

A.出现在where条件中的子查询要用括号括起

B.子查询总是先于主语句运行

C.习惯上把子查询放在条件的右边

D.单行子查询使用单行操作符

E.多行子查询使用多行操作符

3.单行

select 字段 from 表 where 字段【=、>、>=、<、<=、<>】【单项(询) 4,多行

A.IN:与表中的任何一个值相等

select * from emp where deptno in(select deptno from emp where job = 'CLERK') and job <>'CLERK';

B.ALL:与子查询返回的任意一个值比较

>all :大于子查询数据中的最大值

<all:小于子查询数据中的最小值

C.ANY:与子查询返回的每一个值比较

>any:大于子查询数据中的最小值

<any:小于子查询数据中的最大值

更多相关推荐:
SQL Server 20xx维护计划实现数据库定时自动备份

在SQLServer中出于数据安全的考虑所以需要定期的备份数据库而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行所以我们不可能要求管理员每天守到晚上1点去备份数据库要实现数据库的定时自动备份最常用的方...

SQLServer20xx数据库维护计划

SQLServer20xx数据库完整与差异备份图解李厚明一管理右键维护计划维护计划向导二名称一栏输入计划名称一个计划可以有多个任务可以更改计划三选择计划任务如下图四安排任务的执行顺序五定义每项任务六设置报告存放...

使用SQL Server 20xx维护计划实现数据库定时自动备份

使用SQLServer20xx维护计划实现数据库定时自动备份Database在SQLServer中出于数据安全的考虑所以需要定期的备份数据库而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行所以我们不可...

使用SQL Server 20xx维护计划实现数据库定时自动备份

使用SQLServer20xx维护计划实现数据库定时自动备份Database20xx0412Tag版权声明转载时请以超链接形式标明文章原始出处和作者信息及本声明在SQLServer中出于数据安全的考虑所以需要定...

数据库自动备份sqlserver20xx

SQLSERVER20xx自动备份图解教程SQLSERVER20xx自动备份图解教程本文来源本文关键字SQLSERVER20xx自动备份维护计划SQLSERVER20xx自动备份创建SQLSERVER20xx自...

SQL Server 20xx备份维护计划

SQLServer20xx备份维护计划作为一名DBA他们最常见的日常任务是1定期完成数据库的完全备份或差异备份2定期清理备份文件因为存储空间有限可能只需要保存一个时期段内的文件比如一周内或一月内而如何做到这两点...

SQL Server 20xx 无法添加维护计划的解决方法

SQLServer20xx无法添加维护计划的解决方法Thespecified39subsystem39isinvalidvalidvaluesarereturnedbyspenumsqlagentsubsyst...

win20xx r2 安装sqlserver 20xx问题的解决方法

win20xxr2安装sqlserver20xx问题的解决方法1点击安装提示兼容问题然后没有然后了没有反应了解决方法直接运行光盘MicrosoftSQLServer20xx四合一ENTERPRISEX86SET...

【SQL Server备份恢复】维护计划实现备份

SQLServer备份恢复维护计划实现备份每周数据库完整备份每天差异备份每小时日志备份在数据库管理中数据库备份是非常重要的通过维护计划向导可以很方便的完成数据库备份下面的例子说明了如何实现数据库的备份具体的备份...

sqlserver自动备份设置

SQLSERVER20xx自动备份操作方法SQLServer20xx的定期备份是通过创建维护计划来实现的主要有两种方式1维护计划向导2新建维护计划用户手工创建注意1如果想在SQLServer20xx中使用维护计...

SQLServer20xx中的SSIS维护计划

SQLServer的每一个版本都已经逐渐变得越来越自我调整和自我维护了然而对于基本维护的需求例如删除索引碎片更新统计数据检查数据库一致性以及进行备份仍然是不会消失的你可以想象一下索引的维护就像是给你的汽车换油备...

SQL Server 20xx备份与删除维护计划

SQLServer20xx备份维护计划作为一名DBA他们最常见的日常任务是1定期完成数据库的完全备份或差异备份2定期清理备份文件因为存储空间有限可能只需要保存一个时期段内的文件比如一周内或一月内而如何做到这两点...

sql server 2008维护计划(9篇)