当前位置:首页 » 编程语言 » sql事务日志必须连续吗
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql事务日志必须连续吗

发布时间: 2022-07-20 05:20:02

‘壹’ sql2000 事务日志

首先你要确定事务日志是否有用,对于数据库数据比较重要的情况,建议不要直接清理日志,而是定期备份日志,备份日志以后,之前的事务日志占用的空间就会变为可分配空间,这样就会被重新分配后写入其他事务日志。事务日志的作用非常重要,如果数据库出现异常,需要尽可能的减少数据丢失,可以通过还原最近一次完全备份和之后的事务日志来弥补。如果你确实不需要事务日志,可以在数据库属性中将故障恢复模式设置为简单,这样就不会使日志不断增长了。不过如果有一个比较大的事务,日志文件会按事务的需要进行增长的。另外,可以定期截断事务日志,执行
backup log 数据库名 with no_log

‘贰’ 如何避免sql事务日志增长过快

要防止事务日志文件异常增长,建议使用以下方法之一: 将事务日志文件的大小设置为一个较大值,以避免事务日志文件自动扩展。 充分评估最佳内存大小后,使用内存单位而不是百分比来配置事务日志文件的自动扩展。有关配置自动增长选项时需要考虑的问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 315512 SQL Server 中自动增长和自动收缩配置注意事项 更改恢复模式。如果发生灾难或数据损坏,您必须恢复数据库,以维护数据库数据的一致性和事务的完整性。根据数据在数据库中的重要程度,您可以选择以下恢复模式之一,以便确定如何备份数据以及数据丢失可能给您带来的风险: 简单恢复模式 (SIMPLE) 完整恢复模式 (FULL) 大容量日志记录恢复模式 (BULK-LOGGED)使用简单恢复模式,您可以将数据库恢复到最近的数据库备份。使用完整恢复模式或大容量日志记录恢复模式,您可以通过使用事务日志文件备份来还原数据库,这样可以将数据库恢复到故障发生时的故障点。默认情况下,在 SQL Server 2000 和 SQL Server 2005 中,SQL Server 数据库的恢复模式被设置为完整恢复模式。在完整恢复模式中,会定期备份事务日志,从而防止事务日志文件增长得过大,以致与数据库大小相比严重失衡。相比之下,如果不执行事务日志的定期备份,事务日志文件会不断增长,直至充满整个磁盘,而且您可能无法对 SQL Server 数据库执行任何数据修改操作。如果您不希望在灾难恢复操作过程中使用事务日志文件,则可以从完整恢复模式更改为简单恢复模式。 定期备份事务日志文件,删除事务日志中非活动的事务。 将事务设计为小型事务。 确保没有任何未遂事务继续无限期地运行。 将“更新统计”选项安排为每天运行。 要对索引进行碎片整理以改善生产环境中的工作负荷性能,请使用 DBCC INDEXDEFRAG Transact-SQL 语句而不是 DBCC DBREINDEX Transact-SQL 语句。如果运行 DBCC DBREINDEX 语句,当 SQL Server 数据库处于完整恢复模式时,事务日志可能会大大扩展。此外,DBCC INDEXDEGRAG 语句不像 DBCC DBREINDEX 语句那样长时间持有锁。有关对 SQL Server 2000 中的索引进行碎片整理的其他信息,请参见以下 Microsoft 网站: http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/ss2kidbp.mspx如果您必须运行 DBCC DBREINDEX 语句(因为这是一个作业,是数据库维护计划的一部分),则必须将该作业分解为多个作业。此外,在执行这些作业的间歇,还必须经常备份事务日志。

‘叁’ sqlserver 事务日志没几天就满了

