使用java程序通过jdbc调用数据库存储过程实现数据库的备份和还原时报如下错误:
java.sql.SQLException: 无法打开备份设备 'db_yxt_data'。设备出现错误或设备脱机。详细信息请参阅 SQL Server 错误日志。
备份数据库的存储过程如下:
use db_test
go
--数据库备份存储过程(backupPath:备份路径,backupFile:将要产生的备份文件名)
CREATE PROCEDURE backupDatabase(@backupPath varchar(200),@backupFile varchar(200))
as
declare
@path varchar(200),
@ReturnCode int
begin
SELECT @path = @backupPath+'/'+@backupFile;
IF EXISTS(SELECT 1 FROM master.dbo.sysdevices WHERE name ='db_test_data'
OR phyname = @path)
begin
exec sp_dropdevice 'db_test_data'
end
EXEC sp_addumpdevice 'disk', 'db_test_data', @path;
BACKUP DATABASE db_test TO db_test_data ;
end
GO
错误产生的原因:
对应的数据库备份文件存放路径不存在,如backupFile=‘c:/backup’,但是c盘目录下没有backup文件夹,则会报上述错误。
解决办法是在相应java备份程序前先创建对应的目录,具体java代码如下:
/**
* 数据库备份
*
* @return
*/
public String backUpDatabase() {
Session session = null;
String result = "数据库备份失败!";
//从数据库系统参数中获取备份路径
String backUpPath = getSvalueBySkey("backUpPath");
if (null == backUpPath) {
result = "系统参数中没有指定备份路径,数据库备份失败!";
} else {
try {
//若备份目录不存在则新建
File file = new File(backUpPath);
if(!file.exists()){
file.mkdirs();
}
session = systemParaDao.getSessionFactory().getCurrentSession();
Connection con = session.connection();
String nowDateStr = new SimpleDateFormat("yyyy-MM-dd-HHmmss").format(new Date());
String sql = "{call dbo.backupDatabase(?,?)} ";//项目数据库备份
CallableStatement stat = con.prepareCall(sql);
stat.setString(1, backUpPath+"/aa");
stat.setString(2, "bakdb_" + nowDateStr + ".bak");
stat.execute();
result = "数据库备份成功,备份文件位置:" + backUpPath + "/bakdb_" + nowDateStr + ".bak";
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
return "{\"message\":\""+result+"\"}";
}
扩展:
数据库恢复存储过程如下:
--结束数据库访问进程(恢复之前,应该调用该存储过程杀死所有访问当前将要恢复的数据库进程,否则数据库无法进行恢复操作)
use master
go
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
GO
--数据库备份恢复
use master
go
CREATE PROCEDURE restoreBxtDatabase(@backupPath varchar(200),@backupFile varchar(200))
as
declare
@path varchar(200)
begin
SELECT @path = @backupPath+'/'+@backupFile;
IF EXISTS(SELECT 1 FROM master.dbo.sysdevices WHERE name ='db_test_data'
OR phyname = @path)
begin
EXEC sp_dropdevice 'db_test_data';
end
EXEC sp_addumpdevice 'disk', 'db_test_data', @path;
RESTORE DATABASE db_test FROM db_test_data;
end
GO
分享到:
相关推荐
在Java编程中,`java.sql.SQLException: 结果集已耗尽` 是一个常见的错误提示,通常出现在处理数据库查询结果集时。这个异常表明程序试图访问已经没有数据的结果集中下一行,即所有行已经被遍历完,尝试访问超出范围...
标题中的“Caused by: java.sql.SQLException: JZ0SJ: 没有在此数据库中发现元数据存取器信息。 请按 jConnect 文档中所述安装”是一个典型的错误信息,表明在尝试使用Java数据库连接(JDBC)驱动程序访问数据库时...
java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK ……
在oracle里面运行一下,解决Exception java.sql.SQLException ORA-00600 内部错误代码
### 服务器出现java.sql.SQLException No suitable driver found for 的解析与解决方案 #### 问题背景 在进行Servlet开发过程中,尤其是在尝试连接数据库时,遇到了一个常见的异常:“java.sql.SQLException: No ...
在进行Microsoft SQL Server(简称Mssql)数据库备份操作时,用户可能会遇到“无法打开备份设备”的错误消息。这一问题往往让DBA(数据库管理员)和系统管理员感到困扰,因为这直接影响到数据的安全性和业务的连续性...
- `java.sql.SQLException: ORA-01000: maximum open cursors exceeded`: 当打开的游标超过数据库允许的最大值时会出现此错误。检查代码中游标的关闭情况,避免资源泄漏。 8. **锁冲突** - `java.sql....
8. **异常处理**:在处理数据库操作时,必须捕获SQLException和其他可能的异常,进行合适的错误处理和日志记录。 9. **安全性**:使用PreparedStatement防止SQL注入攻击,同时对敏感信息(如密码)进行加密存储和...
Q: I am working with ... I am using updateBinaryStream method of resultset to update the BLOB field but it is failing after giving following exception java.sql.SQLException: Internal Error: Unable to
java.sql.SQLException: null, message from server: “Host ‘223.72.41.7’ is not allowed to connect to this MySQL server” 客户端访问时报错: 解决方法: 1,登陆服务器 mysql> use mysql; //用mysql ...
问题是这样的…我在VS2008直接运行打开网页,可以连接... 异常详细信息: System.Data.SqlClient.SqlException: 无法打开登录所请求的数据库 “TakeClass”。登录失败。 用户 ‘2D2727E2578F446\ASPNET’ 登录失败。
主要给大家介绍了关于MySQL存储表情时报错:java.sql.SQLException: Incorrect string value: 'xF0x9Fx92xA9x0Dx0A...'的解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
当你遇到"java.sql.SQLException: No suitable driver"这样的错误时,通常意味着你的Java环境无法找到匹配的数据库驱动。这个问题的解决方法是确保已经正确地引入了MySQL JDBC驱动(也称为Connector/J)。 MySQL ...
本文主要介绍了关于MySQL存储表情报错:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\xA9\x0D\x0A…’的相关解决方法,分享出供大家参考学习,下面话不多说了,来一起看看详细的介绍: ...
这种错误通常是由于开发者在编写 SQL 语句时,忘记了某个表名或视图名,导致 Oracle 无法找到该表名或视图名。解决这个错误的方法是,检查 SQL 语句中的表名或视图名是否正确,确保表名或视图名存在于数据库中。 ...
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 提示的是用户访问被拒绝,原因是密码不正确,但是我们明明配置的是正确的密码,原因就在yml中: spring: datasource: ...
import java.sql.SQLException; ``` 3. **注册驱动**:在使用MySQL驱动前,需要通过`Class.forName()`方法注册驱动。尽管在较新的JDBC版本中这个步骤可以省略,但为了兼容性,很多示例代码仍然包含它: ```java ...
java.sql.SQLException: Operation not allowed after ResultSet closed java.sql.SQLException: QueryRunner requires a DataSource to be invoked in this way, or a Connection should be passed in
当你尝试连接到MySQL数据库时,可能会遇到一个特定的异常:“java.sql.SQLException: The server time zone value ‘?й???????’ is unrecognized or represents more than one time zone”。这个错误表明服务器...