zoukankan      html  css  js  c++  java
  • 常用的数据库维护的脚本

    --
    --
    --
    整理了几个常用的数据库维护的脚本,和大家分享,希望能够对大家有所帮助,尤其是
    --
    初学者。这些脚本只针对Sql Server 2000,在Sql Server 2005下没有进行测试,有些
    --
    可能不适用。如果有错误,请联系我<Yahongq111@163.com>
    --
    --

    /*********************************************************************************                                                                             
    *  FielName   : backup.sql                                                    
    *  Function   : 自动备份                                                     
    *  Author     : Yahong<Yahongq111@163.com>
    *  Date       : 2005-5-10   2005-5-19  2006-8-1   2007-09-18                   
    *  Version    : 00          01         02         03                            
    *                                                                             
    *  Remark     :                                                               
    *               2006-08-01  增加差异备份和完全备份两种情况,生成多个备份副本     
    *               2008-09-18  增加备份一个实例中的所有数据库的情况,并在备份后清除日志
    *
    ********************************************************************************
    */


    use master

    declare @DbName varchar(255),@dir varchar(256),@dir_db varchar(256),
            
    @verb varchar(256),@cmd varchar(256),
            
    @backup_name varchar(256),@dynamic_name varchar(10),
            
    @disk_name varchar(256),@copy nvarchar(100),
            
    @today datetime,@weekday int

    --建立网络连接
    exec xp_cmdshell 'net use K: /delete'
    exec xp_cmdshell 'net use I: /delete'

    exec xp_cmdshell 'net use K: \\193.254.40.118\backup backup /user:Web\backup '
    exec xp_cmdshell 'net use I: \\172.16.8.48\databackup backup /user:QA-SERVER-TEST\backup'

    --设定名字
    set @today=getdate()
    set @dynamic_name=convert(varchar(10),@today,120)

    set @dir='K:\'+@dynamic_name
    set @dir_db=@dir+'Database'
    set @verb='mkdir '

    --建立目录
    set @cmd=@verb+@dir_db
    exec xp_cmdshell @cmd


    declare cur_database cursor forward_only read_only  for
    select name from sysdatabases
    where dbid>4  --系统数据库的dbid<=4

    open cur_database 

    fetch next from cur_database
    into @DbName

    while @@fetch_status=0
    begin    
        
    set @backup_name= @DbName+'_'+@dynamic_name
        
    set @disk_name=@dir_db+'\'+@backup_name+'.bak'
        
        
    --添加备份设备
        EXEC sp_addumpdevice 'disk',@backup_name@disk_name
        
        
    set @weekday= datepart(dw,@today)
        
    if (@weekday=6--如果是周五,则进行完全备份
           BACKUP DATABASE @DbName TO @backup_name  
        
    else       --其他时候进行差异备份
           BACKUP DATABASE @DbName TO @backup_name  with differential

        
    --清理日志
        backup log @DbName with no_log

        
    --释放设备
        exec sp_dropdevice @backup_name
        
        
    --复制备份副本到其他地方
        set @copy='copy '+@disk_name+'  I:'
        
    exec xp_cmdshell @copy
          
        
    --备份下一个数据库
        fetch next from cur_database
        
    into @DbName
    end
    close cur_database
    deallocate cur_database

    --删除网络连接
    exec xp_cmdshell 'net use K: /delete'
    exec xp_cmdshell 'net use I: /delete'


    /******************************************************************************
    *
    *  File Name : Restore.sql
    *  Function  : 数据库还原
    *  Author    : Yahong<Yahongq111@163.com>  
    *  Version   : 00
    *  Date      : 2007-09-18
    *  Remark    :
    *
    ******************************************************************************
    */



    use master

    declare 
             
    @DbName varchar(255)              --数据库的名字
            ,@WholeFileName varchar(255)       --完全备份的文件名
            ,@DifferentFileName varchar(255)   --差异备份的文件名
            ,@MasterFileName varchar(255)      --数据文件名,注意他们都是逻辑名称
            ,@LogFileName  varchar(255)        --日志文件名
            ,@TargetDir varchar(255)           --还原后数据库文件所在的路径,如果没有指定该参数,
                                               --则必须存在与原数据库相同的路径

    declare  @WholeDeviceName varchar(255)
            ,
    @DifferenctDeviceName varchar(255)
            ,
    @TargetMasterFileName varchar(255)
            ,
    @TargetLogFileName varchar(255)

    --建立网络链接
    exec xp_cmdshell 'net use K: \\172.16.8.48\200709  backup /User:qa-server-test\backup'

    --在这里设置需要备份的文件等信息
    set @DbName='CCTQA'   --需要还原的数据库的名字,注意不要搞错了,否则
                          --覆盖了其他的数据库,可别说我没有提醒你
    set @WholeFileName='CCTQA_2007-09-14.bak'      --完全备份文件

    --以下4行如果没有,不要指定,把他们注释掉就行了
    set @DifferentFileName='CCTQA_2007-09-17.bak'  --最后一次差异备份文件
    set @MasterFileName='CCTQA_Data'  --数据文件
    set @LogFileName='CCTQA_Log'      --日志文件
    set @TargetDir='D:\CCTQA\Databae' --目标路径

    --设置目标路径
    set @TargetMasterFileName=@TargetDir+'\'+@MasterFileName
    set @TargetLogFileName=@TargetDir+'\'+@LogFileName

    --添加还原设备
    set @WholeDeviceName=@DbName+'WholeDevice'
    set @WholeFileName='K:\'+@WholeFileName
    exec sp_addumpdevice 'disk',@WholeDeviceName,@WholeFileName

    --开始备份
    if(isnull(@DifferentFileName,'')<>'')  --如果具有差异备份的还原
    begin
      
    --添加差异备份还原的设备
      set @DifferenctDeviceName=@DbName+'DifferenctDevice'
      
    set @DifferentFileName='K:\'+@DifferentFileName
      
    exec sp_addumpdevice 'disk',@DifferenctDeviceName,@DifferentFileName

      
    --备份
      if(isnull(@TargetDir,'')='')   
         
    restore database @DbName from @WholeDeviceName
           
    with NORECOVERY  
      
    else --如果还原后的数据库文件的路径与备份前的路径不一致
        restore database @DbName from @WholeDeviceName
           
    with NORECOVERY,
           move 
    @MasterFileName to @TargetMasterFileName,
           move 
    @LogFileName  to @TargetLogFileName
      
    restore database @DbName from @DifferenctDeviceName
    end
    else
    begin --只有完全备份的还原 
      if(isnull(@TargetDir,'')='')
         
    restore database @DbName from @WholeFileName
      
    else
         
    restore database @DbName from @WholeFileName
         
    with move @MasterFileName  to @TargetMasterFileName,
            move 
    @LogFileName  to @TargetLogFileName
    end

    --释放备份设备
    exec sp_dropdevice @WholeDeviceName
    if(isnull(@DifferentFileName,'')<>'')
       
    exec sp_dropdevice @DifferenctDeviceName

    --删除网络链接
    exec xp_cmdshell 'net use K: /delete'



    /************************************************************************
    *
    *   File Name : ShrinkLog.sql
    *   Function  : 收缩数据库的日志文件
    *   Author    :Yahong<Yahongq111@163.com>
    *   Version   : 00
    *   Date      : 2007-09-16
    *   Remark    :
    *
    ************************************************************************
    */


    --
    --
    第一步:设置需要收缩的数据库,找到需要收缩数据文件
    --

    use cctqa
    select Size/128 Size,Name from sysfiles

    /*

    declare @LogName varchar(255),@TargetSize int

    --
    --
    --第二步:设置需要收缩的日志文件的逻辑名字和收缩后的大小
    --千万不要搞错了,选错了文件,有可能会丢失数据,那时候
    --哭都哭不回来了。
    --
    --

    set @LogName='CCTQA_Log'
    set @TargetSize=1

    declare @str varchar(300), @DatabaseName varchar(255)
    set @DatabaseName=db_name()

    if(not exists(select * from sysfiles where name=@LogName))
    begin
        set @str='没有找到日志文件'+@LogName
        raiserror(@str,0,1) 
    end else
    begin
        declare @curSize int,@maxTime int
        set @maxTime=10
        set @curSize=(select size from sysfiles where name=@LogName)/128
        print '收缩之前的日志文件的大小是:'+cast(@curSize as varchar(10))+'MB'
        
        while (@curSize>@TargetSize) and (@maxTime>0)
        begin
          backup log @DatabaseName with no_log
          DBCC SHRINKFILE(@LogName,@TargetSize)
        
          set @curSize=(select size from sysfiles where name=@LogName)/128
          set @maxTime=@maxTime-1
        end
        
        set @curSize=(select size from sysfiles where name=@LogName)/128
        print '收缩之后的日志文件的大小是:'+cast(@curSize as varchar(10))+'MB'
    end
    */
  • 相关阅读:
    React元素渲染
    初识JSX
    微信小程序复制文本到剪切板
    微信小程序报错request:fail url not in domain list
    小程序,通过自定义编译条件,模拟推荐人功能
    积分抵扣逻辑
    微信小程序 switch 样式
    tomcat 配置开启 APR 模式
    tomcat8 传输json 报错 Invalid character found in the request target. The valid characters are defined in RFC 3986
    c++数组初始化误区
  • 原文地址:https://www.cnblogs.com/kevinge/p/1214567.html
Copyright © 2011-2022 走看看