工作需要清理一个数据库,进行空间压缩。因为用的是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 进行任务计划的配置。