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