java 实现SQLServer2000备份和还原

首先 如果你要对 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(); } } }

你可能感兴趣的:(java,sql,exception,String,Microsoft,sqlserver)