当前位置:首页 » 操作系统 » 数据库备份尾日志

数据库备份尾日志

发布时间: 2022-11-13 03:08:04

sql2008数据还原时报错“尚未备份数据库‘XX’的日志尾部”。不能还原。

这是因为还原的数据库随后后又产生了新的日志,所以按照默认设置的备份选项,系统将提示备份日志尾部以免造成事务中断。
解决方法:
如果需要备份尾部日志则进行备份。如果不需要,则可以在还原数据库的的选项卡中选择【覆盖现有数据库】复选框。

㈡ SQL SERVER备份与恢复,不理解!

SQL Server中的日志以LSN来区别每一条事务,日志备份只复制上次日志备份以来的所有日志记录,也就是上次日志备份后新产生的LSN号。
如果可以在发生严重故障后备份活动日志(尾日志),则可将数据库一直还原到没有发生数据丢失的故障点处理。但是大量做日志备份时,恢复备份时需要严格按照日志备份产生的顺序依次恢复,中间不能有任何日志备份的缺失或跳跃,所以日志备份做的越多,还原时间越长,管理复杂性越高。
正是因为这个情况,所以才有差异备份,而差异备份是备份上次完整备份以后数据库整的整体差异。
如上面的情况,在差异备份后的日志备份,如果有事务穿越了差异备份的时点,在有后续日志备份的情况下,也可以正常达到提交或回滚的目标。

根据这两个原则,你上面所列的情况在情理之中。

㈢ SQLserver数据库备份后,怎么查询备份的日志

SQL Server的备份有三种形式:

一是全备份(full backup)

这个备份里面包含的内容是值得商榷的,我们知道数据库有两种文件,数据文件与日志文件,全备份是不是将所有的数据文件与日志文件打包,备份成一个文件? 那么还原的时候是不是需要做恢复,将备份过后发生的事务接着备份时间点重新执行一边? 上面的问题细想都是肯定的。全备份做的事情,就是将所有的缓存先flush到磁盘上,不管在进行的事务是否提交,这样保证了日志的连续性,数据与日志的一致性,如果事务没提交 ,在日志文件上的标记是active的,这段日志也就不会被清空,下次恢复的时候,就从这段日志开始,接着使用新的日志执行。因此 全备份之前肯定会执行一次checkpoint;、

二是差异备份(differential backup)

这个备份会不会也重复full backup的过程,先执行checkpoint,然后再将上一次备份之后,发生数据页变化的这些数据页都备份起来,这部分备份就不会有日志。但是和全备份一样,备份的容积体量比较大,差异备份备份的是数据页,不管这一页是不是只有一条数据更改了,还是全部更改了;

三是日志备份(transaction log backup)

日志备份中需要注意的就是对未提交事务的理解,没有提交的事务其实还是占用日志文件的VLF,shrink并不能回收日志空间;提交事务的日志如被备份之后,就会将日志VLF打上unactive或者truncated标记,这个时候执行shrink就可以回收这部分日志VLF了。日志备份体量小,比较适合频率高的执行,比如每5分钟执行一次。

全备份:

全备份用到的命令,涉及到两方面的参数,一是指定相应的备份设备,可以是磁盘,也可以是磁带;另一方面 就是备份可用的选项,比如是否压缩,是否加密

BACKUP DATABASE database

TO backup_device [ ,...n ]

[ WITH with_options [ ,...o ] ] ;


备份设备很讲究,可以事先定义好逻辑设备,也可以直接指定物理设备。磁带备份机倒是没见过,但是常规的磁盘备份还是可以讨论一下的:

我们可以将一个本机带路径的物理文件名指定为备份设备:

backup database lenistest

to disk = 'E:Data_BUlenistest5__backup.bck';


也可以将网络上的一个带路径的物理文件名指定为备份设备:

backup database AdventureWorks2012

to disk = '\BackupSystemBackupDisk1AW_backupsAdventureWorksData.Bak';


这里有个有趣的现象,如果我们在全备份之后 ,没有备份好日志,这个时候故障突然发生了,我们需要作恢复,但是恢复的时候因为会重写日志,这样就会丢失数据,如果不采取额外地措施,系统是会报错的:


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup.bck'


Msg 3159, Level 16, State 1, Line 6

The tail of the log for the database “lenistest” has not been backed
up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains
work you do not want to lose. Use the WITH REPLACE or WITH STOPAT
clause of the RESTORE statement to just overwrite the contents of the
log.

Msg 3013, Level 16, State 1, Line 6

RESTORE DATABASE is terminating abnormally.



