在VB中压缩SQL数据库

在VB中压缩SQL数据库,第1张

首先在master库中,新建存储过程

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 System

using 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 来解决碎片问题。

因此,建议在进行数据库收缩之前,先备份数据库并进行测试,以确保您的收缩计划不会对生产环境造成损害。如果没有必要,最好选择定期进行数据库维护,而不是直接收缩数据库。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6803645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存