有关数据库的备份与恢复

本人要实现数据库的备份与恢复功能,初次使用BACKUP和RESTORE语句,在设计过程中有些疑惑想请教专家:
问题1:
用backup database aa to disk='c:\aa.bak' with init备份数据库后还有必要用backup log aa to disk='c:\aa.dat' with init,no_truncate备份日志吗?
backup语句的WITH子句的选项一般要怎么设置?
问题2:
用restore database aa from disk='c:\aa.bak' with replace恢复数据库后还要用restore log aa from disk='c:\aa.dat'恢复日志吗?
restore语句的WITH子句的选项一般要怎么设置?
问题3:
restore database aa from disk='c:\aa.bak' WITH NORECOVERY
restore log aa from disk='c:\aa.dat' WITH NORECOVERY
这两条语句中的NORECOVERY选项实现什么功能?
问题4:
各位专家在实际开发中是怎么实现数据库的备份与恢复的?backup和restore语句是怎么写的?
盼复,THANKS!
---------------------------------------------------------------

联机帮助上应该都说清楚了吧
---------------------------------------------------------------

是呀,看一看帮助吧。这里就不帖出来了。
1。不需要立即备份日志;
2。也就不需要恢复日志;
3。一般使用WITH RECOVERY这是默认值。

---------------------------------------------------------------

1:企业管理器
2:
/************ 备份 恢复 *******
backup database sys to disk='c:\目录\a.bak' with init
调用存储过程xp_CmdShell:
master..xp_cmdShell 'bcp pubs..authors2 out c:\authors.txt -Sservername -Usa -Ppassword'

--还原
use master
RESTORE DATABASE TestDB FROM DISK = 'c:\目录\a.bak'

---------------------------------------------------------------

A. 备份整个 MyNwind 数据库

说明 MyNwind 数据库仅用于演示。

下例创建用于存放 MyNwind 数据库完整备份的逻辑备份设备。

-- Create a logical backup device for the full MyNwind backup.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_1',
DISK ='c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_1.dat'

-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_1

B. 备份数据库和日志
本例创建了一个数据库和日志的完整备份。将数据库备份到称为 MyNwind_2 的逻辑备份设备上,然后将日志备份到称为 MyNwindLog1 的逻辑备份设备上。

说明 创建逻辑备份设备需要一次完成。

-- Create the backup device for the full MyNwind backup.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_2',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_2.dat'

--Create the log backup device.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwindLog1',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwindLog1.dat'

-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_2

-- Update activity has occurred since the full database backup.

-- Back up the log of the MyNwind database.
BACKUP LOG MyNwind
TO MyNwindLog1

---------------------------------------------------------------

实际中,我以前用企业管理器中建JOB定时备份,现(因一台服务器上有好几个数据库)通过建一个“数据库维护计划”来备份的。

---------------------------------------------------------------

--查看备份信息
RESTORE FILELISTONLY FROM DISK ='C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup'

--还原旧的备份
RESTORE DATABASE db2 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup' with replace,norecovery,
move 'db1_Data' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_data.mdf',
move 'db1_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_log.ldf'

其中db2_data.mdf和db2_log.ldf是要的还原数据库的位置,db1_Data和db1_Log是要还原数据库的逻辑文件名

--还原数据日志到时间点
restore log db2 from disk='db_log_backup' with stopat='2003/4/22 9:57'
---------------------------------------------------------------

1.不必要,
[ WITH
[ BLOCKSIZE = { blocksize ¦ @blocksize_variable } ]
[ [ , ] DESCRIPTION = { 'text' ¦ @text_variable } ]
[ [ , ] DIFFERENTIAL ]
[ [ , ] EXPIREDATE = { date ¦ @date_var }
¦ RETAINDAYS = { days ¦ @days_var } ]
[ [ , ] PASSWORD = { password ¦ @password_variable } ]
[ [ , ] FORMAT ¦ NOFORMAT ]
[ [ , ] { INIT ¦ NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { 'text' ¦ @text_variable } ]
[ [ , ] MEDIANAME = { media_name ¦ @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword ¦ @mediapassword_variable } ]
[ [ , ] NAME = { backup_set_name ¦ @backup_set_name_var } ]
[ [ , ] { NOSKIP ¦ SKIP } ]
[ [ , ] { NOREWIND ¦ REWIND } ]
[ [ , ] { NOUNLOAD ¦ UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]

2.不需要,
[ WITH
[ RESTRICTED_USER ]
[ [ , ] FILE = { file_number ¦ @file_number } ]
[ [ , ] PASSWORD = { password ¦ @password_variable } ]
[ [ , ] MEDIANAME = { media_name ¦ @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword ¦ @mediapassword_variable } ]
[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
[ ,...n ]
[ [ , ] KEEP_REPLICATION ]
[ [ , ] { NORECOVERY ¦ RECOVERY ¦ STANDBY = undo_file_name } ]
[ [ , ] { NOREWIND ¦ REWIND } ]
[ [ , ] { NOUNLOAD ¦ UNLOAD } ]
[ [ , ] REPLACE ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]

3.

NORECOVERY

指示还原操作不回滚任何未提交的事务。如果需要应用另一个事务日志,则必须指定 NORECOVERY 或 STANDBY 选项。如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,则默认为 RECOVERY。

当还原数据库备份和多个事务日志时,或在需要多个 RESTORE 语句时(例如在完整数据库备份后进行差异数据库备份),SQL Server 要求在除最后的 RESTORE 语句外的所有其它语句上使用 WITH NORECOVERY 选项。

说明 如果指定 NORECOVERY 选项,数据库将处于这个中间的未恢复状态而不可用。

当用于文件或文件组还原操作时,NORECOVERY 强制数据库在还原操作结束后保持还原状态。这在以下情况中很有用:

还原脚本正在运行并且始终要应用日志。

使用文件还原序列,并且在两次还原操作之间不能使用数据库。

4.
--查看备份信息
RESTORE FILELISTONLY FROM DISK ='C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup'

--还原旧的备份
RESTORE DATABASE db2 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup' with replace,norecovery,
move 'db1_Data' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_data.mdf',
move 'db1_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_log.ldf'

其中db2_data.mdf和db2_log.ldf是要的还原数据库的位置,db1_Data和db1_Log是要还原数据库的逻辑文件名

--还原数据日志到时间点
restore log db2 from disk='db_log_backup' with stopat='2003/4/22 9:57'

Published At
Categories with 数据库类
comments powered by Disqus