所以如果对丢失的数据不关心或者认为不会丢失数据,可以采用with replace选项来重写原来的日志文件进行强制恢复。


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup.bck'

with replace;



差异备份:

差异备份相对全备份,优越的地方在于备份数据量少,但是有趣的是差异备份不能独立存在(日志备份也不能独立存在,他俩只能依附于全备份,也就是说在执行差异备份和日志备份的时候,必须先有一个全备份做好在那里), 差异备份必须以一个全备份做基准,在这基础之上再判断哪些数据页是有过更新的,这些更新的数据页计算出来并被备份起来。

use master;


go


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup.bck';


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup.bck'

with differential;


假如我们没有事先做好全备份,就直接作差异备份了,那么这是不成功的:


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup2.bck'

with differential;


Msg 3035, Level 16, State 1, Line 11

Cannot perform a differential backup for database “lenistest”, because
a current database backup does not exist. Perform a full database
backup by reissuing BACKUP DATABASE, omitting the WITH DIFFERENTIAL
option.

Msg 3013, Level 16, State 1, Line 11

BACKUP DATABASE is terminating abnormally.


日志备份:

日志备份相对差异备份来说,体量更小,同样它也需要全备份事先存在:

backup log lenistestto disk = 'E:Data_BUlenistest5__backup.bck';


假如我没有事先做好全备份,我们看看直接备份日志会出现什么结果:


Msg 4214, Level 16, State 1, Line 15

BACKUP LOG cannot be performed because there is no current database
backup.

Msg 3013, Level 16, State 1, Line 15

BACKUP LOG is terminating abnormally.


提示先做全备份!

备份我们都讨论完了,接下来我们看看还原。还原通常有两个步骤,一是还原,二是恢复。当然我们也可以直接还原不恢复,但是可能会丢失数据,除非全备份之后 ,没有任何操作。假设我们一天一个全备份,每15分钟做一个差异备份 ,每5分钟做一个日志备份,我们该如何还原我们的数据库呢?

通常我们首先要知道我们的备份文件名或者物理路径,这个地方涉及到很多术语很难理解,比如说backup device, backupset, backup media, media set ,media family.

MSDN上有一个解释,先看这个脚本:


backup database AdventureWorks2012

to tape = '\. ape0'

, tape = '\. ape1'

, tape = '\. ape2'

with format

, medianame = 'MyAdvWorks_MediaSet_1';


解释说到,这个备份操作产生了一个 media set, 这个media set就是命名为MyAdvWorks_MediaSet_1, 这个media set还有个media header, media header一旦生成,就可以往里面写入备份文件了。这段脚本也同时生成了一个横跨三个tape的备份文件, 他们统称为backup set.

当我们指定3个backup device作为backup set(备份集)并且执行第一次全备份的时候,接下来所有的备份都需要同时指定这3个backup device作为backup set:


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

with format

, medianame = 'lenistestbackupset';


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

with noinit

, differential

, medianame = 'lenistestbackupset';



Msg 3231, Level 16, State 1, Line 10

The media loaded on “E:Data_BUlenistest5__backup01.bck” is formatted
to support 3 media families, but 2 media families are expected
according to the backup device specification.

Msg 3013, Level 16, State 1, Line 10

BACKUP DATABASE is terminating abnormally.


上面我先作了一次全备份,指定了三个backup device作为一份backup set, 接下来作差异备份的时候,我只指定了其中两个backup device作为backup set, 操作失败,提示就是少了一个backup device.


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with noinit

, differential

, medianame = 'lenistestbackupset';


这次我们指定了同样个数的backup device,但backup device的顺序颠倒了一下,操作成功。

到目前为止,我们的脚本已经新建了 1 个media set,名为 lenistestbackupset , 2 个backup set, 第一个backup set是全备份的backup set,另外一个backup set是差异备份。所以每一次备份都会产生一个backup set. Media set产生的时间则是第一次给数据库作全备份的时候。

这个时候我们需要恢复数据库,那么第一步就是要先还原全备份,但是先不恢复,等全备份还原过后,再用差异备份做恢复:

restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 1

, replace

, norecovery;


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 2

, recovery;


这里一定是用replace来重写日志。


select mf.media_set_id

, isnull(ms.name, 'no media name') as media_name

, mf.physical_device_name

, mf.family_sequence_number

, mf.media_family_id

, bs.database_name

, bs.backup_start_date

, bs.backup_finish_date

from backupmediafamily mf

inner join backupset bs

on mf.media_set_id = bs.media_set_id

left join backupmediaset ms

on bs.media_set_id = ms.media_set_id

