1.时候在使用Access文件的时候,随着增删改的不断的连续,会导致文件越来越大。即使手动删除或者使用delete语句删除了大量的数据记录,会发现文件的大小依然没有减掉,而且随着你再往里写数据,又会增大。
2.产生这个现象的原因跟Access本身的机制有关,具体也不清楚,好像是有什么历史记录还是什么存储碎片。ACCESS数据库在进行删除 *** 作后,并不从该数据库中把数据清除掉,而是删除其索引相关的东西,虽然显示不出来,但是那些东西还是在文件中存在的,所以会引起ACCESS数据库文件越来越大。即使是我们不通过代码来访问access文件,而只是通过用户界面访问,随着文件的增大,也会带来一系列的问题。其症状包括:对象可能打开得更慢,查询可能比正常情况下运行的时间更长,各种典型 *** 作通常似乎也需要使用更长时间。更何况如果在网站应用中,采用的是Access作为数据库的话,这里就有了性能上的问题。文件越来越大,会影响查询的速度,而且ACCESS是采用独占方式工作的,也就是说一次只能一个进程打开这个数据库执行 *** 作,如果是多个用户的话就要"排队"了,所以ACCESS数据库如果变为很大的话,执行一个查询时间就会变长,而进程"排队"的等待时间也就会变得很久,专业型的数据库就不同,可以同时接收多个并发的访问,可以采用SQL数据库或其它大型并发数很强的数据库。
3.但是很多时候我们是需要Access文件,往不同的地方拷贝的,比如说,一个Server上生成了一个Access文件,需要拷贝到另外的Server上,而且Server间如果网速不是很好的话,会需要很长的时间来传输这个文件。所以这时候我们希望这个文件在内容不变的前提下,越小越好。所以我们可以去除这个Access的冗余信息。
4.Office Access本身就有这种功能,我们可以通过菜单找到这个工具,然后单击这个图标手动压缩。
5.执行以下这几句代码就可以了。
首先引用C:\Program Files\Common Files\System\ado\msadox.dll,该DLL包含ADOX命名空间
接着引用C:\Program Files\Common Files\System\ado\msjro.dll,该DLL包含JRO命名空间
注意:如,导入dll不成功,手动把com组件 导入为 .net组件,在用vs.net工具导入
///压缩修复ACCESS数据库,mdbPath为数据库绝对路径
public void Compact(string mdbPath)
{
if (!File.Exists(mdbPath)) //检查数据库是否已存在
{
throw new Exception("目标数据库不存在,无法压缩")
}
//声明临时数据库的名称
string temp = DateTime.Now.Year.ToString()
temp += DateTime.Now.Month.ToString()
temp += DateTime.Now.Day.ToString()
temp += DateTime.Now.Hour.ToString()
temp += DateTime.Now.Minute.ToString()
temp += DateTime.Now.Second.ToString() + ".bak"
temp = mdbPath.Substring(0, mdbPath.LastIndexOf("\\") + 1) + temp
//定义临时数据库的连接字符串
string temp2 = "Provider=Microsoft.Jet.OLEDB.4.0Data Source=" + temp
//定义目标数据库的连接字符串
string mdbPath2 = "Provider=Microsoft.Jet.OLEDB.4.0Data Source=" + mdbPath + "Jet OLEDB:Database Password=l1epc2"
//创建一个JetEngineClass对象的实例
JetEngineClass jt = new JetEngineClass()
//使用JetEngineClass对象的CompactDatabase方法压缩修复数据库
jt.CompactDatabase(mdbPath2, temp2)
//拷贝临时数据库到目标数据库(覆盖)
File.Copy(temp, mdbPath, true)
//最后删除临时数据库
File.Delete(temp)
}
收缩数据库一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此 *** 作以免数据库日志过大
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式, *** 作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
一般是由于监听日志(listener.log)文件过大导致的。文件所在位置:$ORACLE_HOME\diag\tnslsnr\机器名\listener\trace。
解决方法:1、关闭oracle的监听服务2、将listener.log文件备份后清除(可将原文件直接重命名为listener-bak)。3、开启监听服务后即可登陆oralce。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)