用DELPHI实现数据备份和恢复

用DELPHI实现数据备份和恢复,第1张

A. 还原完整数据库

说明 MyNwind 数据库仅供举例说明。

下例显示还原完整数据库备份

RESTORE DATABASE MyNwind

FROM MyNwind_1

B. 还原完整数据库备份和差异备份

下例还原完整数据库备份后还原差异备份。另外,下例还说明如何还原媒体上的另一个备份集。差异备份追加到包含完整数据库备份的备份设备上。

RESTORE DATABASE MyNwind

FROM MyNwind_1

WITH NORECOVERY

RESTORE DATABASE MyNwind

FROM MyNwind_1

WITH FILE = 2

C. 使用 RESTART 语法还原数据库

下例使用 RESTART 选项重新启动因服务器电源故障而中断的 RESTORE *** 作。

-- This database RESTORE halted prematurely due to power failure.

RESTORE DATABASE MyNwind

FROM MyNwind_1

-- Here is the RESTORE RESTART operation.

RESTORE DATABASE MyNwind

FROM MyNwind_1 WITH RESTART

D. 还原数据库并移动文件

下例还原完整数据库和事务日志,并将已还原的数据库移动到 C:\Program Files\Microsoft SQL Server\MSSQL\Data 目录下。

RESTORE DATABASE MyNwind

FROM MyNwind_1

WITH NORECOVERY,

MOVE 'MyNwind' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.mdf',

MOVE 'MyNwindLog1' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.ldf'

RESTORE LOG MyNwind

FROM MyNwindLog1

WITH RECOVERY

E. 使用 BACKUP 和 RESTORE 创建数据库的复本

下例显示使用 BACKUP 和 RESTORE 语句创建 Northwind 数据库的复本。MOVE 语句使数据和日志文件还原到指定的位置。RESTORE FILELISTONLY 语句用于确定待还原数据库内的文件数及名称。该数据库的新复本称为 TestDB。有关更多信息,请参见 RESTORE FILELISTONLY。

BACKUP DATABASE Northwind

TO DISK = 'c:\Northwind.bak'

RESTORE FILELISTONLY

FROM DISK = 'c:\Northwind.bak'

RESTORE DATABASE TestDB

FROM DISK = 'c:\Northwind.bak'

WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',

MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'

GO

F. 使用 STOPAT 语法还原到即时点和使用多个设备进行还原

下例将数据库还原到其在 1998 年 4 月 15 日中午 12 点时的状态,并显示涉及多个日志和多个备份设备的还原 *** 作。

RESTORE DATABASE MyNwind

FROM MyNwind_1, MyNwind_2

WITH NORECOVERY

RESTORE LOG MyNwind

FROM MyNwindLog1

WITH NORECOVERY

RESTORE LOG MyNwind

FROM MyNwindLog2

WITH RECOVERY, STOPAT = 'Apr 15, 1998 12:00 AM'

G. 使用 TAPE 语法还原

下例显示从 TAPE 备份设备还原完整数据库备份。

RESTORE DATABASE MyNwind

FROM TAPE = '\\.\tape0'

H. 使用 FILE 和 FILEGROUP 语法还原

下例还原一个包含两个文件、一个文件组和一个事务日志的数据库。

RESTORE DATABASE MyNwind

FILE = 'MyNwind_data_1',

FILE = 'MyNwind_data_2',

FILEGROUP = 'new_customers'

FROM MyNwind_1

WITH NORECOVERY

-- Restore the log backup.

RESTORE LOG MyNwind

FROM MyNwindLog1

I. 将事务日志还原到标记处

下例显示将事务日志还原到名为"RoyaltyUpdate"的标记处。

BEGIN TRANSACTION RoyaltyUpdate

WITH MARK 'Update royalty values'

GO

USE pubs

GO

UPDATE roysched

SET royalty = royalty * 1.10

WHERE title_id LIKE 'PC%'

GO

COMMIT TRANSACTION RoyaltyUpdate

GO

--Time passes. Regular database

--and log backups are taken.

--An error occurs.

USE master

GO

RESTORE DATABASE pubs

FROM Pubs1

WITH FILE = 3, NORECOVERY

GO

RESTORE LOG pubs

FROM Pubs1

WITH FILE = 4,

STOPATMARK = 'RoyaltyUpdate'

用Sql。

备份: AdoQuery1.SQL.Text := 'backup database testDFW to disk = ' + '''' + 'e:\backup.dat' + ''''

恢复: AdoQuery1.SQL.Text := 'restore database testDFW from disk =' + '''' + 'e:\backup.dat' + ''''

拷贝一个压缩access数据库的方法给你。压缩以后再用楼上的拷贝大法,呵呵

function CompactDatabase(AFileName,APassWord:string):boolean

//压缩与修复数据库,覆盖源文件

const

SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0Data Source=%s'

+'Jet OLEDB:Database Password=%s'

var

SPath,SFile:Array [0..254] Of Char

STempFileName:String

JE:OleVariant

begin

GetTempPath(40,SPath)//取得Windows的Temp路径

GetTempFileName(SPath,'~CP',0,SFile)//取得Temp文件名,Windows将自动建立0字节文件

STempFileName:=SFile//PChar->String

DeleteFile(STempFileName)//删除Windows建立的0字节文件

try

JE:=CreateOleObject('JRO.JetEngine')//建立OLE对象,函数结束OLE对象超过作用域自动释放

// JE.closedatabase(SConnectionString)

OleCheck(JE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),

format(SConnectionString,[STempFileName,APassWord])))//压缩数据库

//复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有达到函数的功能

result:=CopyFile(PChar(STempFileName),PChar(AFileName),false)

DeleteFile(STempFileName)//删除临时文件

// JE.opendatabase(SConnectionString)

except

result:=false//压缩失败

end

end


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10067850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存