如何在mysql中定时清除所有库中指定的表中的数据,而不用每个库都写一遍定时任务,求大神指点!!!

如何在mysql中定时清除所有库中指定的表中的数据,而不用每个库都写一遍定时任务,求大神指点!!!,第1张

这种定时任务一般都是写shell脚本来解决,通过定时执行shell脚本来实现定时任务。

可以在shell脚本中,指定需要批量删除的数据库,将它们设置为变量,然后写清空表的语句,就可以实现定义在变量中的数据库批量删除。

你可以先写一个脚本进行测试,可以读取到一个数据库就行,然后将多个数据库放到数组中,循环遍历即可。

最后测试没问题的话,就可以将shell脚本添加到crontab定时任务中,就可以实现每2天定时清空数据表。

如果是就一次的话就是

waitfor

delay

'02:00'

exec

sp_MSForEachTable

就是两分钟后执行存储过程sp_MSForEachTable,这个存储过程是微软为公开的,不过貌似不是很好用。

如果是在特定时间,比如晚上

10:20

BEGIN

WAITFOR

TIME

'22:20'

EXECUTE

sp_MSForEachTable

END

你可以自建一个存储过程,sp_DeleteAllData

CREATE

PROCEDURE

sp_DeleteAllData

AS

EXEC

sp_MSForEachTable

'ALTER

TABLE

?

NOCHECK

CONSTRAINT

ALL'

EXEC

sp_MSForEachTable

'ALTER

TABLE

?

DISABLE

TRIGGER

ALL'

EXEC

sp_MSForEachTable

'DELETE

FROM

?'

EXEC

sp_MSForEachTable

'ALTER

TABLE

?

CHECK

CONSTRAINT

ALL'

EXEC

sp_MSForEachTable

'ALTER

TABLE

?

ENABLE

TRIGGER

ALL'

EXEC

sp_MSFOREACHTABLE

'SELECT

*

FROM

?'

GO

一般用触发器来实现,也可以通过设置代理的方法实现:

如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,

可以用管理->SQL Server代理->作业来实现。

1、管理->SQL Server代理->作业(按鼠标右键)->新建作业->

2、新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号->

分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server用户[也可选其它的登录]->

描述[填写本次工作详细描述内容];

[ 创建作业分类的步骤:

SQL Server代理->作业->右键选所有任务->添加、修改、删除 ]

3、新建作业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型[Transact-SQL(TSQL)脚本]->

数据库[要 *** 作的数据库]->命令

[ 如果是简单的SQL直接写进去即可,也可用打开按钮输入一个已写好的*.sql文件

如果要执行存储过程,填 exec p_procedure_name v_parameter1,[ v_parameter2…v_parameterN]

] ->确定

(如果有多个步骤,可以再次调用下面的新建按钮;也可以对已有的多个步骤插入、编辑、删除);

4、建作业属性(调度)->新建调度->名称[自定义调度名称]->启用的方框内是勾号->调度->反复出现->

更改[调度时间表]->确定

(如果只要保存此作业,不要定时做可以把启用的方框内是勾号去掉);

5、建作业属性(通知)->用默认的通知方法就好[当作业失败时,写入Windows应用程序系统日志] ->确定。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6776511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存