当前位置: 代码迷 >> Sql Server >> 求一些常用的SQL(05版以上)数据库维护脚本解决思路
  详细解决方案

求一些常用的SQL(05版以上)数据库维护脚本解决思路

热度:37   发布时间:2016-04-27 17:05:23.0
求一些常用的SQL(05版以上)数据库维护脚本
比如查看表数量 存储过程数量
锁状态
重建索引
镜像等等 要脚本代码 谢谢
帖子会再另开帖,再加400分,代码越实用越好..
代码回复在本帖就好.
谢谢

------解决方案--------------------
SQL code
---trysysaltfiles 主数据库         保存数据库的文件syscharsets 主数据库          字符集与排序顺序sysconfigures 主数据库          配置选项syscurconfigs 主数据库          当前配置选项sysdatabases 主数据库          服务器中的数据库syslanguages 主数据库          语言syslogins 主数据库          登陆帐号信息sysoledbusers 主数据库          链接服务器登陆信息sysprocesses 主数据库          进程sysremotelogins 主数据库          远程登录帐号syscolumns 每个数据库        列sysconstrains 每个数据库        限制sysfilegroups 每个数据库        文件组sysfiles 每个数据库         文件sysforeignkeys 每个数据库         外部关键字sysindexs 每个数据库         索引sysmembers 每个数据库         角色成员sysobjects 每个数据库         所有数据库对象syspermissions 每个数据库         权限systypes 每个数据库        用户定义数据类型sysusers 每个数据库         用户
------解决方案--------------------
SQL code
/**//*********************************************************************************                                                                             *  FielName   : backup.sql                                                    *  Function   : 自动备份                                                     *  Author     : Yahong<[email protected]>*  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 masterdeclare @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:\[email protected]_nameset @[email protected]+'Database'set @verb='mkdir '--建立目录set @[email protected][email protected]_dbexec xp_cmdshell @cmddeclare cur_database cursor forward_only read_only  forselect name from sysdatabaseswhere dbid>4  --系统数据库的dbid<=4open cur_database fetch next from cur_databaseinto @DbNamewhile @@fetch_status=0begin        set @backup_name= @[email protected]_name    set @[email protected]_db+'\[email protected]_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 [email protected]_name+'  I:'    exec xp_cmdshell @copy          --备份下一个数据库    fetch next from cur_database    into @DbNameendclose cur_databasedeallocate cur_database--删除网络连接exec xp_cmdshell 'net use K: /delete'exec xp_cmdshell 'net use I: /delete'/**//********************************************************************************  File Name : Restore.sql*  Function  : 数据库还原*  Author    : Yahong<[email protected]>  *  Version   : 00*  Date      : 2007-09-18*  Remark    :********************************************************************************/use masterdeclare          @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 @[email protected]+'\[email protected]set @[email protected]+'\[email protected]--添加还原设备set @[email protected]+'WholeDevice'set @WholeFileName='K:\[email protected]exec sp_addumpdevice 'disk',@WholeDeviceName,@WholeFileName--开始备份if(isnull(@DifferentFileName,'')<>'')  --如果具有差异备份的还原begin  --添加差异备份还原的设备  set @[email protected]+'DifferenctDevice'  set @DifferentFileName='K:\[email protected]  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 @DifferenctDeviceNameendelsebegin --只有完全备份的还原   if(isnull(@TargetDir,'')='')     restore database @DbName from @WholeFileName  else     restore database @DbName from @WholeFileName     with move @MasterFileName  to @TargetMasterFileName,        move @LogFileName  to @TargetLogFileNameend--释放备份设备exec sp_dropdevice @WholeDeviceNameif(isnull(@DifferentFileName,'')<>'')   exec sp_dropdevice @DifferenctDeviceName--删除网络链接exec xp_cmdshell 'net use K: /delete'/**//**************************************************************************   File Name : ShrinkLog.sql*   Function  : 收缩数据库的日志文件*   Author    :Yahong<[email protected]>*   Version   : 00*   Date      : 2007-09-16*   Remark    :**************************************************************************/----第一步:设置需要收缩的数据库,找到需要收缩数据文件--use cctqaselect Size/128 Size,Name from sysfiles/**//*declare @LogName varchar(255),@TargetSize int------第二步:设置需要收缩的日志文件的逻辑名字和收缩后的大小--千万不要搞错了,选错了文件,有可能会丢失数据,那时候--哭都哭不回来了。----set @LogName='CCTQA_Log'set @TargetSize=1declare @str varchar(300), @DatabaseName varchar(255)set @DatabaseName=db_name()if(not exists(select * from sysfiles where [email protected]))begin    set @[email protected]    raiserror(@str,0,1) end elsebegin    declare @curSize int,@maxTime int    set @maxTime=10    set @curSize=(select size from sysfiles where [email protected])/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 [email protected])/128      set @[email protected]    end        set @curSize=(select size from sysfiles where [email protected])/128    print '收缩之后的日志文件的大小是:'+cast(@curSize as varchar(10))+'MB'end*/
  相关解决方案