首先 如果你要对 pubs 进行备份操作 这个无所谓连哪个库
但是建议在写程序时不要连接你要进行备份和恢复的库,否则会在恢复时出现
[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer] 因为数据库正在使用,所以未能获得对数据库的排它访问权。
这个异常,所以作为备份和恢复一般连接到 master 上或者其他系统库
备份没什么好讲的,主要是恢复,恢复这个数据库的时候,比如我备份的是的 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
然后再恢复数据库
具体操作如下:
package com.haso.HIDS.util; import java.sql.*; public class SQL2000BeifenHuiFu { /*** * * @param dbname * @param restrename */ public static void BeiFen(String dbname,String restrename) { try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); Connection conn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://1.1.1.1:1433;DatabaseName=XXXXX", "****","********"); String bakupname=restrename; String sql="backup database "+dbname+" to disk = '"+bakupname+"'"; Statement stmt = conn.createStatement(); stmt.executeUpdate(sql); System.out.println(bakupname); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) { BeiFen("XXXX_X","D://X.bak"); BeiFen("XXXX","D://XX.bak"); } /*** * * @param dbname * @param restrename */ public static void HuiFu(String dbname,String restrename ) { try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); Connection conn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://1.1.1.1:1433;DatabaseName=XXXX", "**","*******"); String sql="restore database "+dbname+" from disk = '"+restrename+"'"+" WITH FILE = 1, NOUNLOAD , STATS = 10, RECOVERY , REPLACE"; System.out.println(sql); Statement stmt = conn.createStatement(); 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(); } } }