问题的解决与改进
2005-12-26 21:36
190 查看
感谢boyd大人提供的方法。看后我幡然醒悟:要在与数据库交互才能进入的管理系统中恢复数据结构,就犹如站在树枝上锯树干。
于是我在这里用了双数据库。将基本表(用户信息、菜单信息)置于数据库A中,以构成管理系统的框架;其余大量数据置于数据库B中,这样便可在A框架下备份恢复数据库B。
在boyd的方法以及大众方法中,存在这样的问题:每备份数据库一次,备份文件便会成倍增大,新旧数据共处于一个文件中,要恢复某次的备份数据很困难。
因而我在备份时用某次的时间命名文件,并把路径和文件名记录到数据库A。再把用户最后一次录入文本框的内容滞留下来。在默认情况下恢复的是最近一次备份数据,用户也可选择之前某次的备份文件来进行恢复。
核心源代码如下:
<!--#include file="../login/check.asp" -->
<!--#include file="../../inc/conn1.asp" -->
<!--#include file="../../inc/function.asp" -->
<HTML> <BODY> <FORM method="post" name="form1"> <table width="100%" height="136"> <tr><td width="25%" height="32">选择操作:</td> <td width="75%"> <INPUT TYPE="radio" NAME="act" id="act_backup" value="backup">备份 <INPUT TYPE="radio" NAME="act" id="act_restore" value="restore">恢复 </td></tr> <tr><td height="32">数据库名:</td> <td><INPUT TYPE="text" NAME="databasename" value="FTS">输入要操作的数据库名</td> </tr> <tr><td height="30">文件路径:</td> <td height="30">
<% '这里是选取出最后一次输入的路径与文件名,表DBinfo的id设为自动增长型
dim Rs,Sql,Sql1,pathinfo,num sql="Select Max(id) From DBinfo" Set rs= Server.CreateObject("ADODB.Recordset") rs.open sql,conn,1,1 num=Rs(0) sql1="select * from DBinfo where id="&num Set rs= Server.CreateObject("ADODB.Recordset") rs.open sql1,conn,1,1 pathinfo=Rs("PathInfo")
%> <INPUT TYPE="text" NAME="bak_file" value="<%=pathinfo%>">输入存储的路径及名称</td> </tr> <tr><td height="30"></td> <td height="30"> '这里要确认一下操作 <input type="submit" onClick="{if(confirm('确定所选定的操作吗!?')){this.document.submit();return true;}return false;}" value="确 定"> </td> </tr> </table> <%dim sqlserver,sqlname,sqlpassword,sqlLoginTimeout,databasename,bak_file,actsqlserver = "TENGHE-YEXX" sqlname = "sa" sqlpassword = "" sqlLoginTimeout = 15 databasename = trim(request("databasename"))bak_file = trim(request("bak_file"))
act = lcase(request("act"))
if databasename = "" then response.write "<font color=red>请输入要备份或恢复的数据库名,并暂停其它数据库操作!</font>"else if act = "backup" then Set srv=Server.CreateObject("SQLDMO.SQLServer") srv.LoginTimeout = sqlLoginTimeout srv.Connect sqlserver,sqlname, sqlpassword Set bak = Server.CreateObject("SQLDMO.Backup") bak.Database=databasename bak.Devices=Files bak.Files=bak_file bak.SQLBackup srv '弹出提示窗口表示操作成功或失败
on error resume next If err Then Call showerror("出错了,数据库备份失败!") Else Call showsuccess("备份成功","backup.asp") End If
'备份成功后记录备份路径与文件名 set rs=server.createobject("adodb.recordset") rs.open "DBinfo",conn,1,2 rs.addnew rs("PathInfo") = bak_file rs.update
elseif act = "restore" then '恢复时要在没有使用数据库时进行! Set srv=Server.CreateObject("SQLDMO.SQLServer") srv.LoginTimeout = sqlLoginTimeout srv.Connect sqlserver,sqlname, sqlpassword Set rest=Server.CreateObject("SQLDMO.Restore") rest.Action=0 ' full db restore rest.Database=databasename rest.Devices=Files rest.Files=bak_file rest.ReplaceDatabase=True 'Force restore over existing database rest.SQLRestore srv on error resume nextIf err Then Call showerror("出错了,数据库恢复失败!")Else Call showsuccess("恢复成功","backup.asp")End If end ifend if%> </div></FORM></BODY></HTML>
于是我在这里用了双数据库。将基本表(用户信息、菜单信息)置于数据库A中,以构成管理系统的框架;其余大量数据置于数据库B中,这样便可在A框架下备份恢复数据库B。
在boyd的方法以及大众方法中,存在这样的问题:每备份数据库一次,备份文件便会成倍增大,新旧数据共处于一个文件中,要恢复某次的备份数据很困难。
因而我在备份时用某次的时间命名文件,并把路径和文件名记录到数据库A。再把用户最后一次录入文本框的内容滞留下来。在默认情况下恢复的是最近一次备份数据,用户也可选择之前某次的备份文件来进行恢复。
核心源代码如下:
<!--#include file="../login/check.asp" -->
<!--#include file="../../inc/conn1.asp" -->
<!--#include file="../../inc/function.asp" -->
<HTML> <BODY> <FORM method="post" name="form1"> <table width="100%" height="136"> <tr><td width="25%" height="32">选择操作:</td> <td width="75%"> <INPUT TYPE="radio" NAME="act" id="act_backup" value="backup">备份 <INPUT TYPE="radio" NAME="act" id="act_restore" value="restore">恢复 </td></tr> <tr><td height="32">数据库名:</td> <td><INPUT TYPE="text" NAME="databasename" value="FTS">输入要操作的数据库名</td> </tr> <tr><td height="30">文件路径:</td> <td height="30">
<% '这里是选取出最后一次输入的路径与文件名,表DBinfo的id设为自动增长型
dim Rs,Sql,Sql1,pathinfo,num sql="Select Max(id) From DBinfo" Set rs= Server.CreateObject("ADODB.Recordset") rs.open sql,conn,1,1 num=Rs(0) sql1="select * from DBinfo where id="&num Set rs= Server.CreateObject("ADODB.Recordset") rs.open sql1,conn,1,1 pathinfo=Rs("PathInfo")
%> <INPUT TYPE="text" NAME="bak_file" value="<%=pathinfo%>">输入存储的路径及名称</td> </tr> <tr><td height="30"></td> <td height="30"> '这里要确认一下操作 <input type="submit" onClick="{if(confirm('确定所选定的操作吗!?')){this.document.submit();return true;}return false;}" value="确 定"> </td> </tr> </table> <%dim sqlserver,sqlname,sqlpassword,sqlLoginTimeout,databasename,bak_file,actsqlserver = "TENGHE-YEXX" sqlname = "sa" sqlpassword = "" sqlLoginTimeout = 15 databasename = trim(request("databasename"))bak_file = trim(request("bak_file"))
act = lcase(request("act"))
if databasename = "" then response.write "<font color=red>请输入要备份或恢复的数据库名,并暂停其它数据库操作!</font>"else if act = "backup" then Set srv=Server.CreateObject("SQLDMO.SQLServer") srv.LoginTimeout = sqlLoginTimeout srv.Connect sqlserver,sqlname, sqlpassword Set bak = Server.CreateObject("SQLDMO.Backup") bak.Database=databasename bak.Devices=Files bak.Files=bak_file bak.SQLBackup srv '弹出提示窗口表示操作成功或失败
on error resume next If err Then Call showerror("出错了,数据库备份失败!") Else Call showsuccess("备份成功","backup.asp") End If
'备份成功后记录备份路径与文件名 set rs=server.createobject("adodb.recordset") rs.open "DBinfo",conn,1,2 rs.addnew rs("PathInfo") = bak_file rs.update
elseif act = "restore" then '恢复时要在没有使用数据库时进行! Set srv=Server.CreateObject("SQLDMO.SQLServer") srv.LoginTimeout = sqlLoginTimeout srv.Connect sqlserver,sqlname, sqlpassword Set rest=Server.CreateObject("SQLDMO.Restore") rest.Action=0 ' full db restore rest.Database=databasename rest.Devices=Files rest.Files=bak_file rest.ReplaceDatabase=True 'Force restore over existing database rest.SQLRestore srv on error resume nextIf err Then Call showerror("出错了,数据库恢复失败!")Else Call showsuccess("恢复成功","backup.asp")End If end ifend if%> </div></FORM></BODY></HTML>
相关文章推荐
- 改进的单例模式,解决并发生成多实例问题,并且提高调用时的性能
- 应用主题后FCKeditor上传问题的解决及相应的改进
- 改进版截图函数(主要解决XP下保存对话框遮挡截图问题)
- MySQL 5.1的中文支持的一个改进,从MySQL 4.1开始不支持中文路径,文件名的问题解决了
- 一、 找出函数中存在的问题。以下题目均在Lab05项目中完成。2、 找出项目中存在的缺陷,并给出解决的方案(至少3个,不包含下面那个举例)。 说明:这里所说的缺陷不一定都是错误,而是明显需要改进的地方。 如:不可以无限输入密码,容易被暴力破解,存在安全隐患。
- 第四章函数--函数初体验项目2-1用函数解决素数回文数问题(改进)
- 梯度爆炸与梯度消失的原因以及解决方法,局部极小值问题以及学习率问题(对SGD的改进)
- Email小案例改进版——解决带附件不显示邮件正文问题
- 解决awstats跨月分析日志问题及其他改进
- C#使用RSA私钥加密公钥解密的改进,解决特定情况下解密后出现乱码的问题
- 改进动态设置query cache导致额外锁开销的问题分析及解决方法-mysql 5.5 以上版本
- 饼状图的改进(解决零值和数值无限小的显示问题)
- 应用主题后FCKeditor上传问题的解决及相应的改进
- 解决我的开源代码里面的前一篇后一篇的跳页问题,由于时间关系我不发图了,存储过程没有更改,我改进了一下报错功能,用来重新定义属性
- easyui——treegrid级联选中之微改进,解决解除选中的问题。
- 快排改进 解决升序第一个是最大数 降序第一个是最小数问题
- 应用主题后FCKeditor上传问题的解决及相应的改进
- 解决HttpContext.Current.Request.Files返回的文件个数不正确问题
- JavaScript页面刷新与弹出窗口问题解决方法
- 解决ORACLE插入乱码的问题