分类: Java
2009-05-08 20:50:40
在网上看了很多文章,写关于如何备份sqlserver数据库的,但是都感觉不太好用,最后把几种方法结合了下,呵呵
首先 如果你要对pubs进行备份操作 这个无所谓连哪个库
但是建议在写程序时不要连接你要进行备份和恢复的库,否则会在恢复时出现
[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]因为数据库正在使用,所以未能获得对数据库的排它访问权。
这个异常,所以作为备份和恢复一般连接到master上或者其他系统库
public TestDAO() {
try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); conn = DriverManager.getConnection( "jdbc:sqlserver://localhost:1433;DatabaseName=model", "userName","******"); stmt = conn.createStatement(); bakupname="d:\\backup"+this.dataformat(new Date())+".bak"; System.out.println(bakupname); } catch (Exception e) { e.printStackTrace(); } }
public void beifen() { try { restrename=bakupname; String sql="backup database test to disk = '"+bakupname+"'";
stmt.close(); conn.close(); System.out.println(sql); stmt.executeUpdalte(sq); } catch (Exception e) { e.printStackTrace(); }
}
备份没什么好讲的,主要是恢复,恢复这个数据库的时候,比如我备份的是的test库
所以现在就拿恢复test库为例,首先你要保证你要恢复的数据库没有用户连接
declare @sql varchar(100) while 1=1 begin select top 1 @sql = 'kill '+cast(spid as varchar(3)) from master..sysprocesses where spid > 50 and spid <> @@spid if @@rowcount = 0 break exec(@sql) end
然后再恢复数据库
具体操作如下:
public void huifu() { try { String sql="restore database test from disk = '"+restrename+"'"+" WITH FILE = 1, NOUNLOAD , STATS = 10, RECOVERY , REPLACE"; System.out.println(sql); stmt.executeUpdate(" declare @sql varchar(100) \n"+ "while 1=1 \n"+ "begin \n"+ "select top 1 @sql = 'kill '+cast(spid as varchar(3)) from master..sysprocesses where spid > 50 and spid <> @@spid \n"+ "if @@rowcount = 0 \n"+ "break \n"+ "exec(@sql) \n"+ "end \n");//强行断开除了自己外的所有连接 stmt.executeUpdate(sql); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); }}