1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志: BACKUP LOG 库名 WITH NO_LOG
3.收缩数据库文件(如果不压缩,数据库的文件不会减小 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成 --收缩数据库 DBCC SHRINKDATABASE(库名) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库: 企业管理器--服务器--数据库--右键--分离数据库
b.在我的电脑中删除LOG文件
c.附加数据库: 企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K
或用代码: 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
a.分离 EXEC sp_detach_db @dbname = '库名'
b.删除日志文件
c.再附加 EXEC sp_attach_single_file_db @dbname = '库名', @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'
5.为了以后能自动收缩,
做如下设置: 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" --SQL语句设置方式: EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志 --将文件增长限制为xM(x是你允许的最大数据文件大小) --SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)

‘肆’ 如何操作SQL Server事务日志

但是,了解如何恢复数据库是数据库管理员技能背景中一个至关重要的组成部分。本文将说明如何把一个SQL Server数据库回复到恢复一个数据表的时候。情况介绍update或delete语句忘带了where子句,或where子句精度不够,执行之后造成了严重的后果, 这种情况的数据恢复只能利用事务日志的备份来进行,所以如果你的SQL没有进行相应的全库备份 或不能备份日志(如果为了不让日志文件变大而置trunc. log on chkpt.选项为1),那么就无法进行数据的恢复了,或者只能恢复到最近一次的备份的数据了。恢复过程注意,在本文中,我假定你的数据库恢复模式设为FULL。恢复过程的第一步是执行尾日志备份,(BACKUP LOG Student TO DISK='E:\stulog.dmp' ) 。在恢复一个数据库之前,为保证上次备份之后发生改变的记录都包含在恢复过程之中,你可能需要执行这种类型的备份。下一步,你应该查找数据库备份文件在机器或网络中的存储位置。如果你要在另一台服务器上恢复数据库,最好是把这些文件复制到目标服务器中。在备份文件所在的位置,找出最后一个完整的数据库备份(这些文件通常使用.bak为扩展名);你需要恢复这个完整的备份。下面的脚本将完整的备份文件应用于NewDatabase数据库:RESTORE DATABASE NewDatabaseFROM DISK = 'D: .bak'WITHMOVE 'PreviousDatabase' TO 'D:DataFiles TestDatabase.mdf',MOVE 'PreviousDatabase_log' TO 'D:DataFiles TestDatabase_Log.ldf',NORECOVERY这段脚本指出完整备份文件位于服务器的D盘中,你正在使用备份文件恢复NewDatabase这个数据库。脚本中的语句将数据文件和日志文件从完整备份文件转移到TestDatabase数据库的新文件中。脚本中的最后一个语句——NORECOVERY——非常重要。NORECOVERY模式有三种选项,如下所示:NORECOVERY:告诉SQL Server你没有完成恢复数据库的过程,随后会出现恢复文件。当数据库处于这种状态时,数据库还不能使用,因而不允许建立连接。 RECOVERY:告诉SQL Server你已经完成数据库恢复过程,数据库即将准备就绪。这是默认选项,也是最常用的选项。 STANDBY:告诉SQL Server当前数据库还未为完成恢复做好准备,随后可以使用日志文件进行恢复。如果必要,你可以使用这个选项为恢复数据库建立连接。但是,如果当前不存在连接,将来的事务日志只能应用于数据库。 一旦你使用NORECOVERY选项恢复了完整备份,你可以开始应用事务日志备份或差异备份。差异备份差异备份是指对上次完整数据库备份后数据库发生的任何改变进行备份。如果你有几个差异备份,你只需要恢复最后一个备份文件。在这种情况下,并不存在差异备份,因此你可以直接转向事务日志备份。事务日志备份事务日志备份保留上次事务日志备份后发生的所有事务的痕迹;它还允许你把数据库恢复到数据库发生错误之前的一个时间点。事务日志备份按顺序发生,从而建立一个备份链。在把一连串事务日志备份恢复到一个时间点时,事务日志文件也必须按顺序恢复。当你使用一个数据库维护计划来建立事务日志备份时,事务日志文件名中往往包含一个时间指示器。下面的脚本使用NORECOVERY选项应用三个事务日志备份,最后一个语句把数据库恢复到最后一个事务日志文件的结束点。RESTORE LOG NewDatabaseFROM DISK = ''D: BackupFilesTestDatabase_TransactionLogBackup1.trn'WITH NORECOVERYRESTORE LOG NewDatabaseFROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup2.trn'WITH NORECOVERYRESTORE LOG NewDatabaseFROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup3.trn'WITH NORECOVERYRESTORE LOG NewDatabaseFROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup4.trn'WITH RECOVERY恢复到一个时间点在上面的例子中,你把数据库恢复到最后一个事务日志的结束点。如果你想把数据库恢复到事务日志结束前的某个特定的时间点,你必须使用STOPAT选项。下面的脚本把日志序列中的第四个事务日志恢复到4:01 AM——正好在数据库出错之前。RESTORE LOG NewDatabaseFROM DISK = ''D: BackupFiles TestDatabase_TransactionLogBackup4.trn'WITH STOPAT = N'6/28/2007 4:01:45 PM', RECOVERY既然你已经把数据库恢复到一个你指定的时间点上,现在该是决定如何帮助开发者,使他们的工作更加轻松的时候了。

‘伍’ sql事务日志采用什么的方式

简介
SQL Server中的事务日志无疑是SQL Server中最重要的部分之一。因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback)。从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点。当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要。但是,一旦SQL SERVER发生崩溃时,了解事务日志的原理和概念对于快速做出正确的决策来恢复数据显得尤为重要.本系列文章将会从事务日志的概念,原理,SQL Server如何使用日志来确保持久性属性等方面来谈SQL Server的事务日志.

