CREATE PROCEDURE p_compdb
@dbname sysname --要压缩的数据库名
as
--1.清空日志
exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG')
--2.截断事务日志:
exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')
--3.收缩数据库文件(如果不压缩,数据库的文件不会减小
exec('DBCC SHRINKDATABASE(['+@dbname+'])')
--4.设置自动收缩
exec('EXEC sp_dboption '''+@dbname+''',''autoshrink'',''TRUE''')
GO
然后在VB中调用,参数是数据库名。
需要用访问master库的权限连接到master库上调用。
try this:
command.Execute("sp_dboption '"&数据库名 &"'")
using Systemusing System.Data
using System.Configuration
using System.Collections
using System.Web
using System.Web.Security
using System.Web.UI
using System.Web.UI.WebControls
using System.Web.UI.WebControls.WebParts
using System.Web.UI.HtmlControls
using System.IO
using System.Text
using _5dRss.Const
using _5dRss.lib.Data.Tool
public partial class admin_admin_dbmanage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ListBackupFiles()
if (!Page.IsPostBack)
{
Showmsg.Visible = false
//数据库路径
lilDBPath.Text = HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\\" + ConfigurationSettings.AppSettings["DBFile"]
//新建一个 FileInfo 对象,并获得数据库文件的大小,然后转换单位为KB
FileInfo myFileInfo = new FileInfo(lilDBPath.Text)
lilDBSize.Text = Convert.ToString(myFileInfo.Length/1024) + " KB"
//如果两个参数都不为空,则继续执行
if (Request.QueryString["cmd"] != null &&Request.QueryString["source"] != null)
{
//备份数据库原文件名
string sourceFileName = Request.QueryString["source"]
//如果 cmd 参数为 DelFile
if (Request.QueryString["cmd"].Equals("DelFile"))
{
//删除备份数据库文件
File.Delete(HttpContext.Current.Request.PhysicalApplicationPath + "Backup\\" + sourceFileName)
//刷新备份文件列表
ListBackupFiles()
Showmsg.Visible = true
Showmsg.Text = "<div align='center' style='margin-bottom:8px'><img src='images/aL.gif' style='margin-bottom:-6px'/><span class='alertTxt'>删除备份数据库成功!</span><img src='images/aR.gif' style='margin-bottom:-6px'/></div>"
}
//如果 cmd 参数为 Restore
if (Request.QueryString["cmd"].Equals("Restore"))
{
//用备份文件覆盖原文件
File.Copy(HttpContext.Current.Request.PhysicalApplicationPath + "Backup\\" + sourceFileName, HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\\" + ConfigurationSettings.AppSettings["DBFile"], true)
//刷新备份文件列表
ListBackupFiles()
Showmsg.Visible = true
Showmsg.Text = "<div align='center' style='margin-bottom:8px'><img src='images/aL.gif' style='margin-bottom:-6px'/><span class='alertTxt'>还原备份数据库成功!</span><img src='images/aR.gif' style='margin-bottom:-6px'/></div>"
}
}
}
}
protected void lnkbtnCompactDB_Click(object sender, EventArgs e)
{
//压缩修复数据库
AccessDBtool.CompactAccessDB(SysConfig.ConnectionString, HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\\" + ConfigurationSettings.AppSettings["DBFile"])
Showmsg.Visible = true
Showmsg.Text = "<div align='center' style='margin-bottom:8px'><img src='images/aL.gif' style='margin-bottom:-6px'/><span class='alertTxt'>压缩修复数据库成功!</span><img src='images/aR.gif' style='margin-bottom:-6px'/></div>"
}
protected void lnkbtnBackupDB_Click(object sender, EventArgs e)
{
string sourceFileName = HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\\" + ConfigurationSettings.AppSettings["DBFile"]
string destFileName = HttpContext.Current.Request.PhysicalApplicationPath + "Backup\\" + "Backup_"
destFileName += DateTime.Now.ToString("yyyyMMddHHmmss")
destFileName += ".mbk"
//将数据库文件Copy到Backup目录,如果有重名文件就覆盖原文件
File.Copy(sourceFileName, destFileName, true)
//生成备份文件列表
ListBackupFiles()
Showmsg.Visible = true
Showmsg.Text = "<div align='center' style='margin-bottom:8px'><img src='images/aL.gif' style='margin-bottom:-6px'/><span class='alertTxt'>备份数据库成功!</span><img src='images/aR.gif' style='margin-bottom:-6px'/></div>"
}
/// <summary>
/// 生成备份文件列表
/// </summary>
/// <returns>文件列表,文件详细信息及 *** 作选项的HTML代码</returns>
public void ListBackupFiles()
{
//如果目录不存在则创建次目录
if (!Directory.Exists(HttpContext.Current.Request.PhysicalApplicationPath + "Backup\\"))
Directory.CreateDirectory(HttpContext.Current.Request.PhysicalApplicationPath + "Backup\\")
DirectoryInfo mydir = new DirectoryInfo(HttpContext.Current.Request.PhysicalApplicationPath + "Backup\\")
StringBuilder sb = new StringBuilder()
foreach (FileInfo f in mydir.GetFiles())
{
sb.Append("<a href='backup/" + f.Name + "' target='_blank'><img border='0' src='images/mdb.gif' style='margin:4px 3px -3px 0px'/>" + f.Name + "</a> <a href='?cmd=DelFile&source=" + f.Name + "' title='删除备份文件'>删除</a>| <a href='?cmd=Restore&source=" + f.Name + "' title='删除备份文件'>还原数据库</a>| " + f.Length/1024 + " KB | " + f.CreationTime + "<br />")
}
lilBackupFileList.Text = sb.ToString()
}
}
把下面这句换成你的数据库地址:
//数据库路径
//lilDBPath.Text = HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\\" + ConfigurationSettings.AppSettings["DBFile"]
在 SQL Server 2012 中,收缩数据库是一种常用的维护 *** 作,可以帮助将不再需要的空间释放回 *** 作系统,从而提高存储空间的利用率。但是,直接收缩数据库存在一些潜在的问题和注意事项,需要慎重考虑以下几点:1. 收缩数据库可能导致性能下降:当数据库文件被压缩时,SQL Server 必须重新组织页之间的逻辑顺序,并将未使用的页从文件中删除。这个过程可能会对数据库的性能产生负面影响,尤其是对于大型数据库。
2. 收缩数据库可能会增加 I/O 负载:当数据库被压缩时,SQL Server 必须读取并写入大量的数据。这可能会导致额外的磁盘 I/O 负载,从而影响其他用户或应用程序的性能。
3. 收缩数据库可能会导致数据文件的碎片:收缩数据库会导致数据文件中存在大量的空间碎片,这可能会影响以后的性能。此时,最好使用 ALTER INDEX REORGANIZE 或 ALTER INDEX REBUILD 来解决碎片问题。
因此,建议在进行数据库收缩之前,先备份数据库并进行测试,以确保您的收缩计划不会对生产环境造成损害。如果没有必要,最好选择定期进行数据库维护,而不是直接收缩数据库。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)