sql 备份还原

先记下来,空了去看看

//开始备份

with adoquery1 do

begin

close;

sql.Clear;

sql.Add(‘Backup database library to disk=:p1 with init‘);

parameters.ParamByName(‘p1‘).Value:=self.SaveDialog1.FileName;

try

Execsql;

ShowMessage(‘备份成功!!‘);

except

ShowMessage(‘备份失败!!‘);

exit;

end;

end; //End of 备份

下面来说一下还原,还原与备份不一样,备份不需要关闭数据库,但还原就要先关闭数据库才行.第一次写的

代码如下:

with ADOQuery1 do

begin

Close;

SQL.Clear;

SQL.Add(‘use master alter database library set offline WITH ROLLBACK IMMEDIATE ‘);

SQL.Add(‘restore database library from disk=:p1 with REPLACE‘);

SQL.Add(‘alter database library set online with rollback immediate‘);

parameters.ParamByName(‘p1‘).Value := self.Edit1.Text;

try

ExecSQL;

ShowMessage(‘还原成功!!‘);

except

Showmessage(‘还原失败!!‘);

exit;

end;

end;

运行,还原成功!!但是數據庫會變爲脫機狀態,導致其他用戶不能連接。解決的辦法有两种:

 一:用存储过程:

  在master数据库中加入下面的存储过程

if exists(select name from sysobjects where name=‘usp_restoredb‘)

drop proc usp_restoredb

go

/*

exec usp_restoredb "library","D:\bak.bak"

*/

create proc usp_restoredb

(

@dbname  varchar(255),   --数据库名字

@filepath varchar(255)    --文件路径

)

as

set nocount on

--exec (‘use master go‘)

exec (‘alter database ‘[email protected]+‘ set offline WITH ROLLBACK IMMEDIATE‘)

exec (‘restore database ‘[email protected]+‘ from disk="‘[email protected]+‘" with REPLACE‘)

exec (‘alter database ‘[email protected]+‘ set online with rollback IMMEDIATE‘)

if @@error<>0

begin

select ‘F‘,‘数据库恢复失败‘

return

end

else

begin

select ‘T‘,‘数据库恢复成功‘

return

end

运行.

  然后在Delphi的调用这一存储过程,调用过程如下:

//注意:这时的ADOQuery1要连到master数据库,不能连到library数据库!! 

with ADOQuery1 do

Begin

Close;

SQL.Clear;

 // filename是你备份文件的路径加文件名

SQL.Add(‘exec usp_restoredb "Library","‘+ filename+‘"‘);

Open;

if ADOQuery1.Fields[0].AsString=‘F‘ then

ShowMessage(‘还原失败!!‘)

else

ShowMessage(‘还原成功!!‘);

end;

 运行成功!且library数据库不会变为脱机!

 第二种方法:

  也是运行ADOQuery1来实现,不用存储过程,ADOQuery1一定要连到master数据库,否则就会让library脱机!,代码如下:

begin

DataModule17.ADOConnection1.Close;//这个是连到library数据库的,所以要先断开

 with ADOQuery1 do

begin

Close;

SQL.Clear;

SQL.Add(‘use master alter database library set offline WITH ROLLBACK IMMEDIATE ‘);

SQL.Add(‘restore database library from disk=:p1 with REPLACE‘);

SQL.Add(‘alter database library set online with rollback immediate‘);

parameters.ParamByName(‘p1‘).Value := self.Edit1.Text; //显示备份文件的路径和文件

try

ExecSQL;

ShowMessage(‘还原成功!!‘);

except

Showmessage(‘还原失败!!‘);

exit;

end;

end;

end; //End Of 还原数据库

运行成功!library数据库被还原

sql 备份还原

时间: 2024-11-09 01:47:26

sql 备份还原的相关文章

SQL备份还原,分离附加

