编程论坛
注册
登录
编程论坛
→
VFP论坛
如何避免或减少数据库损坏的情况
大树临风
发布于 2021-11-09 23:30, 2002 次点击
程序异常退出时,经常把数据库损坏,看到有帖子上讲,对于只读不写的数据表,建议使用将数据导入自由表或临时表读取操作,这样做可行吗?哪位大侠给讲讲
9 回复
#2
wengjl
2021-11-10 08:00
做中考十多年,从未遇到表损坏。因为我用的都是自由表,为了自由嘛。尽量少用表的索引,有索引容易损坏。再无其他的经验了。
#3
吹水佬
2021-11-10 08:49
1、数据备份和恢复
2、重要数据文件打开关闭有节
3、数据变动即时FLUSH
4、打开文件容错处理,尽可能自动修复和恢复数据
#4
独木星空
2021-11-10 09:31
回复 3楼 吹水佬
吹水佬版主把各种情况都考虑进去了。我用的外置硬盘,每每突然断电,都会造成部分表文件损坏,只好从新制表文件,有时不但数据损坏,连表结构也损坏了,只能从磁盘上删除。都是,没有办法的办法。
而对于Excel表,只是没有储存改写的信息(以前的数据不会丢失),没有因为停电,损坏文件的事情发生。
#5
laowan001
2021-11-10 13:47
回复 楼主 大树临风
本地的数据库表如果打开后进行了修改、添加记录、修改结构等update后,建议及时关闭或刷新,否则可能会造成库表损坏,根据操作的不同,损坏程程度也不同。
我的建议:把本地库表数据读入临时表进行处理,需要更新本地库表的时候,更新程序一次执行完毕,中间不要有交互或断点,更新后及时关闭本地库表。
另外:定期做好数据备份是一个好习惯!
个人建议,供参考
#6
shenlancwz
2021-11-10 13:49
尽量用共享打开,对表的更新尽量用SQL命令,能避免99.9%的损坏可能性。
#7
大树临风
2021-11-21 21:50
回复 5楼 laowan001
追问一个问题,临时表使用应注意什么?系统会自动释放临时表吗?
#8
laowan001
2021-11-22 08:01
回复 7楼 大树临风
临时表没有delete/pack
create的临时表可读写
select * from TB into cursor 临时表 (readwrite),如果不加readwrite则为只读
临时表也可以建索引
个人感觉,临时表的使用与本地表没啥大区别,只是效率会高一点点
临时表用完关闭即可释放资源
我目前的应用系统除了数据字典是本地表(远程下载的),其他都是临时表
[此贴子已经被作者于2021-11-22 08:17编辑过]
#9
xuminxz
2021-11-22 08:25
DBF表损坏是VFP最大缺点之一,这是由VFP打开表的方式决定的。打开的表与关闭的表,其表头结构不同(可能是为了提高效率)。另外,考虑到单机磁盘空间与速度,并没有建立一个完整的临时文件。正常关闭时会将表头改回,增减过记录的表直接断电,几乎都会破坏。
没有研究过这两种表头的关系,如果没有备注字段、并且知道原表的结构可以手工修复。
1、建立一个空表,结构与要修复的相同
2、用二进制编辑器打开损坏的表,删除第一条记录前的内容保存为文本文件
3、用Append命令将其加入到新表中。
这样的操作可以完全恢复到的最后操作状态。
有一个例外,就是执行PACK命令时断电,修复起来比较难(曾经用了一个2W多记录的表,在486上试过)。
以上都是2005年前做的,现在有修复工具可以解决大部分问题。
05年之后,我几乎不用DFB保存关键数据了,后台用过SQL、Oracle、Access都没有丢失过数据。如果有条件最好用Oracle,它的回溯功能最好。
#10
sych
2021-11-22 08:42
这个和移动磁盘的存储机制有关,安全退出U盘才不丢数据
1