Chinaunix首页 | 论坛 | 博客
  • 博客访问: 548580
  • 博文数量: 136
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1343
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 23:18
文章分类

全部博文(136)

文章存档

2011年(28)

2009年(60)

2008年(48)

我的朋友

分类: 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();   }}

阅读(1318) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~