--还原数据库时数据库正在使用导致数据库无会还原,此存储过存在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;
}
分享到:
相关推荐
### SQL Server 2008 数据库还原时遇到“无法获得独占访问权”问题解析与解决方案 在日常的企业级数据库管理与维护工作中,我们经常会遇到数据库备份与还原的需求。对于SQL Server 2008而言,当进行数据库还原操作...
### SQL2000附加数据库只读问题及解决办法 #### 一、问题背景与现象 在使用SQL Server 2000的过程中,有时会遇到附加数据库后处于只读状态的情况。这种状态会导致用户无法对数据库进行任何写入操作,包括插入、...
本文基于 ASP.NET 和 C# 开发平台,探讨了一种用于远程备份与恢复 SQL Server 数据库的方法,特别关注解决“因为数据库正在使用,所以未能获得对数据库的排它访问权,RESTORE DATABASE 操作异常终止”这一常见问题。...
+计划任务在备份数据库后,自动清除旧备份,只保留最后5个备份(按文件,不按时间); *修正计划任务无法正确执行的问题,由皮肤引起的。 1.1.9 +增加win8的支持,增加皮肤以美化界面; +增加查询分析器,方便...
如果在还原数据库过程中遇到“因为数据库正在使用,所以无法获得对数据库的独占访问权”的错误,可以采取以下步骤: 1. 右键点击目标数据库,选择“属性”。 2. 在“数据库属性”对话框中,选择“选项”页签。 3. ...
在尝试还原数据库时,可能会遇到“因为数据库正在使用,所以无法获得对数据库的独占访问权”的错误提示。 **解决方案步骤:** 1. **设置数据库模式:** - 右键单击目标数据库,在弹出的菜单中选择“属性”。 - ...
这通常是由于有用户或后台进程正在连接到要还原的数据库,导致无法获取独占访问权,从而无法完成还原操作。以下是一些解决此类问题的方法: 1. **关闭所有连接**: 解决这个问题的基本思路是确保在还原操作期间...
- **问题描述:** 在还原数据库时可能会遇到“因为数据库正在使用,所以无法获得对数据库的独占访问权”的错误消息。 - **解决方案:** 1. **设置数据库为单用户模式:** - 右键点击需要还原的数据库,选择“属性...
解决方案:在还原数据库时,可能会遇到“因为数据库正在使用,所以无法获得对数据库的独占访问权”的问题。解决方案是右键点击数据库名称,选择“属性”,在“数据库属性”对话框中,选择“选项”,在“其他选项”下...
4. **排他访问权问题**:SQL Server 启动时试图获得数据库文件的排他访问权,如果此时文件被其他程序占用或丢失,数据库会被标记为质疑状态。 5. **非法关机**:电脑突然断电或非法关闭也可能造成数据库质疑。 6. **...
SQL2000是微软公司推出的SQL Server数据库管理系统的一个重要版本,它在20世纪末至21世纪初广泛应用于企业级数据管理。本基础教程旨在帮助初学者掌握SQL2000的基本概念、功能以及操作技巧,为后续的数据库管理和开发...
描述中的“因为数据库正在使用,所以未能获得对数据库的排它访问权的问题”是常见的数据库备份挑战。在SQL Server中,如果一个数据库处于联机状态并被应用程序使用,那么它可能无法进行备份,因为它需要独占访问权限...
此错误表示在尝试创建新数据库或执行其他需要锁定 MODEL 数据库的操作时,无法获得对 MODEL 数据库的独占访问权。MODEL 数据库是 SQL Server 的一个系统数据库,用于作为所有新创建的数据库的模板。如果它被其他进程...
当SQL Server 2000重装或进行数据库备份还原、附加数据库操作后,可能会出现登录名与数据库用户名的关联问题,导致孤立用户,这将影响到用户的正常使用。 首先,让我们探讨孤立用户问题。孤立用户通常是由于数据库...
2. **权限滥用**:如果数据库用户的权限过大,攻击者可能会利用弱密码或未授权访问获取数据库控制权,进而植入木马。 3. **数据库服务漏洞**:SQL Server本身可能存在安全漏洞,攻击者可以利用这些漏洞远程执行代码...
定期备份数据库对于数据保护至关重要,可以防止数据丢失并便于灾难恢复。 9. **XML数据类型**:SQL Server 2008支持XML数据类型,可以直接存储XML文档,并提供了处理XML数据的功能,如XML索引、XML方法等。 10. **...