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

SQLserver数据库备份后,怎么查询备份的日志,第1张

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_BU\lenistest5__backupbck';

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

backup database AdventureWorks2012

to  disk = '\\BackupSystem\BackupDisk1\AW_backups\AdventureWorksDataBak';

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

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backupbck'

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_BU\lenistest5__backupbck'

with replace;

差异备份:

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

use master;

go

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backupbck';

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backupbck'

with differential;

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

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup2bck'

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_BU\lenistest5__backupbck';

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

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 = '\\\tape0'

, tape = '\\\tape1'

, tape = '\\\tape2'

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_BU\lenistest5__backup01bck'

, disk = 'E:\Data_BU\lenistest5__backup02bck'

, disk = 'E:\Data_BU\lenistest5__backup03bck'

with format

 , medianame = 'lenistestbackupset';

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01bck'

, disk = 'E:\Data_BU\lenistest5__backup03bck'

with noinit

 , differential

 , medianame = 'lenistestbackupset';

Msg 3231, Level 16, State 1, Line 10

The media loaded on “E:\Data_BU\lenistest5__backup01bck” 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_BU\lenistest5__backup01bck'

, disk = 'E:\Data_BU\lenistest5__backup03bck'

, disk = 'E:\Data_BU\lenistest5__backup02bck'

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_BU\lenistest5__backup01bck'

, disk = 'E:\Data_BU\lenistest5__backup03bck'

, disk = 'E:\Data_BU\lenistest5__backup02bck'

with file = 1

 , replace

 , norecovery;

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01bck'

, disk = 'E:\Data_BU\lenistest5__backup03bck'

, disk = 'E:\Data_BU\lenistest5__backup02bck'

with file = 2

 , recovery;

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

select mfmedia_set_id

   , isnull(msname, 'no media name') as media_name

   , mfphysical_device_name

   , mffamily_sequence_number

   , mfmedia_family_id

   , bsdatabase_name

   , bsbackup_start_date

   , bsbackup_finish_date

from backupmediafamily       mf

  inner join backupset     bs

      on mfmedia_set_id = bsmedia_set_id

  left join backupmediaset ms

      on bsmedia_set_id = msmedia_set_id

where bsdatabase_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 dbodataloading

(

  object_id

, object_name

)

select object_id

   , name as object_name

from sysobjects;

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01bck'

, disk = 'E:\Data_BU\lenistest5__backup02bck'

, disk = 'E:\Data_BU\lenistest5__backup03bck'

with format

 , medianame = 'lenistestbackupset';

insert into dbodataloading

(

  object_id

, object_name

)

select object_id

   , name as object_name

from sysobjects;

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01bck'

, disk = 'E:\Data_BU\lenistest5__backup03bck'

, disk = 'E:\Data_BU\lenistest5__backup02bck'

with noinit

 , differential

 , medianame = 'lenistestbackupset';

insert into dbodataloading

(

  object_id

, object_name

)

select object_id

   , name as object_name

from sysobjects;

backup log lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01bck'

, disk = 'E:\Data_BU\lenistest5__backup03bck'

, disk = 'E:\Data_BU\lenistest5__backup02bck'

with noinit

 , medianame = 'lenistestbackupset';

接着我们做还原与恢复:

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01bck', disk = 'E:\Data_BU\lenistest5__backup03bck', disk = 'E:\Data_BU\lenistest5__backup02bck'

with file = 1

 , replace

 , norecovery;

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01bck', disk = 'E:\Data_BU\lenistest5__backup03bck', disk = 'E:\Data_BU\lenistest5__backup02bck'

with file = 2

 , norecovery;

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01bck', disk = 'E:\Data_BU\lenistest5__backup03bck', disk = 'E:\Data_BU\lenistest5__backup02bck'

with file = 3

 , recovery;

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

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

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01bck', disk = 'E:\Data_BU\lenistest5__backup03bck', disk = 'E:\Data_BU\lenistest5__backup02bck'

with file = 1

 , replace

 , recovery;

我连得是sql数据库 验证用户名密码是否正确 先在项目新建一个类 取名userinfo在类中定义:

