zoukankan      html  css  js  c++  java
  • sql server 远程备份 bak 删除

    前言:

    管理一个公司的一个服务器,最近有一些维护SQLserver数据库活弄,写下防止忘了.

    因为公司采用SQLRedisMongoDB共用,SQL用来存储基础的结构权限等一些杂七杂八的东西.

    Redis用来给自动化系统使用,用来做些不方便在程序里搞的小动作.mongoDB用来存储大量的用户设备上报和操作信息,数据分析库.

    然后老板说了.我们所有的基础都基于SQLserver,这个做下备份.让弄个远程备份.

    然后备份了一些日子发现有点大,就弄个删除,删除一下.

    懒得看的话直接去最后,拷走用.前面有几个步骤.你得容我扯扯蛋.

    1.创建备份文件夹

    • 进入到你的数据库在的服务器.远程网络访问那个共享文件夹,如果可以了第一步就OK了
    • 远程到你想备份的电脑,在你想备份的地方建立一个文件夹,共享读写.

    2.开启执行备份语句

    • 现在要开启xp_cmdshell 语句执行,这玩意默认不是开启的,说防止权限提升.你说防止就防止吧.现在需要备份先开启
    • EXEC sp_configure 'show advanced options', 1;
      RECONFIGURE;
      EXEC sp_configure 'xp_cmdshell', 1;
      RECONFIGURE;
    • 开启高级选项 ,开启xp_cmdshell ,如果想看高级选项的内容可以看 exec sp_configure.看看更改的结果.
    • 高级选项一般是不开启的.xp_cmdshell也是不开启的.不要单独这样写.等会把这玩意写到计划作业里面,就是第三步开头.

    3.远程备份

    • 建立一个计划作业,在步骤里面写远程访问的命令
    • 用远程账户访问文件夹,然后用xp_cmdshell执行备份命令,切掉访问的用户.
    • 大概的代码写一下

     --开启高级选项和shell命令使用

     EXEC sp_configure 'show advanced options', 1;
     RECONFIGURE;
     EXEC sp_configure 'xp_cmdshell', 1;
     RECONFIGURE;

    --验证用户 
    exec master..xp_cmdshell 'net use \172.200.218.110188a password /user:172.200.218.110administrator'; --准备要备份的地址和文件信息 declare @dstart varchar(50); set @dstart = convert(varchar(100),GetDate(),112); declare @path varchar(400); set @path ='\172.200.218.110\188a\12a estdb'+@dstart+'.bak' --备份数据库 backup database testdb to disk=@path WITH FORMAT --断开 exec master..xp_cmdshell'net use \172.200.218.110188a /delete'
    • 开启选项的就不说了
    • exec master..xp_cmdshell 'net use 固定语句让你准备开始执行命令, \172.200.218.110188a 网络共享地址, password 存备份的电脑的密码, /user: 固定句式,
      172.200.218.110administrator 存备份域下的用户, 如此就开启了对这个存备份的电脑的文件夹的操作权限.
    • \172.200.218.110\188a\12a 这些是存备份的文件夹,然后就是备份的名字了.可以备份多天的.
    • backup database testdb to disk=@path WITH FORMAT 备份数据库 testdb ,到指定的路径和给定的文件名.
    • exec master..xp_cmdshell'net use \172.200.218.110188a /delete' 关闭对这个存备份的电脑的文件夹的操作权限.

    4.远程删除

      上面开启了多天的备份,或者限时的备份,

      跟设置的计划任务有关,

      远程备份要考虑带宽.我们内部是万兆的网络,数据库又不大.因为我们数据库开启的简单日志模式,

      平时的操作日志太多.删除的也多.自动化好多设备运行的垃圾数据,如果开启完全日志,日志量吓人.所以一天备份一次,耗时3分多,

      但是时间长了也受不了.服务器虽然大也不能可劲造.地主家也没有余粮.所以固定时间的备份删除很有必要

      exec master..xp_delete_file 0,N'\172.20.218.11\188a','bak',time

    • 这个玩意要放在用户开启远程访问里面.
    • exec master..xp_delete_file 0 固定句式,老子要删东西了
    • N'\172.20.218.11\188a' 要删这个目录下的东西
    • 'bak' 我要删的是这样东西
    • time 这个时间点以前的都删

    5.关闭备份语句

     前面收开启了高级选项和shell不安全,有权限提升的危险,我们就关了shell和高级选项.

    EXEC sp_configure 'xp_cmdshell', 0;
    RECONFIGURE;
    EXEC sp_configure 'show advanced options', 0;
    RECONFIGURE;

    总体合起来像这样

    --开启高级选项
    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1;
    RECONFIGURE;
    
    --验证用户 
    exec master..xp_cmdshell 'net use \172.200.218.110188a password /user:172.200.218.110administrator';
    --准备要备份的地址和文件信息
    declare @dstart varchar(50);
    set @dstart = convert(varchar(100),GetDate(),112);
    declare @path varchar(400);
    set @path ='\172.200.218.110\188a	estdb'+@dstart+'.bak'
    --备份数据库
    backup database testdb to disk=@path WITH FORMAT
    
    --删除过期数据库
    declare @endtime varchar(200)
    set @endtime = convert(varchar(100),GetDate()-60,120)
    exec master..xp_delete_file 0,N'\172.20.218.11\188a','bak',@endtime
    
    --断开
    exec master..xp_cmdshell'net use \172.200.218.110188a /delete'
    
    --关闭高级选项
    EXEC sp_configure 'xp_cmdshell', 0;
    RECONFIGURE;
    EXEC sp_configure 'show advanced options', 0;
    RECONFIGURE;

    大概就这样,我也是用一次,有些代码因为怕泄露公司信息,改了下,不知道能用不,

    如果不能用就看个意思

     想搞的更多,你可以到官网上.更多功能 

  • 相关阅读:
    JDK API文档下载
    idea技巧:查看一个类的所有子类以及子类的子类并以层级关系显示
    Vue项目优化
    deepin 安装netcore 记录
    UOS 下的VScode 使用经验
    UOS操作系统磁盘空间不够一例
    SRPBatcher优化的原理
    我的UOS生活
    假如美国禁用了Unity3D和Unreal怎么办
    BGFX学习笔记01
  • 原文地址:https://www.cnblogs.com/qiaqia-liu/p/10686261.html
Copyright © 2011-2022 走看看