where bs.database_name = 'lenistest';


上面的脚本可以抓出来这些media family, media set, backup set的信息,如果像上面的例子一样, 我们用3个backup device来承载备份,那么这3个backup device组成了一个media family, 按照family_sequence_number来编排,1,2,3。

下面实现一个备份到恢复的全过程例子,分别在full backup, differential backup, log backup之前各出入同样的数据,看看是不是还原的时候,能正确还原过来:


insert into dbo.dataloading

(

object_id

, object_name

)

select object_id

, name as object_name

from sys.objects;


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

with format

, medianame = 'lenistestbackupset';



insert into dbo.dataloading

(

object_id

, object_name

)

select object_id

, name as object_name

from sys.objects;


backup database lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with noinit

, differential

, medianame = 'lenistestbackupset';



insert into dbo.dataloading

(

object_id

, object_name

)

select object_id

, name as object_name

from sys.objects;


backup log lenistest

to disk = 'E:Data_BUlenistest5__backup01.bck'

, disk = 'E:Data_BUlenistest5__backup03.bck'

, disk = 'E:Data_BUlenistest5__backup02.bck'

with noinit

, medianame = 'lenistestbackupset';


接着我们做还原与恢复:


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck', disk = 'E:Data_BUlenistest5__backup03.bck', disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 1

, replace

, norecovery;


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck', disk = 'E:Data_BUlenistest5__backup03.bck', disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 2

, norecovery;


restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck', disk = 'E:Data_BUlenistest5__backup03.bck', disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 3

, recovery;


这里的file选项就是backup set选项,表示第一个备份集,第二个备份集,第三个备份集。如果想还原到最新的故障发生时间点,前面的restore都不能recovery,只有在最后的时候才能作recovery.

如果我们只想恢复全备份的数据,只要执行recovery就可以了,但是数据肯定是少了:

restore database lenistest

from disk = 'E:Data_BUlenistest5__backup01.bck', disk = 'E:Data_BUlenistest5__backup03.bck', disk = 'E:Data_BUlenistest5__backup02.bck'

with file = 1

, replace

, recovery;

㈣ 尚未备份数据库 "test 的日志尾部

原因分析:
这是因为在线还原的数据库在最后备份后又产生了新的日志,所以按照默认设置的备份选项,系统将提示备份日志尾部以免造成事务中断。
解决方法:
如果需要备份尾部日志则进行备份。如果不需要,则可以在还原数据库的的选项卡中选择【覆盖现有数据库】复选框。

㈤ 如何备份事务日志 (SQL Server Management Studio)

若要备份日志尾部(即活动的日志),请选中 “备份日志尾部,并使数据库处于还原状态”。 备份日志尾部失败后执行尾日志备份,以防丢失所做的工作。在失败之后且在开始还原数据库之前,或者在故障转移到辅助数据库时,备份活动日志(尾日志备份)。选择此选项等效于在 Transact-SQL BACKUP LOG 语句中指定 NORECOVERY 选项。有关尾日志备份的详细信息,请参阅尾日志备份。

㈥ sql2008怎么备份日志文件

