SQL server2005数据库还原问题。。。。。。

yinxiaoqi 2010-08-03 05:51:56
首先我执行这条SQL语句进行还原数据,打开查询分析器,然后还得需要把 可用数据库 切换到 master 才可以还原

restore database ZC_NmSoft from disk='D:\bak\2010-08-03.bak' WITH REPLACE,RECOVERY


已为数据库 'ZC_NmSoft',文件 'ZC_NmSoft' (位于文件 1 上)处理了 248 页。
已为数据库 'ZC_NmSoft',文件 'ZC_NmSoft_log' (位于文件 1 上)处理了 2 页。
RESTORE DATABASE 成功处理了 250 页,花费 0.184 秒(11.091 MB/秒)。


执行成功,我现在是想在 程序里面还原 直接点击还原按钮就可以还原,这是我的代码:

<form name="form1" action="/NMSoftware/admin.do?method=dbReduction" method="post" onSubmit="return check(form1)">
<TABLE cellSpacing=0 cellPadding=0 width="70%" align="center" border=1 bordercolor="#d1e6f7">
<tr>
<td>数据库还原信息:</td>
<td align="center">
原数据库名称:   <input type="text" name="dbname" value="ZC_NmSoft" size="25" readonly="readonly">    <br/>
数据库还原名称:<input type="text" name="dbpath" value="<%=dbdate1%>" size="25" onFocus="WdatePicker({isShowClear:false,readOnly:true})" >    <br/>
<input type="submit" value="还原"></td>
</tr>
</TABLE>
</form>

然后传到Action里面 代码如下:

public ActionForward dbReduction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException {
response.setCharacterEncoding("gb2312");
response.setContentType("text/html");
AdminForm adminForm = (AdminForm) form;// TODO Auto-generated method stub
//HttpSession session = request.getSession();d:\bak\<%=dbdate1 %>.bak
PrintWriter out=response.getWriter();
String dbname = new String(request.getParameter("dbname").getBytes("ISO-8859-1"),"gb2312");
String sdbpath = new String(request.getParameter("dbpath").getBytes("ISO-8859-1"),"gb2312");
String dbpath = "d:\bak\'"+sdbpath+"'.bak";
SqlBean sq = new SqlBean();
int i =sq.dateReduction(dbname, dbpath);
out.println("<script language=javascript>alert('数据还原成功');window.top.main.location.href='rxdj/dbment.jsp';window.parent.cancel();</script>");
return null;
}

这个 是SqlBean.java这里面有个方法:

public int dateReduction(String dbname,String dbpath) throws SQLException{
int i = 0;
Connection conn = this.getconnection();
String sql = "restore database ? from disk=? WITH REPLACE,RECOVERY";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dbname);
pstmt.setString(2, dbpath);
i = pstmt.executeUpdate();
pstmt.close();
conn.close();
return i;
}


不知道大家能不能看明白 ,现在 点击还原 就会出错的。大家帮帮忙啊!在线等。。。。
...全文
126 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinxiaoqi 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xys_777 的回复:]
引用 7 楼 shutao917 的回复:
String sql = "use master; restore database ? from disk=? WITH REPLACE,RECOVERY";


参考这个写法,改改试试
[/Quote]
这个我也试过了 ,还是出现错误,

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: 因为数据库正在使用,所以无法获得对数据库的独占访问权。
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause

com.microsoft.sqlserver.jdbc.SQLServerException: 因为数据库正在使用,所以无法获得对数据库的独占访问权。
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
sqlbean.SqlBean.dateReduction(SqlBean.java:1955)
com.yourcompany.struts.action.AdminAction.dbReduction(AdminAction.java:100)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.


--------------------------------------------------------------------------------

Apache Tomcat/6.0.26
永生天地 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shutao917 的回复:]
String sql = "use master; restore database ? from disk=? WITH REPLACE,RECOVERY";
[/Quote]

参考这个写法,改改试试
yinxiaoqi 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xys_777 的回复:]
你在程序里切换到master数据库上了吗?
这是必须的
[/Quote]
应该是没有切换,需要怎么切换呢!
情殇无限 2010-08-03
  • 打赏
  • 举报
回复
String sql = "use master; restore database ? from disk=? WITH REPLACE,RECOVERY";
yinxiaoqi 2010-08-03
  • 打赏
  • 举报
回复
这是报的错误。
yinxiaoqi 2010-08-03
  • 打赏
  • 举报
回复

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: RESTORE 无法处理数据库 'ZC_NmSoft',因为它正由此会话使用。建议在执行此操作时使用 master 数据库。
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause

com.microsoft.sqlserver.jdbc.SQLServerException: RESTORE 无法处理数据库 'ZC_NmSoft',因为它正由此会话使用。建议在执行此操作时使用 master 数据库。
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
sqlbean.SqlBean.dateReduction(SqlBean.java:1952)
com.yourcompany.struts.action.AdminAction.dbReduction(AdminAction.java:98)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.


--------------------------------------------------------------------------------

Apache Tomcat/6.0.26
王向飞 2010-08-03
  • 打赏
  • 举报
回复
String sql = "use master restore database ? from disk=? WITH REPLACE,RECOVERY";
情殇无限 2010-08-03
  • 打赏
  • 举报
回复
i = pstmt.executeUpdate();
记忆中好像不应该用executeUpdate,或者你可以写个存储过程还原,然后代码里调用存储过程
永生天地 2010-08-03
  • 打赏
  • 举报
回复
你在程序里切换到master数据库上了吗?
这是必须的
王向飞 2010-08-03
  • 打赏
  • 举报
回复
报的什么错?
把这句打印出来看看 String sql = "restore database ? from disk=? WITH REPLACE,RECOVERY";

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