0
点赞
收藏
分享

微信扫一扫

通过powershell清理sql express数据库表并压缩数据库释放空间

工作需要清理一个数据库,进行空间压缩。因为用的是express版本。有空间限制,超过5g大小就不给写入数据了。 想通过sql server agent 写定时任务处理。 ······ 现实是残酷的,都说是express版本了,哪里会给你写定时任务功能。 思考一番,找到了powershell来清理的方法

一、编写powershell脚本 脚本如下,内容可以根据实际情况修改

#配置信息:这四个信息,可以在ssms连接工具打开的时候看到,其中Server、UserName、Password可以看到,Database要连接进去后,找到你具体要操作的数据库名称
$Database	= 'DemoDB'  
$Server		= '"WIN-AHAU9NO5R6U\SQLEXPRESS"'
$UserName	= 'sa'
$Password	= 'cccc123456'

#创建连接对象
$SqlConn = New-Object System.Data.SqlClient.SqlConnection

#使用账号连接MSSQL
$SqlConn.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;user id=$UserName;pwd=$Password"

#或者以 windows 认证连接 MSSQL
#$SqlConn.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;Integrated Security=SSPI;"

#打开数据库连接
$SqlConn.open()

#执行语句方法一,这个语句块是对表格的清理,只删除表格里面的数据,保留表和结构。sql多条命令可以通过 ; 分号的形式合成多语句到一句,便于我们编辑
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.connection = $SqlConn
$SqlCmd.commandtext = 'truncate table manager;truncate table tmessage;truncate table transaction;truncate table notification'
$SqlCmd.executenonquery()
$SqlCmd.executenonquery()

#执行语句方法二,这个命令是对数据库进行压缩,对文件进行压缩,其中,如果指定了数据库,没指定后面的参数,则按照默认值进行压缩,也就是最大可压缩空间
$SqlCmd = $SqlConn.CreateCommand()
$SqlCmd.commandtext = 'dbcc shrinkdatabase (DemoDB);DBCC SHRINKFILE (DemoDB)''
$SqlCmd.ExecuteScalar()


#关闭数据库连接
$SqlConn.close()


附带一个测试的命令,为了验证连接是可以执行的,你可以试试这个语句块,验证连接通过了

#方法三,查询显示,select name,recovery_model_desc,log_reuse_wait_desc from sys.databases这个语句替换成你能用 语句,例如select * from tableA
$SqlCmd.commandtext = 'select name,recovery_model_desc,log_reuse_wait_desc from sys.databases'
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$set = New-Object data.dataset
$SqlAdapter.Fill($set)
$set.Tables[0] | Format-Table -Auto 

二、到任务计划里面定时执行这个任务计划 可以参考我另外一个文章:https://blog.51cto.com/xiaoyuanzheng/5662986 进行任务计划的配置。

举报

相关推荐

0 条评论