public static string UserID;

public static string Password;

代码如下:

string sqlconn = "server = 220162131160,1433;database = sqlwork;uid = sa;pwd = yxlbb520520";//数据库连接

string sqlqueryy = stringFormat("select 账号,密码 from xs where 账号 = '{0}' and 密码 = '{1}'", textBox1Text, textBox2Text);

SqlConnection conn = new SqlConnection(sqlconn);

try

{

conOpen();

SqlCommand comm = new SqlCommand(sqlqueryy, con);

SqlDataReader ds = commExecuteReader();

if (dsRead())

{

userinfo1UserID = ds[0]ToString();

userinfo1Password = ds[1]ToString();

xs mf = new xs();

thisHide();

mfShowDialog();

}

else

{

MessageBoxShow("用户名或密码错误!!!");

}

}

catch (Exception ex)

{

MessageBoxShow(exMessage);

}

finally

{

conClose();

}

一、数据命名规则

在航空物探数据分类基础上,对每类数据逐步分解到基本数据单元,空间数据的要素类分解至图层,对象类分解至数据库表。制定了《航空物探空间数据要素类和对象类划分标准》,规范了要素类和对象类数据的命名规则,使空间数据库中的每个要素类和对象类的命名具有唯一性,防止重名出现。要素类和对象类的命名采用按专业、比例尺、数据内容及顺序的编码规则,编码结构如下。

图5-1 要素类和对象类数据命名规则

1)专业分类代码:为相关专业术语第一个字的汉语拼音的首字母,如果首字母与已有代码相同,则为专业术语第二个字拼音的首字母。例如,D:地质,L:地理,W:物探。

2)比例尺代码:为编码的第2位,采用测量比例尺或成图比例尺,按下列方式编码:

0-不分比例尺;

1,1∶1000000;2,1∶500000;3,1∶250000或1∶200000;4,1∶100000;

5,1∶50000;6,1∶25000或1∶20000;7,1∶10000;8,1∶5000。

3)数据内容识别码:为编码的第3~5位,依据数据表示的内容编码,对象类和要素类采用不同的编码规则。

对象类第3位为英文字母O,第4~5位编码含义如下:

AG 表示与航空物探项目信息相关的数据对象;

MF 表示与航磁测量相关的数据对象;

EM 表示与航电测量相关的数据对象;

GR 表示与航放测量相关的数据对象;

GA 表示与航重测量相关的数据对象。

要素类数据内容识别码,分表5-1表5-2两种情况。

表5-1 要素类数据内容识别码释意表

表5-2 要素类数据内容识别码释意表

4)顺序码:由编码的第6~8位组成。第6位亦可用来表示数据的子类型,第7~8位表示相同类型数据的顺序编码。

在整理数据时,采用规范化的命名规则命名要素类和对象类数据文件。把规范的文件名和相对应数据库表名预定义到采集库的文件导入规则表中,在文件数据导入时,对导入数据的文件名进行检查,避免文件名输入错误,把其他数据导入数据库。

二、数据库表结构标准

制定了空间数据要素类的各图层的属性数据库表结构和对象类的数据库表结构标准,规定了各类数据库表的所包含的数据项名称、代码、数据的存储类型及长度等。例如表5-3为项目概况数据库表结构及部分数据项,和数据库表名(WOAG001)。把数据库表结构信息预定义到采集库的文件导入规则表中,在数据入库时,按规则表中的数据库表结构信息对入库数据的数据存储类型及长度进行检查(即入库前系统检查)。

表5-3 项目概况信息对象类(WOAG001)

三、规范导入数据文件格式

在规范空间数据命名基础上,进一步规范了数据文件格式(表5-4),建立入库数据接口标准,解决了不同来源不同格式的航空物探数据入库问题。

表5-4 导入数据文件格式接口标准

大致上就是有一个dbomf_mm数据表

例如,现在数据库中的内容是:

mm_dd mrp_no prd_name qty dep

2006-03-01 NO1 衣物 1000 111

2006-03-01 NO2 纸张 2000 111

