`
wtnhwbb
  • 浏览: 166085 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL 2000 备份数据库,排它访问权。解决方法

阅读更多
--还原数据库时数据库正在使用导致数据库无会还原,此存储过存在msater数据库下创建。exec killspid cztdba 结束此数据库的进程,这样才能还原数据库
create proc killspid (@dbname varchar(20))     
as     
begin     
declare @sql   nvarchar(500)     
declare @spid  int     
set @sql='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''')'     
exec (@sql)     
open getspid     
fetch next from getspid into @spid     
while @@fetch_status <> -1     
begin     
exec('kill '+@spid)     
fetch next from getspid into @spid     
end     
close getspid     
deallocate getspid     
end  

 

/**
   * 还原数据库备份文件
   * @return
   */
  public String restoreDatabase() {
    String path = null;
    try {
      path = WebUtils.getRealPath(getServletContext(), restDatabasePath);
    } catch (FileNotFoundException e) {
      logger.error("Can't get web path.", e);
    }
    //文件夹不存在创建
    uploadedFileHandler.setTargetPath(path);
    //得到上传后文件对象
    File file = uploadedFileHandler.doUpload(data, dataFileName);
    if (file.exists()) {
      StringBuffer sbf = new StringBuffer();
      sbf.append("use master exec killspid 'cztdba' restore database cztdba from disk='")
         .append(file.getPath())
         .append("'");
      
      //执行还原数据语句
      try {
        jdbcTemplate.execute(sbf.toString());
        addActionError("还原数据库成功");
      } catch(Exception e) {
        addActionError("还原数据库失败");
      }
      
      /**
       * 不添加这句会找不到数据库里的表,添加上这句会出现异常但是对系统无影响,所以把此异常屏蔽
       */
      try {
        jdbcTemplate.execute("use cztdba");
      } catch(Exception e) {
        //e.printStackTrace();
      }
    }
    return INPUT;
  }
 
  /**
   * 备份数据库文件
   * @return
   */
  public String backDatabase() {
    StringBuffer path = new StringBuffer();
    try {
      path.append(WebUtils.getRealPath(getServletContext(), backDatabasePath));
    } catch (FileNotFoundException e) {
      logger.error("Can't get web path.", e);
    }
    //文件夹不存在创建
    uploadedFileHandler.setTargetPath(path.toString());
    //下载文件名称,随机生成
    downFileName = DateUtil.getDateTime("yyyyMMddhhmmss", new Date()) + ".back";
    //得到文件在系统中实际地址
    path.append(File.separatorChar)
        .append(downFileName);
    //开始备份文件
    StringBuffer sbf = new StringBuffer("backup database cztdba to disk='")
      .append(path.toString())
      .append("'");
    jdbcTemplate.execute(sbf.toString());
    try {
      inputStream = new FileInputStream(path.toString());
    } catch (FileNotFoundException e) {
      e.printStackTrace();
      addActionError("备份文件出现问题");
      return INPUT;
    }
    return SUCCESS;
  }

 

 

分享到:
评论

相关推荐

    还原sqlserver2008数据提示:因为数据库正在使用,所以无法获得对数据库的独占访问权.docx

    ### SQL Server 2008 数据库还原时遇到“无法获得独占访问权”问题解析与解决方案 在日常的企业级数据库管理与维护工作中,我们经常会遇到数据库备份与还原的需求。对于SQL Server 2008而言,当进行数据库还原操作...

    SQL2000附加数据库只读的解决办法

    ### SQL2000附加数据库只读问题及解决办法 #### 一、问题背景与现象 在使用SQL Server 2000的过程中,有时会遇到附加数据库后处于只读状态的情况。这种状态会导致用户无法对数据库进行任何写入操作,包括插入、...

    ASP_net_C_远程备份与恢复SQLServer数据库的设计与实现.pdf

    本文基于 ASP.NET 和 C# 开发平台,探讨了一种用于远程备份与恢复 SQL Server 数据库的方法,特别关注解决“因为数据库正在使用,所以未能获得对数据库的排它访问权,RESTORE DATABASE 操作异常终止”这一常见问题。...

    迷你版SQL2000服务器

    +计划任务在备份数据库后,自动清除旧备份,只保留最后5个备份(按文件,不按时间); *修正计划任务无法正确执行的问题,由皮肤引起的。 1.1.9 +增加win8的支持,增加皮肤以美化界面; +增加查询分析器,方便...

    SQL 数据库备份以及还原.docx

    如果在还原数据库过程中遇到“因为数据库正在使用,所以无法获得对数据库的独占访问权”的错误,可以采取以下步骤: 1. 右键点击目标数据库,选择“属性”。 2. 在“数据库属性”对话框中,选择“选项”页签。 3. ...

    SQL server 2008数据库的备份与还原

    在尝试还原数据库时,可能会遇到“因为数据库正在使用,所以无法获得对数据库的独占访问权”的错误提示。 **解决方案步骤:** 1. **设置数据库模式:** - 右键单击目标数据库,在弹出的菜单中选择“属性”。 - ...

    sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法

    这通常是由于有用户或后台进程正在连接到要还原的数据库,导致无法获取独占访问权,从而无法完成还原操作。以下是一些解决此类问题的方法: 1. **关闭所有连接**: 解决这个问题的基本思路是确保在还原操作期间...

    SQL2008数据库-备份与还原.doc

    - **问题描述:** 在还原数据库时可能会遇到“因为数据库正在使用,所以无法获得对数据库的独占访问权”的错误消息。 - **解决方案:** 1. **设置数据库为单用户模式:** - 右键点击需要还原的数据库,选择“属性...

    SQL数据库的备份与还原、分离与附加.doc

    解决方案:在还原数据库时,可能会遇到“因为数据库正在使用,所以无法获得对数据库的独占访问权”的问题。解决方案是右键点击数据库名称,选择“属性”,在“数据库属性”对话框中,选择“选项”,在“其他选项”下...

    SQL数据库质疑问题解决方案

    4. **排他访问权问题**:SQL Server 启动时试图获得数据库文件的排他访问权,如果此时文件被其他程序占用或丢失,数据库会被标记为质疑状态。 5. **非法关机**:电脑突然断电或非法关闭也可能造成数据库质疑。 6. **...

    SQL2000基础教程

    SQL2000是微软公司推出的SQL Server数据库管理系统的一个重要版本,它在20世纪末至21世纪初广泛应用于企业级数据管理。本基础教程旨在帮助初学者掌握SQL2000的基本概念、功能以及操作技巧,为后续的数据库管理和开发...

    Net数据库备份与还原

    描述中的“因为数据库正在使用,所以未能获得对数据库的排它访问权的问题”是常见的数据库备份挑战。在SQL Server中,如果一个数据库处于联机状态并被应用程序使用,那么它可能无法进行备份,因为它需要独占访问权限...

    SQL Server 2000 常见错误.doc

    此错误表示在尝试创建新数据库或执行其他需要锁定 MODEL 数据库的操作时,无法获得对 MODEL 数据库的独占访问权。MODEL 数据库是 SQL Server 的一个系统数据库,用于作为所有新创建的数据库的模板。如果它被其他进程...

    sql server 2000登录名与数据库用户名的关联问题

    当SQL Server 2000重装或进行数据库备份还原、附加数据库操作后,可能会出现登录名与数据库用户名的关联问题,导致孤立用户,这将影响到用户的正常使用。 首先,让我们探讨孤立用户问题。孤立用户通常是由于数据库...

    sql server数据库中内容被挂马清除工具

    2. **权限滥用**:如果数据库用户的权限过大,攻击者可能会利用弱密码或未授权访问获取数据库控制权,进而植入木马。 3. **数据库服务漏洞**:SQL Server本身可能存在安全漏洞,攻击者可以利用这些漏洞远程执行代码...

    SQL2008 附加数据库提示5120错误解决方法

    定期备份数据库对于数据保护至关重要,可以防止数据丢失并便于灾难恢复。 9. **XML数据类型**:SQL Server 2008支持XML数据类型,可以直接存储XML文档,并提供了处理XML数据的功能,如XML索引、XML方法等。 10. **...

Global site tag (gtag.js) - Google Analytics