整理的几个常用的数据库维护的脚本

原创 2007年10月02日 15:34:00

/*********************************************************************************                                                                            
*  FielName   : backup.sql                                                   
*  Function   : 自动备份                                                    
*  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  : 数据库还原
*  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  : 收缩数据库的日志文件
*   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
*/

数据库常用脚本

  • 2013年05月29日 20:53
  • 515B
  • 下载

数据库日常管理常用sql脚本

 / 目录: ###########查询类########### 关于session: kill session和kill -9 ...
  • wish503
  • wish503
  • 2016年11月29日 22:43
  • 536

Oracle数据库日常维护命令

一、启动、关闭数据库 1、启动实例的各种模式 1)启动实例,装载并打开数据库 这是最普通的数据库操作,意味着某个实例已经启动并且数据库也已经装载并打开。这种模式允许任何一个有效的用户连接到数据库...
  • KimSoft
  • KimSoft
  • 2014年01月22日 14:46
  • 5507

一些实用的python小脚本

referer:http://wooyun.org/bugs/wooyun-2015-0141726 #coding:utf-8 import re import urllib2 import thr...
  • p656456564545
  • p656456564545
  • 2015年11月02日 14:23
  • 675

SQL数据库表维护语句使用简要

新增字段:ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL删除字段:ALTER TABLE [表名] DROP COLUMN [字段名]修改字段:ALTER ...
  • usersmj
  • usersmj
  • 2007年06月06日 21:58
  • 641

sql数据库日常维护脚本

–备份declare @sql varchar(8000) set @sql='backup database mis to disk=''d:\databack\mis\mis...
  • u010541307
  • u010541307
  • 2016年10月22日 23:09
  • 536

机器学习笔记八:常见“距离”归纳

机器学习中的距离
  • xierhacker
  • xierhacker
  • 2017年03月16日 15:58
  • 474

python常用文件操作方法整理

内容参考自《python变成快速上手》首先明确一点,Windows的路径在python中写为(‘c:\Users\xxx’);mac OS和Linux则写成(‘usr/bin/xxx’)。此处需要用到...
  • lajiasd123
  • lajiasd123
  • 2016年12月07日 13:26
  • 376

最常用的HTML标签 总结整理

body:在网页上要展示出来的页面内容一定要放在body标签中 p:如果想在网页上显示文章,这时就需要p标签了,把文章的段落放到p标签中。标签的默认样式,段前段后都会有空白,如果不喜欢这个空白,可以用...
  • fang323619
  • fang323619
  • 2016年07月14日 08:41
  • 2378

图像去雾(一般)

转自:http://blog.csdn.net/sjzcandy/article/details/5810700(原创地址不详) 正文: zhuan:关于cvpr2009的...
  • u010001214
  • u010001214
  • 2013年09月15日 21:49
  • 1644
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整理的几个常用的数据库维护的脚本
举报原因:
原因补充:

(最多只允许输入30个字)