sqlserver数据库维护脚本大全,值得收藏

下面的代码非但有图文,简直是视频,地址
http://www.cnthc.com/?/article/67
http://www.cnthc.com/?/article/73

--建立一个玩的数据库
Create database Stu_db2
go

--查看数据库
--一、经过图形化界面查看,全部的选项的解释 http://www.cnthc.com/?/explore/category-9 注意看《数据库选项》这个话题
--二、经过系统内置函数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开始,能够在数据库联机而且正在使用时进行备份。可是,存在下列**:
一、隐式或显式引用脱机数据的任何备份操做都会失败,例如你要备份的数据库的一个文件组脱机。
二、数据库仍在使用时,SQL Server 可使用联机备份过程来备份数据库。在备份过程当中,能够进行多个操做;
例如:在执行备份操做期间容许使用 INSERT、UPDATE 或 DELETE 语句。
可是,若是在正在建立或删除数据库文件时尝试启动备份操做,则备份操做将等待,直到建立或删除操做完成或者备份超时。
例如文件的添加、删除、修改或者压缩等操做。
三、全部的恢复模式都容许您备份完整或部分的 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数据库

相关文章
相关标签/搜索