精华内容
下载资源
问答
  • 实际上,使用sql server的管理工具便可轻松实现对数据库备份和定期清理备份的需求,操作简洁而好理解,并且网上关于这块的教程比比皆是,图文并茂。但有时可能会有少许的情况会被客户要求用脚本去实现这块的功能,...

    实际上,使用sql server的管理工具便可轻松实现对数据库备份和定期清理备份的需求,操作简洁而好理解,并且网上关于这块的教程比比皆是,图文并茂。但有时可能会有少许的情况会被客户要求用脚本去实现这块的功能,研究许久后,记录一下。

    一、创建“数据库备份”存储过程

    1、在需要备份的数据库中执行
    2、需要备份到的位置自行更改

    create procedure pro_backup
    as
    begin
    
    DECLARE
    @Path VARCHAR (1000),
    @FileName VARCHAR (1000),
    @TIME VARCHAR (20),
    @DATABASE VARCHAR (50) = DB_NAME()
    SET @TIME = CONVERT (VARCHAR (1024),GETDATE(),120)
    SET @TIME = REPLACE(@TIME, ':', '')
    SET @TIME = REPLACE(@TIME, '-', '')
    SET @TIME = REPLACE(@TIME, ' ', '')
    SET @Path = 'D:\Backup\' + @DATABASE + '\'
    
    DECLARE @TEMP TABLE(A INT,B INT,C INT)
    INSERT @TEMP exec master.sys.xp_fileexist @Path
    if not EXISTS(select * from @TEMP where B = 1)
    exec master.sys.xp_create_subdir @Path
    		
    SET @FileName = @Path + @DATABASE + '_' +@TIME + '.BAK' 
    BACKUP DATABASE [@DATABASE] TO DISK = @FileName WITH INIT,
    NOUNLOAD,
    NAME = N'',
    NOSKIP,
    STATS = 10,
    NOFORMAT
    
    End
    
    二、创建“清除备份文件”的存储过程
    create procedure pro_del_backup
    as
    Begin
      
    DECLARE 
    @olddate datetime ,
    @path varchar(1000),
    @extension_name varchar(1000),
    @database varchar(50) = DB_NAME()
    
    set @path = 'D:\Backup\' + @database
    set @extension_name = 'bak'
    set @olddate = DATEADD(D, -7, GETDATE())
    
    EXECUTE master.dbo.xp_delete_file 0,@path,@extension_name,@olddate
    
    end
    

    几点说明:
    1、此处设置的是每执行一次此函数,就删除七天前的以bak结尾的文件(即数据库备份文件)
    2、对sqlserver DATEADD()函数的说明:参数说明链接
    3、master.dbo.xp_delete_file:用于删除文件,该存储过程有5个参数

    参数排序 参数说明 有效值
    第一个 文件类型 有效值是0和1,0是指备份文件,1是指报表文件
    第二个 目录路径 目录中的文件会被删除,目录路径必须以“\”结尾
    第三个 文件的扩展名 常用的扩展名是’BAK’ 或’TRN’
    第四个 Date 早于该日期创建的文件将会被删除
    第五个 子目录 bool类型,0是指忽略子目录,1是指将会删除子目录中的文件
    三、定时任务脚本

    此定时任务设置的是每天晚上凌晨执行上述两条存储过程。
    结果是先备份数据库,然后再删除超过7天的备份文件。

    USE [msdb]
    GO
    
    BEGIN TRANSACTION
    DECLARE @ReturnCode INT,
    		@sql varchar(100) = N'exec test.dbo.pro_backup;exec test.dbo.pro_del_backup'
    SELECT @ReturnCode = 0
    
    IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
    BEGIN
    EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    END
    
    DECLARE @jobId BINARY(16)
    EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'job_backup_database', 
    		@enabled=0, 
    		@notify_level_eventlog=2, 
    		@notify_level_email=0, 
    		@notify_level_netsend=0, 
    		@notify_level_page=0, 
    		@delete_level=0, 
    		@description=N'', 
    		@category_name=N'[Uncategorized (Local)]', 
    		@owner_login_name=N'sa', @job_id = @jobId OUTPUT
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'step_1', 
    		@step_id=1, 
    		@cmdexec_success_code=0, 
    		@on_success_action=1, 
    		@on_success_step_id=0, 
    		@on_fail_action=2, 
    		@on_fail_step_id=0, 
    		@retry_attempts=0, 
    		@retry_interval=0, 
    		@os_run_priority=0, @subsystem=N'TSQL', 
    		@command=@sql, 
    		@flags=0
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'schedule_1', 
    		@enabled=1, 
    		@freq_type=4, 
    		@freq_interval=1, 
    		@freq_subday_type=1, 
    		@freq_subday_interval=1, 
    		@freq_relative_interval=0, 
    		@freq_recurrence_factor=0, 
    		@active_start_date=20191210, 
    		@active_end_date=99991231, 
    		@active_start_time=0, 
    		@active_end_time=235959
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    COMMIT TRANSACTION
    GOTO EndSave
    QuitWithRollback:
        IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
    EndSave:
    
    GO
    
    exec msdb.dbo.sp_update_job @job_name='job_backup_database',@enabled=1
    

    解释说明(由上往下):
    1、@sql定义的是要执行的一、二两部创建的存储过程;
    2、上面主要脚本解读:
    第一段:创建一个job
    第二段:在该job下创建一个步骤(我试过在该job下再添加第一个步骤,但失败了,具体原因不清楚,所以后面的处理方式是在一个步骤中执行两个存储过程)
    第三段:创建一个调度,将上面创建的job添加到该调度里,并设置执行时间和间隔数。关于调度参数的设置:链接
    此处有个小技巧:可以在sqlserver管理工具中设置好job和调度后,右键查看脚本,把设置好的调度复制过来使用即可。(虽然有点本末倒置,但也是为了完成这个脚本)
    最后一行:执行该job。

    展开全文
  • zabbix运行一段时间之后,会留下大量的历史数据,会发现zabbix的数据库一直在增大。运行3个月后笔者的数据库达到了5G,可能造成系统性能下降,查看历史数据时查询速度缓慢。 zabbix里面最大的表就是历史记录的表了,...
  • crontab 定时清理数据库数据

    千次阅读 2014-10-27 17:12:34
    昨天写了个shell脚本,功能是定期清理3天前的数据记录。 脚本如下: #! /bin/bash   HOSTNAME="172.16.10.202" #数据库信息 PORT="3306" USERNAME="root" PASSWORD="uarefool"   DBNAME="vooleperf" 
    昨天写了个shell脚本,功能是定期清理3天前的数据记录。
    脚本如下:
    #! /bin/bash
     
    HOSTNAME="172.16.10.202"                   #数据库信息
    PORT="3306"
    USERNAME="root"
    PASSWORD="uarefool"
     
    DBNAME="vooleperf"                      #数据库名称
    TIME=`date +"%y""%m"`
    TABLENAME="exceptionlog$TIME"                #数据库中表的名称
     
    DEL_TIME=`date -d "-3 day" +"%y"-"%m"-"%d"`
    echo $DEL_TIME
     
    TIME=`date -d "-1 month" +"%y""%m"`
    DEL_TABLE="exceptionlog$TIME"
     
    del_sql="delete from $TABLENAME where stamp<=\"$DEL_TIME\""
    echo $del_sql
    mysql -h${HOSTNAME}   -P${PORT}   -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${del_sql}"
     
    del_sql="drop table $DEL_TABLE"
    echo $del_sql
    mysql -h${HOSTNAME}   -P${PORT}   -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${del_sql}"
     
    执行成功后,crontab -e
    在最后一行加入:
    */1 * * * * /home/liuting/test/1.sh >/dev/null 2>&1
    保存,退出。
    发现问题,shell脚本并没有执行。
    cat /var/log/cron | grep "1.sh"
    看看是否执行了!
    结果是crontab执行了。
    后来修改crontab -e,变为:
    */1 * * * * /home/liuting/test/1.sh >/tmp/mysql.log 2>&1
    保存,退出。此目的是看crontab的看看输出日志,就知道原因了!
    原因就在于无法找到mysql。
    然后,查找mysql安装目录:
    [root@localhost root]# find / -name mysql -print
    /var/lib/mysql
    /var/lib/mysql/mysql
    /var/lock/subsys/mysql
    /etc/rc.d/init.d/mysql
    /etc/logrotate.d/mysql
    /usr/bin/mysql
    /usr/lib/mysql
    /usr/share/mysql
    [root@localhost root]# find /usr -name mysqldump -print
    /usr/bin/mysqldump
    查到mysqldump路径
    按着上面的方法,我找到mysql的路径,并修改shell脚本。如下:
    #! /bin/bash
     
    CMD_MYSQL=/opt/mysql/bin/mysql
     
    HOSTNAME="172.16.10.202"                   #数据库信息
    PORT="3306"
    USERNAME="root"
    PASSWORD="uarefool"
     
    DBNAME="vooleperf"                      #数据库名称
    TIME=`date +"%y""%m"`
    TABLENAME="exceptionlog$TIME"                #数据库中表的名称
     
    DEL_TIME=`date -d "-3 day" +"%y"-"%m"-"%d"`
    echo $DEL_TIME
     
    TIME=`date -d "-1 month" +"%y""%m"`
    DEL_TABLE="exceptionlog$TIME"
     
    del_sql="delete from $TABLENAME where stamp<=\"$DEL_TIME\""
    echo $del_sql
    $CMD_MYSQL -h${HOSTNAME}   -P${PORT}   -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${del_sql}"
     
    del_sql="drop table $DEL_TABLE"
    echo $del_sql
    $CMD_MYSQL -h${HOSTNAME}   -P${PORT}   -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${del_sql}"
     
    运行成功了,和环境变量没有任何关系,呵呵,解决!
    展开全文
  • 使用WP-Optimize插件定期自动清理和优化数据库 WP-Optimize是一款非常不错的数据库清理以及优化工具,他不仅可以清楚综上所述所有的臃肿数据,还能够在清理之后优化数据库。 并且具有定时任务功能,只需要一...

    使用WP-Optimize插件定期自动清理和优化数据库

    WP-Optimize是一款非常不错的数据库清理以及优化工具,他不仅可以清楚综上所述所有的臃肿数据,还能够在清理之后优化数据库。

    并且具有定时任务功能,只需要一次设置,就可以按照你所设置的时间定期的清理和优化数据库,非常方便易用

    他还可以根据设置保护你的数据,比如定时保留几周前的数据。

    安装WP-Optimize:在wordpress后台搜索WP-Optimize安装

    或者点击这里网盘下载后台安装

     

    WP-Optimize使用方法

    安装好了插件之后进入插件面板控制界面,插件安装好了就是简体中文的 ,非常容易就可以看懂了:

    WP-Optimize1

    如上图所示,黑色字体的选项是常规选项,可以随时清理,红色字体的Pingbacks和Trackbacks也可以常规清理,其他的选项如果数据较大的话,也可以清理一下。

    进入选项中的设置,我们进行预设清理和保存最近的数据设置,让查件定期帮我们清理和优化数据库:

    WP-Optimize2

    上图所示,查看注释你能很清楚的看到各个功能的选项,其中禁用/引用通告就是Pingbacks和Trackbacks,可以直接禁用,因为之前有爆出Pingbacks和Trackbacks会有一个漏洞使得你的wordpress网站变成肉鸡。,其他自己按照自己的需求设置好就行了。

    右侧自动预设清理和优化,也可以按照自己的要求填写好,保存即可。

    使用好这款插件之后我们的网站就能够定期的清理和优化好数据库了。

    希望这篇文章对你有所帮助。

    展开全文
  • 定期拍摄RDS数据库的快照,清理它们,并与选定的帐户共享。 使用它来自动化您的开发和/或QA数据库创建,而不是强迫他们使用去年创建的数据库,该数据库由于随机的善意行为而保持了良好的状态。 开发人员和质量检查...
  • 另外,在这里提醒大家,你的数据库的急剧增大可能还和过多的论坛短消息、论坛日志有关,请站长一定要根据你的服务器空间、服务器性能情况定期清理论坛的短消息,删除一定日期前的所有短消息(包括未读的...
  • crontab 定时清理数据库数据---mysql

    千次阅读 2017-03-22 16:15:05
    昨天写了个shell脚本,功能是定期清理3天前的数据记录。 脚本如下: #! /bin/bash   HOSTNAME="172.16.10.202" #数据库信息 PORT="3306" USERNAME="root" PASSWORD="uarefool"   DBNAME="vooleperf"
    昨天写了个shell脚本,功能是定期清理3天前的数据记录。
    脚本如下:
    #! /bin/bash
     
    HOSTNAME="172.16.10.202"                   #数据库信息
    PORT="3306"
    USERNAME="root"
    PASSWORD="uarefool"
     
    DBNAME="vooleperf"                      #数据库名称
    TIME=`date +"%y""%m"`
    TABLENAME="exceptionlog$TIME"                #数据库中表的名称
     
    DEL_TIME=`date -d "-3 day" +"%y"-"%m"-"%d"`
    echo $DEL_TIME
     
    TIME=`date -d "-1 month" +"%y""%m"`
    DEL_TABLE="exceptionlog$TIME"
     
    del_sql="delete from $TABLENAME where stamp<=\"$DEL_TIME\""
    echo $del_sql
    mysql -h${HOSTNAME}   -P${PORT}   -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${del_sql}"
     
    del_sql="drop table $DEL_TABLE"
    echo $del_sql
    mysql -h${HOSTNAME}   -P${PORT}   -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${del_sql}"
     
    执行成功后,crontab -e
    在最后一行加入:
    */1 * * * * /home/liuting/test/1.sh >/dev/null 2>&1
    保存,退出。
    发现问题,shell脚本并没有执行。
    cat /var/log/cron | grep "1.sh"
    看看是否执行了!
    结果是crontab执行了。
    后来修改crontab -e,变为:
    */1 * * * * /home/liuting/test/1.sh >/tmp/mysql.log 2>&1
    保存,退出。此目的是看crontab的看看输出日志,就知道原因了!
    原因就在于无法找到mysql。
    然后,查找mysql安装目录:
    [root@localhost root]# find / -name mysql -print
    /var/lib/mysql
    /var/lib/mysql/mysql
    /var/lock/subsys/mysql
    /etc/rc.d/init.d/mysql
    /etc/logrotate.d/mysql
    /usr/bin/mysql
    /usr/lib/mysql
    /usr/share/mysql
    [root@localhost root]# find /usr -name mysqldump -print
    /usr/bin/mysqldump
    查到mysqldump路径
    按着上面的方法,我找到mysql的路径,并修改shell脚本。如下:
    #! /bin/bash
     
    CMD_MYSQL=/opt/mysql/bin/mysql
     
    HOSTNAME="172.16.10.202"                   #数据库信息
    PORT="3306"
    USERNAME="root"
    PASSWORD="uarefool"
     
    DBNAME="vooleperf"                      #数据库名称
    TIME=`date +"%y""%m"`
    TABLENAME="exceptionlog$TIME"                #数据库中表的名称
     
    DEL_TIME=`date -d "-3 day" +"%y"-"%m"-"%d"`
    echo $DEL_TIME
     
    TIME=`date -d "-1 month" +"%y""%m"`
    DEL_TABLE="exceptionlog$TIME"
     
    del_sql="delete from $TABLENAME where stamp<=\"$DEL_TIME\""
    echo $del_sql
    $CMD_MYSQL -h${HOSTNAME}   -P${PORT}   -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${del_sql}"
     
    del_sql="drop table $DEL_TABLE"
    echo $del_sql
    $CMD_MYSQL -h${HOSTNAME}   -P${PORT}   -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${del_sql}"
     
    运行成功了,和环境变量没有任何关系,呵呵,解决!
    展开全文
  • 1.打开smms,在主节点在新增job 2.输入job名称 3点击steps ,点击new ,输入名称,选择数据库,输入执行的脚本,点击ok ... ...定时任务就完毕了 Always on sqlserver集群清理事务日志:...1.备份数据库数据 2.备份数据
  • c#开发的数据库清理工具 可以定期按照配置文件清理数据 适合服务器数据清理 删除过期数据
  • 备份是必须的,当你的一个误操作导致数据丢失,这可能是灾难性的,是不被允许发生的,这时,我们必须要做好定期的备份工作,如我们可以每天0点为指定数据库做一个完整的备份,每周未在0点去清理上一周的备份文件,...
  • 近期涉及到一个业务,因为要在原来表的基础上进行增删改查并且需要重新建索引,分析...重新创建索引是不可能的,因为数据库数据量大; 该表后续增删改查都会越来越慢 03 解决方法 针对该问题,做了处理: 分析该数...
  • 清理数据策略

    2020-01-22 17:56:30
    清理数据的策略主要有两个方面:一个是数据库的数据,一个是硬盘数据(缓存数据也算) 3.如何清理? 清理数据的方法有很多,如果系统已经上线了,那么数据清理是作为该系统的一部分的。 最开始上线的时候,我们采用...
  • 有以下这个情况: 数据库要求数据量不太于500MB,就需要定期清理数据库,并备份文件。当需要查询时,要求把该备份文件导入。 或者有没有其他好的方式?主要是定期清理备份,并满足备份数据查询
  • mysql 数据库清理 磁盘空间

    千次阅读 2017-08-02 11:37:32
    使用 text 和 blob 字段类型时 ,执行大量的删除和更新操作...删除这些值会在数据表中留下很大的空洞,以后填入这些“空洞”的记录可能长度不同,为了提高性能,建议定期使用 OPTIMIZE TABLE 功能对这类表进行碎片整理
  • 有时候会发现由于频繁操作导致自己的数据日志文件(.ldf)过大,这个时候掌握如何清理数据库日志显得尤为重要,不然ldf文件会占磁盘比较大的空间,建议定期执行下面语句进行数据库日志的清理,不同数据库改下DBName...
  • ORACLE定期清理INACTIVE会话 ORACLE数据库会话有ACTIVE、INACTIVE、KILLED、 CACHED、SNIPED五种状态。INACTIVE状态的会话表示此会话处于非活动、空闲、等待状态。例如PL/SQL Developer连接到数据库,执行一条SQL...
  • 最好是在创建数据库之后就进行设置,审计数据越多迁移会越麻烦,还可能影响业务。   编号 需求项 需求细节内容 说明 准备工作 1 检查是否打开审计 show parameter audit audit_trail...
  • 无插件清理WordPress数据库的方法

    千次阅读 2017-04-16 14:18:41
    玩过WordPress的都知道,随着...要解决这个问题,就需要定期清理数据库,以防止不必要的数据积累。但很可能你不知道如何清理或者不敢随意折腾数据库,所以今天我会分享9个简单的小步骤,帮助你快速完成数据库的清理。

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 182
精华内容 72
热门标签
关键字:

数据库定期清理数据