事务日志的物理组织构架
事务日志仅仅是记录与其对应数据库上的事务行为和对数据库修改的日志文件.在你新建数据库时,伴随着数据库文件,会有一个默认以ldf为扩展名的事务日志文件. 当然,一个数据库也可以配有多个日志文件,但是在逻辑上,他们可以看成一个.
在SQL Server对于日志文件的管理,是将逻辑上一个ldf文件划分成多个逻辑上的虚拟日志文件(virtual log files,简称VLFs).以便于管理。用个类比方法来看,日志文件(ldf)好比一趟火车,每一节车厢都是一个虚拟日志文件(VLFs):

‘陆’ 求:《数据库》1、什么是事务日志,事务日志包括什么内容 2、了解SQL的GRANT 和REVOKE语句

事务日志是一个与数据库文件分开的文件。它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式变化。事务日志还称作前滚日志或重做日志。
事务日志是备份和恢复的重要组件,也是使用 SQL Remote 或 [复制代理] 复制数据所必需的。
在缺省情况下,所有数据库都使用事务日志。事务日志的使用是可选的,但是,除非您因特殊原因而不使用,否则您应始终使用它。运行带有事务日志的数据库可提供更强的故障保护功能、更好的性能以及数据复制功能。
每个 Microsoft® SQL Server™ 2000 数据库都有事务日志,用以记录所有事务和每个事务对数据库所做的修改。记录事务及其修改有三个作用:
恢复个别的事务。
如果应用程序发出 ROLLBACK 语句,或者 SQL Server 检测到错误(例如失去与客户端的通讯),就使用日志记录回滚未完成的事务所做的修改。
SQL Server 启动时恢复所有未完成的事务。
当运行 SQL Server 的服务器发生故障时,数据库可能处于这样的状态:还没有将修改从高速缓冲存储器写入数据文件,在数据文件内有未完成的事务所做的修改。当启动 SQL Server 的复本时,它对每个数据库执行恢复操作。前滚日志中记录的、可能尚未写入数据文件的每个修改。然后回滚在事务日志中找到的每个未完成的事务,以确保数据库的完整性。
将还原的数据库前滚到故障点。
丢失数据库(在没有 RAID 驱动器的服务器上,硬盘驱动器出现故障时可能会出现这种情况)后,可以将数据库还原到故障点。首先还原上一次的完整数据库备份或差异数据库备份,然后将事务日志备份序列还原到故障点。当还原每个日志备份时,SQL Server 重新应用日志中记录的所有修改以前滚所有事务。当最后的日志备份还原后,SQL Server 将使用日志信息回滚到该点未完成的所有事务。
SQL Server 2000 事务日志的特点是:
事务日志不是作为一个表实现,而是作为单独的文件或数据库内的一组文件实现。日志高速缓存与数据页的高速缓冲存储器分开管理,从而使数据库引擎内的编码更简单、更快速和更可靠。
日志记录和页的格式不必遵守数据页的格式。
事务日志可以在几个文件上实现。可以根据需要定义这些文件为自动增长。这样可减少事务日志内空间不足的可能性,同时减少管理开销。
截断日志中未用部分的机制速度快且对事务吞吐量影响最小。
GRANT是授予权限
REVOKE是撤销权限
GRANT
名称
GRANT — 赋予一个用户,一个组或所有用户访问权限

语法
GRANT privilege [, ...] ON object [, ...]
TO { PUBLIC | GROUP group | username }
输入
privilege

可能的权限有:
SELECT
访问声明的表/视图的所有列/字段.
INSERT
向声明的表中插入所有列字段.
UPDATE
更新声明的表所有列/字段.
DELETE
从声明的表中删除所有行.
RULE
在表/视图上定义规则 (参见 CREATE RULE 语句).
ALL
赋予所有权限.
object

赋予权限的对象名.可能的对象是:
table
view

sequence

