日期:2014-05-18  浏览次数:20758 次

Sqlserver 2005数据库还原问题(数据库和web服务器分开的两台)

  Sqlserver 2005数据库还原问题

功能模块:
  项目中有一个功能:新建项目。当用户点击新建时,实际上重新创建了一个新的 数据库。空库!然后再把项目里Item文件夹里的一个 Item.bak(在web服务器上)备份文件(空的表)还原到这个新建的库中。
我现在的部分代码如下:

ItemAction。Java

//建个项目库! 
BaseDAO basedao = new BaseDAO();
String database =basedao.createDatabase(String.valueOf(id));
  //新建库 格式为 SJCL+“项目ID)” (String.valueOf(id)为项目ID

/****************************************************************
 createDatabase(String str)方法
  新建数据库+项目编号&+Temb
public String createDatabase(String XMBH) {
String sql = "create database SJCL" + XMBH;
System.out.println("sql==新建数据库+项目编号&+Temb========" + sql);
CreateConn conn = new CreateConn("master");
conn.executeUpdate(sql);
conn.close();
return "SJCL" + XMBH;
}
******************************************************************/

String sPath=request.getRealPath("/");//得到路径
//Path==C:\Tomcat 5.5\webapps\Test\
String sFilePath=sPath+"Item";//得到备份文件路径
String fn = "Item.bak";//备份文件名
basedao.itemdb_restor_s(database1, sFilePath,fn);
  return itemlist(mapping,form,request,reponse);

//itemdb_restor_s()方法如下:






/////////////////////////////////////////////////////////////////////
//basedao.itemdb_restor_s(database, sFilePath,fn);方法

//新建项目库时还原Item文件夹下的空表备份
public boolean itemdb_restor_s(String sDataBase, String sFilePath,String sFileName) {// 库名.备份文件地址
CreateConn db_conn = new CreateConn("master");
ResultSet rs = null;
Process pr = null;//创建一个进程
// 逻辑数据库信息
String sDLogicalName = null;
String sLLogicalName = null;

// 物理地址
String sDPath = null;
String sLPath = null;


String sql = "";
// String sDataBase="sjcl"+sItemBh;
String myIP=new BaseDAO().getMyIP().toString();
String myIPP[]=myIP.split("/");
myIP=myIPP[1]; //自动获得web服务器Ip

try {
// 获取物理地址信息
sql = "SELECT fileid,name,filename FROM " + sDataBase
+ "..sysfiles ORDER BY fileid";
System.out.println("sql=获取物理地址信息===" + sql);
rs = db_conn.executeQuery(sql);

while (rs.next()) {
// String sss=rs.getString("name").trim();
if (rs.getInt("fileid") == 1) {
sDPath = rs.getString("filename").trim();// 地址一
} else {
if (rs.getInt("fileid") == 2) {
sLPath = rs.getString("filename").trim();// 地址二
}
}
}

// 关闭数据库连接
sql = "select spid from sysprocesses where dbid=db_id('"
+ sDataBase + "')";
System.out.println("sql====关闭数据库连接==" + sql);
rs = db_conn.executeQuery(sql);

while (rs.next()) {
sql = "kill " + rs.getInt(1);
db_conn.executeQuery(sql);
System.out.println("sql====kill==" + sql);
}

pr = Runtime.getRuntime()
.exec("net share SqlBak1=\""+sFilePath+"\""); // 创建本机进程,创建共享目录

System.out.println("net share SqlBak1=\""+sFilePath+"\"");
sql = " exec master..xp_cmdshell 'net use \\\\"+myIP+"\\SqlBak1 !@#ibme54/user:Administrator' ";// 建立共享信用关系
db_conn.executeQuery(sql);
System.out.println("创建共享语句建新项目==" + sql);

// 获取数据库恢复信息
sql = "restore filelistonly from