备份.还原.分离.附加 备份:在要备份的数据库上右键点击任务,在选择备份.在打卡的对话框中根据需要选择.注意:备份过期时间不能为0,否则会马上过期.目标可根据需要放在任何位置.最后,点击确定,备份成功. 还原:在数据库上右键点击选择还原数据库,在目标数据库上写一个不与其他数据库重名的名字,在下面源设备中找到你要还原的数据库的mdf文件.最后,点击确定,还原成功. 分离:在要分离的数据库上右键点击任务,在选择分离,勾选删除链接,点击确定,分离成功. 附加:在数据库上右键点击附加,在打开的对话框中点

SQL server数据库备份还原问题备忘(亲测有效)

问题一:SQL server数据库备份还原方法 http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 问题二:无法执行 BACKUP LOG,因为当前没有数据库备份 http://blog.csdn.net/aojiancc2/article/details/46316451 问题三:还原数据库失败 备份集中数据库备份与现有数据库不同 http://jingyan.baidu.com/article/fb48e8be52

SQL Server 大数据搬迁之文件组备份还原实战

原文:SQL Server 大数据搬迁之文件组备份还原实战 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) 注意事项(Attention) 疑问(Questions) 参考文献(References) 二.背景(Contexts) 有一个数据库大概在700G左右,需要从服务器A搬迁到服务器B,两台服务器网络传输速度可以达到8MB/s,怎么做才能更

SQL Server差异备份的备份/还原原理

SQL Server差异备份的备份/还原原理 记住一点:差异备份是基于最后一次完整备份的差异,而不是基于最后一次差异的差异 备份过程: 1-完整备份之后有无对数据库做过修改,如果有,记录数据库的最后LSN(Last LSN) 如果完整备份之后无对数据库做过修改,那么差异备份就没有意义了 2-做差异备份时根据差异位图读取差异页面内容 注意:差异位图记录了自从最后一次完整备份以来数据库中有变化的页面,这样在做差异备份时候就不用扫全库页面,只需要读取有差异的页面 3-在备份之前,数据库会做一次检查点,

SQL点滴12—SQL Server备份还原数据库中的小把戏

原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息“is formatted to support  1 media families, but 2 media families are expected according to the backup device specification”.如下图: 解决办法是首先选中击上一次备份的文件,点击Remove,去掉当前的备份文件,然后再点击OK备份.这样才能正确的备份.也在微软帮助

SQL server 笔记9(备份还原触发器事务三范式)

------备份还原 --右键数据库---任务 --备份:在不影响数据库正常运行的情况下,将数据备份到一个.bak结尾的文件夹 --还原:将bak文件还原到数据库 -----分离.附加 --分离:将数据库与数据库服务进行分离 --附加:将数据库mdf文件,附加到数据库服务上 --触发器:一种特殊的存储过程 特殊的地方在于,触发器是通过对数据库表的操作来引发 触发的动作只有‘增删改’ --存储过程是通过exec人为执行 create trigger student_insert --创建触发器 o

mysql重点、视图、事务、备份还原【mysqldump】、mysql编程【触发器、存储函数、存储过程】、存储引擎

1.删除数据需要注意的问题[删除记录delete] 删除数据本身没有太多说的,还是删除表的时候有truncate用法 delete from是逐条删除记录[加不加条件全删,效率低,在删除表方面] truncate是重建表[删除表时效率高] 2.修改数据[update] [一下重点性能] 3.视图(view)[是一张虚拟的表:使客户端在虚拟的表中进行操作] 视图就是一条查询语句的结果[因为查询之后的结果本身就会形成一张表给客户端][视图使用到mysql的内置机制] create view 视图名

SQL备份(全)

====================================================================== SQL备份 ====================================================================== ---------------------------------------------------------------------- 1.SQL数据库恢复模型 ------------------

mysqldump数据库备份还原详解

mysqldump备份常见用法 1.导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > dbname.sql 2.导出数据库结构(不含数据) mysqldump -u username -p -d dbname > dbname.sql 3.导出数据库中的某张数据表(包含数据) mysqldump -u username -p dbname tablename > tablename.sq mysqldump -uroot -p -B