sqlserver数据库维护脚本大全,值得收藏
下面的代码非但有图文,简直是视频,地址
http://www.cnthc.com/?/article/67
http://www.cnthc.com/?/article/73
--创建一个玩的数据库
Create database Stu_db2
go
--查看数据库
--1、通过图形化界面查看,所有的选项的解释 http://www.cnthc.com/?/explore/category-9 注意看《数据库选项》这个话题
--2、通过系统内置函数DATABASEPROPERTYEX 具体可用属性查询地址 http://www.cnthc.com/?/article/29
--语法: DATABASEPROPERTYEX(目标数据库名, 属性),例:
select DATABASEPROPERTYEX('Stu_db2','isautoshrink')
--说数据库文件如果不**的话就会无**的增加到把磁盘撑满,这个有什么办法可以看到目前数据库文件的大小?
--可以执行内置存储过程 sp_spaceused来获取数据库大小,例:
use Stu_db2
go
exec sp_spaceused
--有不有什么办法可以连数据库的文件在那里,文件的上限、增量等都显示出来呢?
--使用系统内置存储过程 sp_helpdb + 要查看的数据库名
exec sp_helpdb Stu_db2
--删除数据库
drop database Stu_db2
--错误信息都提示得很明白了嘛,你当前正在使用这个数据库,这就好比你躺在床上,却执行把床扔了的动作一样
--若要使用 DROP DATABASE,则连接的数据库上下文不能与要删除的数据库或数据库快照,例:
use master
go
drop database Stu_db2
--如果是图形化界面操作,则需要把最下面有个“关闭现有连接”给勾选上
--为了不影响练习,再新建一个
create database Stu_db2
--修改数据库名,如果要通过SSMS直接修改,要确保没有任何用户正在使用数据库
alter database Stu_db2
modify name=Stu_db3
--如果需要一个霸占当前数据库,这可以设置数据库为单用户模式,用图形界面修改,在“数据库属性”对话框中,单击“选项”页。在“**访问”选项中,选择“SINGLE_USER”。
--这个时候如果其他用户连接到数据库,将出现“打开的连接”消息。若要更改属性并关闭所有其他连接,请单击“是”,代码则如下
ALTER DATABASE Stu_db3
SET SINGLE_USER WITH NO_WAIT --等待所有事务执行完成,再把数据库设置为单用户,不足是显而易见的,就是一直等待事务完成
--多用户模式的关键字 MULTI_USER
ALTER DATABASE Stu_db3
SET MULTI_USER WITH NO_WAIT
--扩展数据库
--第一:设置数据库为自动增长方式;
--第二:增加数据库中数据文件和日志文件的大小,就是修改它们的MAXSIZE属性;
--第三:就是为数据库增加新的次要数据文件或日志文件。
--最优选择为数据库增加次要数据或者日志文件,我们执行如下T-SQL语句
use master
go
alter database Stu_db3 --指定要修改的数据库
add file --增加数据文件
(name=Stu_db3_a, --文件在数据库中的名字,
filename='e:\Stu_db3_a.ndf',--文件路径和在文件系统中的名字
size=2MB, --文件初始大小
maxsize=unlimited, --文件上限
filegrowth=10% --增量
)
go
alter database Stu_db3
add log file --增加日志文件
(name=Stu_db3_a_log,
filename='e:\Stu_db3_a.ldf',
size=10MB,
maxsize=20mb,
filegrowth=5%
)
go
--查看修改的结果
exec sp_helpdb Stu_db3
--单纯修改文件的大小和增量
use master
go
alter database Stu_db3 --要修改的数据库
modify file(
name=Stu_db3_a --要修改的文件逻辑名
,size=20 --文件大小
,filegrowth=10% --增量
)
go
/*--收缩数据库
比如我们一次把系统中10年前的数据全部删除或者转移了,只保留最近三年的,那么数据库必然会空出很多空间。
还有种情况,是设计数据库的时候因为某种原因,设计得很大,后来发现用不上或者必须收缩。
处理方式也有四种:
第一种,图形界面上操作,在“对象资源管理器->指定服务器实例->数据库->指定的数据库上面右键->任务->收缩
第一种是设置数据库为自动收缩,通过设置AUTO_SHRINK数据库选项实现;不建议这样做,反复收缩会增加数据库的碎片
*/
alter database Stu_db3
set auto_shrink on
--第二种是通过手动的执行DBCC SHRINKDATABASE 语句来收缩整个数据库的大小;
--语法 :DBCC SHRINKDATABASE(‘要收缩的数据库名’,可用空间的比例)
DBCC SHRINKDATABASE('Stu_db3',20) --收缩上面多次用到的数据库OneDb_bak,只给他留下20%的可用空间
--如果收缩当前使用的数据库,可用0代表数据库名,例如
use Stu_db3
go
DBCC SHRINKDATABASE(0,20)
--你无聊的话可以试试反复执行,看看是什么提示
--第三种执行 DBCC SHRINKFILE 语句来手动收缩数据库中的文件的大小。
--语法:DBCC SHRINKFILE(‘文件逻辑名’,收缩后的大小),如果未指定收缩后的大小则缩到默认大小
use Stu_db3
go
DBCC SHRINKFILE('Stu_db3_a',20) --指定收缩数据中逻辑名为one的文件
/*--=============数据库快照(感兴趣的可以在网上搜索下数据库快照原理)--------
快照就是将当前数据库原样的复制一个只读的数据源出来。它是当前数据库的只读静态视图,不包括那些还没有提交的事务
用处:可以作为数据源进行数据查询,分析,如果元数据库坏了,这个还可以还原(当然,不建议用这个作为安全保证)
使用场景:假设我们对某企业内部办公系统进行大量的分析,最好的做法是将目前的数据库备份到另外一个数据库服务器上来分析。
初期无所谓,但是如果将来这个数据库很大了,备份的操作可能很容易引起系统崩溃。 而数据库快照则可以很好的解决这个问题。
管理数据库快照
*/
--例如我们为数据库Stu_db2创建一个名为Test_20140926的快照 如下
--数据库中只有默认的一个数据文件一个日志文件的情况下
create database Tets
GO
USE master
GO
CREATE DATABASE Tets_20140926 --快照名
ON (
NAME=Tets --源数据库文件的逻辑名
,FILENAME='e:\Tets_20140926.thc' --快照文件存放位置和文件名,文件后缀名随便
)
--指明为那个数据库创建快照
AS SNAPSHOT OF Tets
GO
--多个数据库文件的快照创建,有多少个数据文件就必须指定多少次,日志文件不能做快照
create database Stu_db3_snp --创建快照的名称
on( --第一个数据库文件
name=Stu_db2, --逻辑文件名为aaaa的数据文件
filename='e:\st_1.thc' --快照文件物理路径
), --继续第二个
(
name=Stu_db3_a, --逻辑文件名为test2的数据文件
filename='e:\st_2.thc' --快照文件物理路径
)
as snapshot of Stu_db3 --源数据库为test2
--留个作业,你把删除快照的脚本写出来
--如果你会insert语句和select语句的话,赶紧试试,对你的快照进行查询和写入的操作,看看后果是什么
--要操作的话,你把快照当数据库就行了,还是use 快照名,然后就是你的操作了
--恢复快照到数据库(再说一句,不推荐这样做,因为我们有更好的备份还原策略)
--恢复 数据库 test2 来自 数据库_快照 = 快照名
restore database Tets from database_snapshot='Tets_20140926'
/*--========附加和分离数据库=========--
分离数据库是指将数据库从 SQL Server 实例中删除,但使数据库在其数据文件和事务日志文件中保持不变。
之后,就可以使用这些文件将数据库附加到任何 SQL Server 实例,包括分离该数据库的服务器。
使用场景,在教室或者公司的电脑上创建了一个数据库,想把这个数据库一点不变的拿到家里的数据库服务器上装
使用注意事项
第一,数据库中存在数据库快照。必须首先删除所有数据库快照,然后才能分离数据库。
第二,已复制并发布数据库。如果进行复制,则数据库必须是未发布的。必须通过运行 sp_replicationdboption 禁用发布后,才能分离数据库。
第三,该数据库正在某个数据库镜像会话中进行镜像,除非终止该会话,否则无法分离该数据库。
第四,数据库处于可疑状态。在 SQL Server 2005 和更高版本中,无法分离可疑数据库;必须将数据库设为紧急模式,才能对其进行分离。
*/
--使用内置存储过程sp_detach_db 来完成,例如分离数据库“Stu_db2”,SQL语句如下
USE master
GO
EXEC sp_detach_db Stu_db3
--比如创建了登录名“xiaotian”,默认数据库就是这个被分离的,那么“xiaotian”的默认数据库就将变成master数据库,同时也会删除其所有的元数据。
/*--附加数据库
通常附加好数据库以后,数据库的状态会和被分离前的那一刻完全一样。但是有些问题需要注意:
从 SQL Server 2005 和更高版本中,附加和分离操作都会禁用数据库的跨数据库所有权链接。
附加数据库时,TRUSTWORTHY 均设置为 OFF
附加数据库时,所有数据文件(MDF 文件和 NDF 文件)都必须可用。如果任何数据文件的路径不同于首次创建数据库或上次附加数据库时的路径,则必须指定文件的当前路径。
如果附加的主数据文件是只读的,则数据库引擎假定数据库也是只读的。
无法在早期版本的 SQL Server 中附加由较新版本的 SQL Server 创建的数据库。
与任何完全或部分脱机的数据库一样,不能附加正在还原文件的数据库。
分离再重新附加只读数据库后,会丢失差异基准信息。这会导致 master 数据库与只读数据库不同步。之后所做的差异备份可能导致意外结果。因此,如果对只读数据库使用差异备份,在重新附加数据库后,应通过进行完整备份来建立当前差异基准。
第一种:使用SQL Server Management Studio附加数据库很简单。
1. 在【对象资源管理器】中找到【指定的Sql Server实例】下的【数据库】目录,右键单击,选择“附加”。弹出“附加数据库窗口”;
2. 点击窗口右边中部的“添加”按钮,添加要附加的数据文件;如图3-36
3. 点击确定,完成数据库附加。
*/
--第二种,用TSQL
USE master
GO
CREATE DATABASE Stu_db3 ON
( FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Stu_db2.mdf' ),
( FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Stu_db2_log.ldf' ),
( FILENAME = 'e:\Stu_db3_a.ndf' ),
( FILENAME = 'e:\Stu_db3_a.ldf' )
FOR ATTACH
GO
--如果分离出来后日志文件无法使用了,可以使用FOR ATTACH_REBUILD_LOG关键字指定系统重建日志文件
CREATE DATABASE Stu_db3 ON
( FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Stu_db2.mdf' )
FOR ATTACH_REBUILD_LOG
GO
/*--移动数据库文件--
使用场景:
故障恢复。例如,由于硬件故障,数据库处于可疑模式或被关闭。
预先安排位置需要调整。
文件所在的需要磁盘维护操作而进行的位置调整。
注意:如果要把文件移动到其他的服务器上就只有通过上面的分离、附加或者下面要讲的备份还原才可以解决了
*/
--1.在执行文件移动前先运行如下代码将stu_db3数据库状态设置为OFFLINE
ALTER DATABASE Stu_db3 SET OFFLINE
--2.将所有的文件在Windows资源管理器中移动到新的位置。
--3.对于已移动的每个文件,请运行以下语句
ALTER DATABASE Stu_db3
MODIFY FILE ( NAME = Stu_db3_a
, FILENAME = 'd:\Stu_db3_a.ndf' )
--4.设置完成后,恢复stu_db3数据库状态设置为ONLINE
ALTER DATABASE Stu_db3 SET ONLINE --如果运行这句,你总是遇到问题,很简单,把你玩的这个文件的权限给够,让当前用户能够完全操作即可
--还有就是跨服务器复制数据库,有兴趣可以去玩玩,写代码的话很多,但是用图形界面也可以完成,我就不演示了
/* --备份&还原数据库
从SQL Server 2005开始,可以在数据库联机并且正在使用时进行备份。但是,存在下列**:
1、隐式或显式引用脱机数据的任何备份操作都会失败,例如你要备份的数据库的一个文件组脱机。
2、数据库仍在使用时,SQL Server 可以使用联机备份过程来备份数据库。在备份过程中,可以进行多个操作;
例如:在执行备份操作期间允许使用 INSERT、UPDATE 或 DELETE 语句。
但是,如果在正在创建或删除数据库文件时尝试启动备份操作,则备份操作将等待,直到创建或删除操作完成或者备份超时。
例如文件的添加、删除、修改或者压缩等操作。
3、所有的恢复模式都允许您备份完整或部分的 SQL Server 数据库或数据库的单个文件或文件组。不能创建表级备份。
备份方式两种
第一种:图形化界面操作:
第二种:写代码
*/
Use master
go
backup database Stu_db3 --要备份的数据库
to disk='e:\db.bak' --备份文件的存放路径和名字
with name='逗你玩数据库备份' --备份集名称
,description='数据库完全备份' --备注
,init --指定重写所有备份集。noinit,不覆盖现有备份
--差异备份
use master
go
backup database Stu_db3
to disk='e:\db-cy.bak'
with differential, --表明是差异备份
description='数据库差异备份', --备注
init --指定不覆盖现有备份
--校验备份文件
RESTORE FILELISTONLY from DISK='e:\db-cy.bak' with file=1
--还原操作
USE master
GO
RESTORE DATABASE Stu_db3
FROM DISK = 'e:\db.bak'
WITH FILE = 1 --备份设备中的第一个备份集
, NORECOVERY --不对数据库执行任何操作
, NOUNLOAD --不对数据库做任何操作,不会滚未提交的事务
, REPLACE --覆盖现有数据库
GO --因为后面还有差异备份,所以必须接着还原,否则数据库将认为没有还原完
RESTORE DATABASE Stu_db3
FROM DISK = 'e:\db-cy.bak'
WITH FILE = 1 --备份设备中的第一个备份集
, NORECOVERY --不对数据库执行任何操作
, NOUNLOAD --不对数据库做任何操作,不会滚未提交的事务
, REPLACE --覆盖现有数据库
GO
上面的代码非但有图文,简直是视频,地址
http://www.cnthc.com/?/article/67
http://www.cnthc.com/?/article/73
sqlserver数据库维护脚本大全,值得收藏的更多相关文章
- web前端/移动端H5博客专家博客大全--值得收藏的前端技术大牛博客地址
web前端/移动端H5博客专家博客大全--值得收藏的前端技术大牛博客地址 Huang Jie Blog .Com-前端开发 http://www.huangjieblog.com/?feed=rs ...
- Linux Limit相关内容设置大全(值得收藏)
目录 一. /etc/security/limits.conf 详解 /etc/security/limits.conf 配置解析 /etc/security/limits.d/目录 二. ulimi ...
- 最值得收藏的Bootstrap资源网站
如果你正在寻找Bootstrap图标,那今天的推荐对你而言绝对非常重要!在这篇内容中,我们把这套框架上的免费字体图 标做了个整合(当然,以后还会不断的更新).正如你所知,图标字体在一个web网页设计拥 ...
- 各种常用的JSON接口,开动你的大脑你就可以做出各种应用,值得收藏
各种常用的JSON接口,开动你的大脑你就可以做出各种应用,值得收藏 浏览:1412 发布日期:2014/01/27 分类:技术分享 这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用J ...
- 解决 SqlServer执行脚本,文件过大,内存溢出问题
原文:解决 SqlServer执行脚本,文件过大,内存溢出问题 执行.sql脚本文件,如果文件较大时,执行会出现内存溢出问题,可用命令替代 cmd 中输入 osql -S 127.0.0.1,8433 ...
- 前端学习——css基础知识,选择器与html模板、值得收藏的html标签
一.css需要的html(采用html5标准) DTD,文档类型声明: <!Doctype html> 文本编码声明: <meta charset="utf-8" ...
- 【Java并发编程】并发编程大合集-值得收藏
http://blog.csdn.net/ns_code/article/details/17539599这个博主的关于java并发编程系列很不错,值得收藏. 为了方便各位网友学习以及方便自己复习之用 ...
- 45个值得收藏的 CSS 形状
摘要: CSS炫技. 原文:45个值得收藏的 CSS 形状 作者:前端小智 Fundebug经授权转载,版权归原作者所有. CSS能够生成各种形状.正方形和矩形很容易,因为它们是 web 的自然形状. ...
- 前端特效demo | 值得收藏的6个 HTML5 Canvas 实用案例
HTML5 动画在Canvas 上得到了充分的发挥,我们 VIP 视频也分享过很多相关的动画特效制作视频,这次给大家带来 6 款超炫酷的HTML5 canvas 动画的 demo,一起来看看吧~ 文内 ...
随机推荐
- nil、Nil、NULL和NSNull的区别和联系
一.nil 我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉: 或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对 ...
- 高频交易策略[z]
Market Order以最高速下市价单(market order)是买方最基本的策略 Looking for Price Discrepancies 这个就是高频统计套利(high frequenc ...
- DataTable以列分组
//DataTable以列分组 var result = from r in dt.AsEnumerable() group r by ), b = r.Field<) } into g sel ...
- HTTP 初步知识总结
1.HTPP报文 HTTP协议以报文的格式传递数据,报文有三部分组成:起始行(对报文进行描述),首部块(包含属性),主体(包含数据,可选)所有的HTTP报文都可以分为两类:请求报文(Requset M ...
- Log4j基本用法
基本使用方法: Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式.日志信息的优先级从高到低有ERROR.WARN.INFO.DEBUG,分别用来指定这条日志信 ...
- textarea 在不同浏览器高宽不一致的兼容性问题
在html,很多同学喜欢使用rows.cols,来设置textarea的高宽,却发现,在火狐跟其他浏览器,好像高宽却不一致! 因为这是火狐的一个bug, https://bugzilla.mozill ...
- Windows2003 II6.0 FTP 开了防火墙 FTP不能正常工作的解决办法
.在防火墙设置的“高级-本地连接-设置”中把FTP的勾选
- Dell R710、720等系列类服务器 U盘安装centos6.5 操作系统
一般全新服务器创建系统的时候,没做raid 会报错,如下: 解决: 开机启动时按F10,进入下面界面. 在LC设置-语言和键盘设置选项里可以选择界面显示的语言 在界面主页选项里选择"配置RA ...
- 让linux中的程序崩溃时生成core文件
当我们的linux程序崩溃的时候,常常会有这样的提示: Segmentation fault (core dumped) 段错误 (核心已转储) 提示说生成了core文件,但是此功能 ...
- 关于Yaf的一些说明[转Yaf作者]
关于Yaf的一些说明[转Yaf作者] 说明下,这篇文章转至于yaf作者鸟哥的博文,因为最近在系统的学习Yaf框架,发现了这篇文章,感觉对于了解Yaf框架还是很有用处,所以转过来和大家分享一下 Yaf是 ...