PUBLIC
代表是所有用户的简写.
GROUP group
将要赋予权限的组 group .
username
将要赋予权限的用户名.PUBLIC 是代表所有用户的简写.

输出
CHANGE
如果成功,返回此信息.
ERROR: ChangeAcl: class "object" not found
如果所声明的对象不可用或不可能对声明的组或用户赋予权限.
描述
GRANT 允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限.对象创建后,除了创建者外,除非创建者赋予(GRANT)权限,其他人没有访问对象的权限.
一旦用户有某对象的权限,他就可以使用那个特权.不需要给创建者赋予(GRANT)对象的权限,创建者自动拥有对象的所有权限,包括删除它的权限.

注意
目前,要想在 Postgres 里面只赋予几列权限,你必须创建一个包含那几列的视图(view),然后把权限赋予那几个视图。
使用 psql \z 命令获取关于现存对象权限的更多信息:

Database = lusitania
+------------------+---------------------------------------------+
| Relation | Grant/Revoke Permissions |
+------------------+---------------------------------------------+
| mytable | {"=rw","miriam=arwR","group todos=rw"} |
+------------------+---------------------------------------------+
Legend:
uname=arwR -- privileges granted to a user
group gname=arwR -- privileges granted to a GROUP
=arwR -- privileges granted to PUBLIC

r -- SELECT
w -- UPDATE/DELETE
a -- INSERT
R -- RULE
arwR -- ALL
参考 REVOKE 语句废除访问权限.

用法
给所有用户向表 films 插入记录的权限:
GRANT INSERT ON films TO PUBLIC;
赋予用户 manuel 操作视图 kinds 的所有权限:
GRANT ALL ON kinds TO manuel;
兼容性
SQL92
SQL92 GRANT 语法允许对表中的某单独列/字段设置权限,并且允许设置一权限以赋予别人相同权限:
GRANT privilege [, ...]
ON object [ ( column [, ...] ) ] [, ...]
TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]
这些字段与 Postgres 实现是兼容的,除了下面一些例外:
privilege
SQL92 允许声明附加的权限:
SELECT
REFERENCES
允许在一个声明的表的完整性约束中使用某些或全部列/字段.
USAGE
允许使用一个域,字符集,集合或事务.如果声明的对象不是表/视图, privilege 只能声明为 USAGE.
object
[ TABLE ] table
SQL92 允许一个附加的非功能性关键字 TABLE.
CHARACTER SET
允许使用声明的字符集.
COLLATION
允许使用声明的集合序列.
TRANSLATION
允许使用声明的字符集转换.
DOMAIN
允许使用声明的域.
WITH GRANT OPTION
允许向别人赋予同样权限.

‘柒’ sql server 中事务日志与日志的关系为如何

事务日志用于记录所有事务以及每个事务对数据库所做的修改。事务日志是数据库的重要组件,如果系统出现故障,则可能需要使用事务日志将数据库恢复到一致状态
SQL
Server
将某些系统事件和用户定义事件记录到
SQL
Server
错误日志和
Microsoft
Windows
应用程序日志中。这两种日志都会自动给所有记录事件加上时间戳。使用
SQL
Server
错误日志中的信息可以解决
SQL
Server
的相关问题。
事务日志你是看不到的
而事件日志可以看到

‘捌’ SQL Server事务日志的几个常用操作

