您的位置:首页 > 其它

问题的解决与改进

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