数据库备份,恢复,收缩之SQL Server 2008 R2
近期维护一个项目,发现数据库占用空间特别大,老规矩数据维护之前先进行备份,我滴个乖乖,备份时间无法忍受,但是还是要维护,经过漫长的等待与处理终于搞定了,但是由这个问题引出的一系列的思考,回忆了自己之前的项目没有考虑的问题,今天就数据库维护方面完善自己的项目。
第一,数据库的备份。完全备份,这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。
具体代码如下:
T-SQL语法:
backup database [database_name] to disk = [path]
BACKUP DATABASE myDB to DISK = D:\datas\myDB-2020-02-01.bak; --在SQL2008R2调试通过
这个比较简单,不再赘述。
第二、数据库恢复。数据库恢复实际上就是利用技术手段把不可见或不可正常运行的数据文件恢复成正常运行的过程
T-SQL语法:
restore database 数据库名称 from disk='备份文件路径'
执行这个SQL语句时,必须断开数据库的所有连接,并且切换到master库,方能恢复成功。SQL语句写起来麻烦,我之前的项目就是这样处理的。但总是有点遗憾,今天我又发现了一种新的方法。
在执行restore database语句之前,先将数据库offline,再执行restore ,最后执行online,即可完美实现数据库恢复。
具体代码如下:
Alter database mydb Set Offline With rollback immediate ;
restore database mydb from disk= D:\datas\myDB-2020-02-01.bak WITH REPLACE ;
Alter database mydb Set Online With Rollback immediate;
是不是很简单啊。
第三、数据库收缩。数据库收缩是将数据库的操作日志文件进行整理或删除,到释放磁盘的空间的目的,提供数据库的响应速度和空间利用率。
T-SQL语法:
DBCC SHRINKFILE (N'数据库名_Log' , 0, TRUNCATEONLY)
单独使用这个命令不足以形成简单的功能,所以我将其写成代码,加入到应用项目中
具体代码如下:
USE [master];
ALTER DATABASE 数据库名SET RECOVERY SIMPLE WITH NO_WAIT;
ALTER DATABASE 数据库名SET RECOVERY SIMPLE;
USE 数据库名;
DBCC SHRINKFILE (N'数据库名_Log' , 1, TRUNCATEONLY) ;
USE [master];
ALTER DATABASE 数据库名SET RECOVERY FULL WITH NO_WAIT;
ALTER DATABASE 数据库名SET RECOVERY FULL;
执行以代码,直接实现对指定数据库的收缩。
综上所述,对数据库的备份,恢复,收缩的使用和心得,并记录下来并分享出来,欢迎吐槽!!!!
注:代码全部在SQL server 2008 R2下调试通过。