我们知道,SQL Server事务日志主要是用来记录所有事务对数据库所做的修改,如果系统出现故障,它将成为最新数据的唯一来源。日志的操作常有以下几个应用:
一、事务日志文件LDF的丢失
当我们不小删除或者LDF文件丢失的时候,数据库只剩下MDF文件,此时直接通过附加MDF是无法恢复数据库的,那我们怎么样才能恢复数据库呢?我们可以把SQL Server的日志文件分为两种形式:一类是无活动事务的日志,另一类是有活动事务的日志,我们分别根据两种情况来进行数据库恢复。
1、无活动事务的日志恢复
当文件并没有发生活动性的日志,我们就可以很容易的利用MDF文件就可以直接恢复数据库了,具体操作方法如下:
1)数据库要是没有日志,就会处于置疑的状态,我们先可以通过企业管理器中在对应数据库中点击右键,然后在“所有任务”下选择“分离数据库”把数据库进行分离;
2)利用MDF文件附加数据库生成新的日志文件,可用企业管理器中数据库点击右键选择“所有任务”下的“附加数据库”把数据库附加上。
这样就可以直接恢复好数据库了,而如果数据库的日志文件中含有活动事务,利用此方法就不能恢复数据库,所以得使用下面的方法。
2、有活动事务的日志恢复
当日志发生了事务的记录,丢失的时候,我们采用如下的方法来实现:
1)新建一个同名的数据库,如原数据库名为MYDB,然后停止SQL Server服务器,再把数据库主数据MDF文件移走,然后重新启动SQL Server服务器,新建一个同名的数据库MYDB,然后再停止SQL Server服务器,把移走的MDF文件再覆盖回来,然后再重新启动SQL Server服务器,在默认的情况下,系统表是不允许被修改的,我们需要运行以下语句才可以,在查询分析器中,选择Master数据库,然后执行:
Sp_configure 'allow updates',1
Reconfigure With Override
接着运行以下语句,把Sysdatabases表中MYDB数据库的status属性设为‘37268’,把MYDB数据库设置为紧急模式。
update sysdatabases set status=32768 where name=’MYDB’
然后再把数据库MYDB设置为单用户模式,然后重启SQL Server服务器,并把数据库MYDB设为单用户模式
Sp_dboption 'MYDB','single user', 'true'

‘玖’ 如何读懂SQL Server的事务日志

SQL Server中的事务日志无疑是SQL Server中最重要的部分之一。因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback)。从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点。当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要。但是,一旦SQL SERVER发生崩溃时,了解事务日志的原理和概念对于快速做出正确的决策来恢复数据显得尤为重要.本系列文章将会从事务日志的概念,原理,SQL Server如何使用日志来确保持久性属性等方面来谈SQL Server的事务日志.
事务日志的物理组织构架
事务日志仅仅是记录与其对应数据库上的事务行为和对数据库修改的日志文件.在你新建数据库时,伴随着数据库文件,会有一个默认以ldf为扩展名的事务日志文件. 当然,一个数据库也可以配有多个日志文件,但是在逻辑上,他们可以看成一个.
在SQL Server对于日志文件的管理,是将逻辑上一个ldf文件划分成多个逻辑上的虚拟日志文件(virtual log files,简称VLFs).以便于管理。
那为什么SQL Server要把日志文件划分出多个VLFS呢?因为SQL Server通过这种方式使得存储引擎管理事务日志更加有效.并且对于日志空间的重复利用也会更加高效。使用VLF作为收缩数据库的最小单位比使用ldf文件作为最小单位无疑是更加高效的.
VLFS的个数和大小无法通过配置进行设定,而是由SQL Server进行管理.当Create或Alter数据库时,SQL Server通过ldf文件的大小来决定VLFS的大小和数量。在日志文件增长时,SQL Server也会重新规划VLFS的数量.
注意:根据这个原理不难看书,如果设置日志文件的增量过小,则会产生过多的VLFS,也就是日志文件碎片,过多的日志文件碎片会拖累SQL Server性能.
事务日志的逻辑组织构架
当针对数据库对象所做的任何修改保存到数据库之前,相应的日志首先会被记录到日志文件。这个记录会被按照先后顺序记录到日志文件的逻辑末尾,并分配一个全局唯一的日志序列号(log sequence number,简称LSN),这个序列号完全是按照顺序来的,如果日志中两个序列号LSN2>LSN1,则说明LSN2所在LSN1之后发生的.
由此可以看出,将日志文件分为多个文件除了磁盘空间的考虑之外。完全不会像数据那样可以并行访问,所以将日志文件分为多个完全不会有性能上的提升.
LSN号可以看作是将日志文件和其记录数据之间的纽带.每一条日志不仅有LSN号,还有其对应事务的事务日志,许多类型的操作都记录在事务日志中。
查看SQL SERVER的事务日志
在SQL SERVER 7.0和2000中,可以用下面的命令查看:
DBCC log ( {dbid|dbname}, [, type={0|1|2|3|4}] )
参数:
Dbid or dbname - 任一数据库的ID或名字
type - 输出结果的类型:
0 - 最少信息(operation, context, transaction id)
1 - 更多信息(plus flags, tags, row length)
2 - 非常详细的信息(plus object name, index name,page id, slot id)
3 - 每种操作的全部信息
4 - 每种操作的全部信息加上该事务的16进制信息
默认 type = 0
要查看MSATER数据库的事务日志可以用以下命令:
DBCC log (master)
一般情况下可以借助其他工具来查看SQL SERVER的事务日志,如LOG EXPLOERE等