一、 结尾日志备份的含义。
由于结尾日志备份是SQLServer数据库特有的一个内容。所以对于从其他数据库转型过来的管理员可能并不了解这个结尾日志备份的含义。在大多数情况下,如在完成恢复模式或者大容量日志恢复模式下,SQLServer数据库要求管理员备份事务日志的结尾部分以获得尚未备份的日志记录。这个在还原操作之前对日志尾部执行的日志备份就叫做结尾日志备份。对于SQLServer数据库来说,在事务日志恢复之前进行事务日志的尾部备份是非常必要的。因为结尾日志备份作业可以防止用户修改数据的丢失并最终确保日志链的完整性。在利用事务日志将数据库恢复到某一个指定的点,如数据库故障点的时候,结尾日志备份是恢复计划中的最后一个相关备份。如果在还原之前无法备份日志的尾部,那么就只能够将数据库恢复为故障发生之前创建的最后一个备份。而不能够恢复到故障发生的那一点。所以说,结尾日志备份对于SQLServer数据库非常的重要。
二、 在何时该进行结尾日志备份?
从结尾日志备份的含义中,我们也可以看出,并不是在任何情况下都需要作结尾日志备份。也就是说,对于SQLServer数据库来说,并非所有的还原方案都需要执行结尾日志部分。如在数据库恢复的时候,不需要恢复到故障的那一点,就不需要进行结尾日志备份。同理,如果先前的日志备份中已经包含了恢复点,或者说管理员准备覆盖某个数据库或者移动数据库的时候,往往不需要进行结尾日志备份。另外需要的是,在某些特定情况下即使数据库管理员想进行事务日志尾部备份都不行。如当事务日志文件已经损坏时就无法继续进行事务日志尾部备份。此时虽然数据库管理员任人可以在不使用结尾日志备份的情况下恢复数据库,但是已经不能够恢复到故障发生的那一点。也就是说,最新日志备份后进行的任何数据修改工作与数据库结构调整工作都回丢失。
具体的来说,如果遇到如下两种情况,需要先对马上对事务日志进行尾部备份。
一是需要对数据库进行还原操作,而且是要还原到最近到的一个点时,那么需要先对数据库进行事务日志尾部备份。即在数据库处于联机状态时,如果数据库管理员需要对数据库进行的下一个操走就是还原操作,那么就需要在还原操作之前进行事务日志尾部备份。也就是说,在还原操作之前才能够进行事务日志尾部备份,即在事务日志备份备份与数据库还原之间不能够再进行任何的数据库修改作业。否则的话在还原后这个修改会丢失。另外需要注意的是,为了出现一些不必要的错误,最好在备份事务尾部日志的时候,采用NORECOVERY选项。这个选项主要是为了确保数据库事务日志尾部备份之后数据库不能够再被修改。也就是说,可以保证事务日志尾部备份到数据库还原中间的时间间隔之内,不再发生任何的数据库更改作业。以确保在利用事务日志尾部备份进行数据库还原的时候,能够还原到一个最近的时点。而不会有任何数据的丢失。这是在最正常的情况下对事务日志的尾部进行备份。

㈦ sql server2012数据库怎么删除备份日志

SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作。可以通过直接删除log文件和清空日志在清除数据库日志。
1、分离数据库。分离数据库之前一定要做好数据库的全备份,选择数据库——右键——任务——分离。 勾选删除连接. 分离后在数据库列表将看不到已分离的数据库。
2、删除LOG文件 3、附加数据库,附加的时候会提醒找不到log文件。
删除数据库信息信息的ldf文件: 附加数据库之后将生成新的日志文件log,新的日志文件的大小事504K。

㈧ sql 数据库事物日志可以恢复吗

恢复过程
以数据库恢复模式设为FULL为例:
恢复过程的第一步是执行尾日志备份,(BACKUP LOG Student TO DISK='E:\stulog.dmp' ) 。
在恢复一个数据库之前,为保证上次备份之后发生改变的记录都包含在恢复过程之中,需要执行这种类型的备份。
下一步,查找数据库备份文件在机器或网络中的存储位置。
如果要在另一台服务器上恢复数据库,最好是把这些文件复制到目标服务器中。在备份文件所在的位置,找出最后一个完整的数据库备份(这些文件通常使用.bak为扩展名);恢复这个完整的备份。

㈨ SQL中Norecovery的功能是什么

RESTORE DATABASE MyNwind
FROM MyNwind_1, MyNwind_2
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog1
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog2
WITH RECOVERY
备份日志的时候使用Norecovery是用来备份尾日志的,这样备份日志的时候数据库处于恢复状态,别的进程就不能再访问数据库,日志就不会再增加了,
这样在还原的时候就可以正常恢复了。
还原备份的时候如果想同时还原之后的日志,必须加上Norecovery才可以还原日志,如果有多个日志备份,除了最后一个日志备份~
还原其他日志必须也得加上Norecovery才可以还原到最后一个日志。

㈩ 尚未备份数据库 "***" 的日志尾部。

USE master
GO
RESTORE DATABASE drivingSchoolMange
FROM disk = 'D:\nihao.db' WITH REPLACE
GO

在末尾加上 with replace就行了~~

热点内容
安卓汽车盲区辅助哪里下载 发布:2025-05-16 16:02:53 浏览:360
码尚编程 发布:2025-05-16 15:55:39 浏览:444
android全局字体 发布:2025-05-16 15:53:19 浏览:573
jsp在服务器编译先转译成什么 发布:2025-05-16 15:41:36 浏览:981
svn服务器编译 发布:2025-05-16 15:41:26 浏览:965
照片被涂鸦擦掉如何看到信息安卓 发布:2025-05-16 15:36:43 浏览:179
手机怎么配置内存大 发布:2025-05-16 15:18:06 浏览:166
xpshop源码 发布:2025-05-16 15:17:25 浏览:404
android弹出通知 发布:2025-05-16 14:59:20 浏览:511
数据库EST 发布:2025-05-16 14:59:15 浏览:198