2006-03-02 NO3 鞋帽 3000 112

2006-03-03 NO1 衣物 2000 111

以上no的数量有上千种,同种NO对应同种NAME,每一个dd都会对应有一笔qty

我现在想要在数据导出后,成为一个统计数据,即所有的同种no的qty进行汇总,最后成为

mrp_no prd_name qty dep

no1

no2

大致上就是有一个dbomf_mm数据表

例如,现在数据库中的内容是:

mm_dd mrp_no prd_name qty dep

2006-03-01 NO1 衣物 1000 111

2006-03-01 NO2 纸张 2000 111

2006-03-02 NO3 鞋帽 3000 112

2006-03-03 NO1 衣物 2000 111

以上no的数量有上千种,同种NO对应同种NAME,每一个dd都会对应有一笔qty

我现在想要在数据导出后,成为一个统计数据,即所有的同种no的qty进行汇总,最后成为

mrp_no prd_name qty dep

no1

no2

大致上就是有一个dbomf_mm数据表

例如,现在数据库中的内容是:

mm_dd mrp_no prd_name qty dep

2006-03-01 NO1 衣物 1000 111

2006-03-01 NO2 纸张 2000 111

2006-03-02 NO3 鞋帽 3000 112

2006-03-03 NO1 衣物 2000 111

以上no的数量有上千种,同种NO对应同种NAME,每一个dd都会对应有一笔qty

我现在想要在数据导出后,成为一个统计数据,即所有的同种no的qty进行汇总,最后成为

mrp_no prd_name qty dep

no1

no2

大致上就是有一个dbomf_mm数据表

例如,现在数据库中的内容是:

mm_dd mrp_no prd_name qty dep

2006-03-01 NO1 衣物 1000 111

2006-03-01 NO2 纸张 2000 111

2006-03-02 NO3 鞋帽 3000 112

2006-03-03 NO1 衣物 2000 111

以上no的数量有上千种,同种NO对应同种NAME,每一个dd都会对应有一笔qty

我现在想要在数据导出后,成为一个统计数据,即所有的同种no的qty进行汇总,最后成为

mrp_no prd_name qty dep

no1

no2

大致上就是有一个dbomf_mm数据表

例如,现在数据库中的内容是:

mm_dd mrp_no prd_name qty dep

2006-03-01 NO1 衣物 1000 111

2006-03-01 NO2 纸张 2000 111

2006-03-02 NO3 鞋帽 3000 112

2006-03-03 NO1 衣物 2000 111

以上no的数量有上千种,同种NO对应同种NAME,每一个dd都会对应有一笔qty

我现在想要在数据导出后,成为一个统计数据,即所有的同种no的qty进行汇总,最后成为

mrp_no prd_name qty dep

no1

no2

大致上就是有一个dbomf_mm数据表

例如,现在数据库中的内容是:

mm_dd mrp_no prd_name qty dep

2006-03-01 NO1 衣物 1000 111

2006-03-01 NO2 纸张 2000 111

2006-03-02 NO3 鞋帽 3000 112

2006-03-03 NO1 衣物 2000 111

以上no的数量有上千种,同种NO对应同种NAME,每一个dd都会对应有一笔qty

我现在想要在数据导出后,成为一个统计数据,即所有的同种no的qty进行汇总,最后成为

mrp_no prd_name qty dep

no1

no2

互联网站,OF就是欧洲服务器,MF就是美国服务器。

服务器是一种高性能计算机,作为网络的节点,存储、处理网络上80%的数据、信息,因此也被称为网络的灵魂。也可以这样讲,服务器指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。

相对于普通PC来说,服务器在稳定性、安全性、性能等方面都要求更高,因此CPU、芯片组、内存、磁盘系统、网络等硬件和普通计算机有所不同,在质量与处理器数据性能上更出色。

以上就是关于SQLserver数据库备份后,怎么查询备份的日志全部的内容,包括:SQLserver数据库备份后,怎么查询备份的日志、我想用vs2010连上access数据库 做登陆界面用的、入库数据接口标准等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/sjk/9875827.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存