如何准确的清理数据库

如何准确的清理数据库,第1张

用金山卫士或360卫士就能轻松清理。电脑内的各种缓存是由于电脑长时间运行的各种程序所形成的。如果您的电脑存在很多这样的缓存数据,可以下载安装金山卫士、或360安全卫士来解决。以金山卫士为例,打开金山卫士后可以看到上面有个 一键清理垃圾 的按钮,用鼠标左键单击这个按钮,软件就会自动对电脑系统内的缓存进行清理。

-- 清空日志

--压缩日志及数据库文件大小

/--特别注意

请按步骤进行,未进行前面的步骤,请不要做后面的步骤

否则可能损坏你的数据库

--/

selectfromsysfiles

--1清空日志

DUMPTRANSACTIONusernameWITHNO_LOG

--2截断事务日志:

BACKUPLOGusernameWITHNO_LOG

--3收缩数据库文件(如果不压缩,数据库的文件不会减小

-- 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件

--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

-- 也可以用SQL语句来完成

--收缩数据库

DBCCSHRINKDATABASE(username)

--收缩指定数据文件,1是文件号,可以通过这个语句查询到:selectfromsysfiles

DBCCSHRINKFILE(2)

--4为了最大化的缩小日志文件(如果是sql70,这步只能在查询分析器中进行)

-- a分离数据库:

-- 企业管理器--服务器--数据库--右键--分离数据库

-- b在我的电脑中删除LOG文件

-- c附加数据库:

-- 企业管理器--服务器--数据库--右键--附加数据库

-- 此法将生成新的LOG,大小只有500多K

-- 或用代码:

-- 下面的示例分离username,然后将username中的一个文件附加到当前服务器。

execsp_dboptionusername,'singleuser',true

a分离

EXECsp_detach_db@dbname='username'

b删除日志文件

execmasterxp_cmdshell'delD:\ProgramFiles\SQL\database\username_LOGldf'

c再附加

EXECsp_attach_single_file_db@dbname='username',

@physname='D:\ProgramFiles\SQL\database\username_DataMDF'

--5为了以后能自动收缩,做如下设置:

-- 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

--SQL语句设置方式:

EXECsp_dboption'数据库名','autoshrink','TRUE'

--6如果想以后不让它日志增长得太大

-- 企业管理器--服务器--右键数据库--属性--事务日志

--将文件增长限制为xM(x是你允许的最大数据文件大小)

--SQL语句的设置方式:

alterdatabase数据库名modifyfile(name=逻辑文件名,maxsize=20)

使用pl/sql developer 可以很容易添加定时执行的Oracle存储过程

一个例子:

Sql代码

begin

sysdbms_jobsubmit(job => :job,

what => 'RATINGJOB_PRESS;',

next_date => to_date('01-01-4000', 'dd-mm-yyyy'),

interval => 'TRUNC(SYSDATE+1)');

sysdbms_jobbroken(job => :job,

broken => true,

next_date => to_date('01-01-4000', 'dd-mm-yyyy'));

commit;

end;

如果数据库是安装在你机器上的

那么你可以暂时把MYSQL关闭

然后进入安装目录

找到data文件夹

这里面就是放置数据库文件的。。你会看到data里面每一个文件夹都对应你一个数据库名称

把他们删除就好了

就彻底没了

不过可别把mysql这个文件夹删了

还有别的文件

比如err别乱删哦。

如果这个你不会

或者说文件在使用删除不了

那么你就用mysql的可视化工具

比如mysql-front

51

进去删除

效果都是一样。

在生产环境运行Airflow一段时间后,由于定时Job会在DagRun,TaskInstance等表插入大量的数据,会逐渐拖慢Airflow系统的内部SQL查询,进一步会影响前端管理页面的响应速度,所以需要定时清理不需要的 历史 数据,来保证前端管理页面的响应速度。

根据Airflow版本的不同,分为110(V1)版本和20之后(V2)的版本两种,代码有细微差异。

V2

V1

使用方法:

1 将上面的代码复制到一个新py文件airflow_db_cleanup_dagpy,保存在DAG目录下。

2 可以通过在Airflow变量里增加一个变量max_metadb_storage_days来配置元数据保留天数,如果不配置这个变量,默认是90天。

3 可以修改 schedule_interval变量来设置DAG执行时间,目前是每天执行一次,在UTC时间的8点半,北京时间下午4点半。

注意事项:

1 请根据你Airflow实际上线时间来判断,将要被删除的数据量的大小,如果数据量很大,会导致Job卡住或者响应变慢,建议在调度的低峰时间或者分批删除数据。分批删除的方法是,通过调整变量max_metadb_storage_days来控制删除的数据的时间范围,比如先删除1年前的,再删除6个月-1年之间的,最后删除6个月到3个月的数据。

2 如果有每季度执行一次的任务,需要将max_metadb_storage_days调大至120天,否则可能会导致最近一次执行的DagRun被清理后,Dag又重新被触发一次。原因是Scheduler会持续检查每个DAG是否满足执行条件,如果找不到DagRun记录,会认为该Dag还没有被执行过,从而又执行一次。

这个根据数据量来的:

若数据不大:

用crontab 写个脚本语言,先获取当前时间 比如php 为$day=inter(date("d",time()));//获取当前日期

if($day=1){//判断是否是月初

do{//数据大分页删除;根据时间取

$return = delData(time<strtotime(“-3 month”));

}while($total >(page-1)每页数量);

}

2定时存储过程

CREATE EVENT `e_call` ON SCHEDULE EVERY 3 MONTH eENDS 'time' ON COMPLETION NOT PRESERVE ENABLE DO call p_chk();

用C#中的定时方法,设置定时,比如一周清理一次。

意思就是当前日期减去设计的清理间隔时间大于零,那么执行方法。

那么就在一周的时间内调用delete 方法。不知你是的net ,winform还是控制台应用程序?前二者方法差不多,控制台的话跟一楼的方法差不多。

以上就是关于如何准确的清理数据库全部的内容,包括:如何准确的清理数据库、sql数据库满了怎么清理、oracle中通过存储过程对表数据进行定时清理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存