数据库的事务日志已满
SQLServer数据库中开启CDC导致事务日志空间被占满的原因
SQLServer数据库中开启CDC导致事务⽇志空间被占满的原因SQLServer中开启CDC之后,在某些情况下会导致事务⽇志空间被占满的现象为:在执⾏增删改语句(产⽣事务⽇志)的过程中提⽰,The transaction log for database '***' is full due to 'REPLICATION'(数据库“***”的事务⽇志已满,原因为“REPLICATION”).CDC以及复制的基本原理粗略地讲,对于⽇志的使⽤步骤如下: 1,每当基础表(开启了CDC或者replication的表)产⽣事务性操作(增删改)之后,对应的事务⽇志写⼊⽇志⽂件, 2,此时的⽇志被状态被标记为Replication,也即处于待复制状态,这个活动状态跟数据库的还原模式⽆关,即便是简单还原模式, 3,然后有后台进程来读取这个⽇志,根据事务⽇志的内存写⼊⽬标表, 这个⽬标对于cdc来说是记录数据变化的系统表, 对于replication来说是写⼊distribution这个库 4,步骤3完成之后,事务⽇志被标记为正常状态,如果是简单还原模式,被后台进程解析过的事务⽇志被截断,可以重⽤如果上述中间的第三个步骤出现问题,也即后台进程⽆法解析⽇志后释放可⽤的⽇志空间,再次往数据库中写⼊操作,就会出现:数据库“TestDB”的事务⽇志已满,原因为“REPLICATION”的情况本⽂通过通过演⽰开启CDC的情况下⽇志空间被占满的现象,以及对应的处理办法测试环境搭建 ⾸先建⽴⼀个测试数据库,USE masterGOCREATE DATABASE TestLogFull ON PRIMARY(NAME = N'TestLogFull',FILENAME = N'D:\DBFile\TestLogFull\TestLogFull.mdf' ,SIZE = 500MB ,MAXSIZE = UNLIMITED,FILEGROWTH = 100MB)LOG ON(NAME = N'TestLogFull_log',FILENAME = N'D:\DBFile\TestLogFull\TestLogFull_Log.ldf' ,SIZE = 1MB ,MAXSIZE = 512MB) 这⾥指定⽇志⽂件的最⼤为512M,主要是为了演⽰⽇志空间被占满的现象 接着开启新建⼀个表同时开启CDC来测试USE TestLogFull--启⽤CDCEXECUTE sys.sp_cdc_enable_db;GO--创建⼀张测试表create table test_cdc(id int identity(1,1) primary key,name nvarchar(50),mail varchar(50),address nvarchar(50),lastupdatetime datetime)--对表启⽤CDCEXEC sys.sp_cdc_enable_table@source_schema = 'dbo',@source_name = 'test_cdc',@role_name = 'cdc_admin',@capture_instance = DEFAULT,@supports_net_changes = 1,@index_name = NULL,@filegroup_name = DEFAULT CDC开启成功,开始测试⽇志被占满的情况 这⾥演⽰对某些表开启CDC的情况下⽇志⽂件⽂件被占满的情况1,代理服务器未启动导致⽇志空间被占满⽂中⼀开始提到的步骤3,对于CDC,进程就是SQL Server Agent中的cdc.***_capture作业或者复制代理作业来读取⽇志如果SQL Server Agent在开启了CDC或者复制之后被关闭,或者重启服务器之后SQL Server Agent没有随机⾃动启动就有可能造成步骤2中的⽇志积压,也就是记录数据变化之后的事务⽇志处于replication状态,⽆法重⽤,导致没有可以使⽤的⽇志致使发⽣操作数据库的时候提⽰The transaction log for database '***' is full due to 'REPLICATION'. 这⾥暂时关闭代理服务(仅仅是为了测试演⽰这⼀现象) 增删改都可以产⽣事务⽇志,这⾥就演⽰insert数据的情况,做⼀个写数据的SQL,往开启了CDC的表中写数据库 在建库的时候⽇志⽂件有限制成了512M,因为这个表上开启了CDC,写数据这个过程会产⽣事务⽇志,⽇志有空空间限制在写⼊数据的过程中,⼀开始是没有问题的,随着数据的不断写⼊(Replication状态的⽇志不断积压),当⽇志全部使⽤之后,下⾯的报错就会产⽣了 此时观察事务⽇志的使⽤情况,发现已经是完全使⽤了, 因为⽇志空间被完全使⽤了,那么观察⼀下⽇志的等待状态,是Replication状态 此时尝试收缩也是⽆效的,因为⽇志都是出于活动状态,活动状态的⽇志是⽆法收缩的 可见,因为代理被关闭,读取⽇志的作业⽆法执⾏,造成⽇志堵塞,那么开启代理来看看到底⾏不⾏? 开启代理,查看CDC作业的执⾏情况,会发现,此时代理作业也不好使了,作业执⾏的时候并没有成功,⼀样提⽰说事务⽇志已满 此时观察测试表的cdc⽬标表没有任何数据,说明此时即便开启了代理,cdc的作业依然没有成功执⾏ 那么这⾥为什么CDC的代理作业也⽆法正常执⾏? 其实也不难理解,cdc的作业也是读取事务⽇志写数据的,这中间也相当于有事务性操作,必须要借助⽇志来实现,⽽此时⼜没有可⽤的⽇志空间, 这个作业当然要失败了。
【IT专家】sql2008 恢复模式:完整 事务日志已满问题
本文由我司收集整编,推荐下载,如有疑问,请与我司联系sql2008 恢复模式:完整事务日志已满问题sql2008恢复模式:完整事务日志已满问题 1.数据库属性:没有限制文件的增长 2.没有做事务日志备份疑问:一台服务器会提示事务日志已满问题,另一台服务器没有提示。
但是日志文件很大。
这是为什么?还有顺带问一下。
事务日志备份要如何还原呢?要具体到时点。
但是客户一般出现问题都是给出大概时间或者有时候时间是不准确的。
要如何确定呢?在恢复模式为完整的情况下,如果不进行日志备份日志是不会自动截断的也就是会一直无限制的增长到不能增长为止,最后将无法做新的交易。
日志量的产生跟你的业务量的大小有关,也跟你运行的语句产生的日志量的大小有关,因此可能一台已满而另一台没有满(不进行日志备份满也只是迟早的问题了)。
还原日志备份请参见一下链接technet.microsoft/zh-cn/library/ms177446(v=sql.110).aspx 还原的时候指定STOPAT还原到指定的时间点,上面链接中相关任务都有提到如何做到那台服务器没有提示的日志文件已经2G多了。
用网上查看日志使用率也查了,使用率达95%。
却没有出现说事务日志已满,然后导致应用程序无法查询删除添加等操作。
而那台出现事务日志已满的我看了事务日志才100多M 在恢复模式为完整的情况下,如果不进行日志备份日志是不会自动截断的也就是会一直无限制的增长到不能增长为止,最后将无法做新的交易。
日志量的产生跟你的业务量的大小有关,也跟你运行的语句产生的日志量的大小有关,因此可能一台已满而另一台没有满(不进行日志备份满也只是迟早的问题了)。
还原日志备份请参见一下链接technet.microsoft/zh-cn/library/ms177446(v=sql.110).aspx 还原的时候指定STOPAT还原到指定的时间点,上面链接中相关任务都有提到如何做到在还原日志备份前要先还原一份在日志备份之前的完整备份,并且还原完整备份时采用NORECOVERY 那台服务器没有提示的日志文件已经2G多了。
SQL Server中已满事务日志原因的检测
SQL Server中已满事务日志原因的检测对于SQL Server数据库管理员来讲,已满事务日志是一个琐碎的,但又很常见的问题。
它能引发事务的提前终止,甚至通过阻止所有事务的引入,从而引起系统的崩溃。
对于数据库管理员来说,关键是理解将要发生的情况,以便他们可以追踪引起问题的原因。
事务日志填充方式以下是一些可能引起事务日志填满的原因:填满的,细节的,或者没有在已满恢复模式下进行的日志备份,都会引起日志逐渐地填充。
进程中有活动的备份(备份被作为事务一样来处理),它会填充部分日志,而事务将填充剩余部分。
长时间运行的活动事务,例如从来都不会产生提交的SPID,以及暂停或高速运行数据库镜像都会引发延迟。
前者会引起事务不发送,如果在发送事务到镜像服务器之后的较长时间内,才进行高速运行,则后者才会发生。
对于事务复制,如果复制延迟或失败,事务日志将不会被清除,因为除非事务与日志都提交并发送至分布式数据库,否则事务都不能被清除。
如果进程中有一个数据库快照,当它创建时,所有的事务都堆积在它后边。
简单的响应方法需要解决已满事务日志的问题时,你可以从以下几个选择入手:1、你可以执行备份来消减日志。
事务日志备份是最快的,但也可能是最慢的,这取决于系统性能以及日志的大小。
通常不推荐填满的或细节的备份,这取决于在大小合适的系统中完成这些备份所需的时间。
2、你可以向数据库中添加额外的事务日志文件并执行以上备份方法中的一种。
当你在进行必要的备份时,额外的事务日志文件的添加可以为你赢得额外的时间。
当然,它也可在稍后被删除。
3、你可以将数据库的模式切换到简单恢复模式,它将自动清除日志。
但要记住,你将会丢失自最近一次已满的/细节的事务日志备份之前的事务历史。
4、正在填充日志的活动事务可以连同一些系统进程被终止,以至不会被重新执行并填充日志。
当问题源被追踪到,它将提供一些缓解,但它不应该被考虑为一种解决方案。
5、在查找系统缓慢的原因时,数据库镜像/复制可以关闭。
DB2报“数据库日志已满”问题解决
DB2报“数据库日志已满”问题解决用控制中心直接改会比较容易一点,在数据库名称上点右键-->配置-->日志-->日志文件大小、主日志文件数、辅助日志文件数改大一点。
也可用命令行db2cmddb2 update db cfg for mymakro using LOGFILSIZ 512 --日志文件大小db2 update db cfg for mymakro using LOGPRIMARY 20 --主日志db2 update db cfg for mymakro using LOGSECOND5 10 --辅助日志要将与此数据库的所有连接断开后才会生效。
执行批处理时,DB2 报数据库的事务日志已满的错误,解决办法辅助日志文件的数目(LOGSECOND) = 25已更改的至日志文件的路径(NEWLOGPATH) =日志文件路径= D:\DB2\NODE0000\SQL00003\SQLOGDIR\溢出日志路径(OVERFLOWLOGPATH) =镜像日志路径(MIRRORLOGPATH) =首个活动日志文件= S0000005.LOG磁盘上已满的块日志(BLK_LOG_DSK_FUL) = NO事务使用的最大活动日志空间的百分比(MAX_LOG) = 01 个活动UOW 的活动日志文件的数目(NUM_LOG_SPAN) = 0组落实计数(MINCOMMIT) = 1软检查点前回收的日志文件的百分比(SOFTMAX) = 100启用的恢复的日志保留(LOGRETAIN) = RECOVERY启用的日志记录的用户出口(USEREXIT) = OFFHADR 数据库角色= STANDARDHADR 本地主机名(HADR_LOCAL_HOST) =HADR 本地服务名称(HADR_LOCAL_SVC) =HADR 远程主机名(HADR_REMOTE_HOST) =HADR 远程服务名称(HADR_REMOTE_SVC) =远程服务器的HADR 实例名(HADR_REMOTE_INST) =HADR 超时值(HADR_TIMEOUT) = 120HADR 日志写同步方式(HADR_SYNCMODE) = NEARSYNC第一个日志归档方法(LOGARCHMETH1) = LOGRETAIN logarchmeth1 的选项(LOGARCHOPT1) =第二个日志归档方法(LOGARCHMETH2) = OFFlogarchmeth2 的选项(LOGARCHOPT2) =故障转移日志归档路径(FAILARCHPATH) =错误时重试日志归档次数(NUMARCHRETRY) = 5日志归档重试延迟(秒)(ARCHRETRYDELAY) = 20供应商选项(VENDOROPT) =启用的自动重新启动(AUTORESTART) = ON索引重新创建时间和重做索引构建(INDEXREC) = SYSTEM (RESTART) 在索引构建期间记录页(LOGINDEXBUILD) = OFFloadrec 会话的缺省数目(DFT_LOADREC_SES) = 1要保留的数据库备份的数目(NUM_DB_BACKUPS) = 12恢复历史保留时间(天数)(REC_HIS_RETENTN) = 366TSM 管理类(TSM_MGMTCLASS) =TSM 节点名(TSM_NODENAME) =TSM 所有者(TSM_OWNER) =TSM 密码(TSM_PASSWORD) =自动维护(AUTO_MAINT) = OFF自动数据库备份(AUTO_DB_BACKUP) = OFF自动表维护(AUTO_TBL_MAINT) = OFF自动runstats (AUTO_RUNSTATS) = OFF自动统计信息概要分析(AUTO_STATS_PROF) = OFF自动概要文件更新(AUTO_PROF_UPD) = OFF自动重组(AUTO_REORG) = OFFdb2 => quitDB20000I QUIT 命令成功完成。
SqlServer数据库提示“tempdb”的日志已满问题如何解决
SqlServer数据库提示“tempdb”的日志已满问题如何
解决
本文主要讲述了笔者在执行sql语句的过程中,遇到SqlServer数据库提示tempdb”的日志已满问题。
请备份该数据库的事务日志以释放一些日志空间”的解决过程,希望对大家有所帮助。
执行sql 语句,中间没有用到临时表
提示服务器: 消息9002,级别17,状态2,行1
数据库‘tempdb’ 的日志已满。
请备份该数据库的事务日志以释放一些日志空间。
网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的
解决过程:
查看了下数据库的属性,是自动增长,不指定文件大小上限。
在网上Google了很久,试了些方法都不行;数据库所在磁盘还有很大的可用空间,试着下重药了。
直接把tempdb的数据文件和日志文件的大小改为3000M,。
sql数据库日志已满的处理方式
DBCC SHRINKDATABASE收缩指定数据库中的数据文件大小。
语法DBCC SHRINKDATABASE(database_name [, target_percent ][ ,{NOTRUNCATE |TRUNCATEONLY }])参数database_name是要收缩的数据库名称.数据库名称必须符合标识符的规则。
有关更多信息,请参见使用标识符。
target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比.NOTRUNCATE导致在数据库文件中保留所释放的文件空间。
如果未指定,将所释放的文件空间释放给操作系统。
TRUNCATEONLY导致将数据文件中的任何未使用的空间释放给操作系统,并将文件收缩到上一次所分配的大小,从而减少文件大小,而不移动任何数据.不试图重新定位未分配页的行。
使用TRUNCATEONLY 时,忽略target_percentis。
注释Microsoft® SQL Server™可收缩:特定数据库的所有数据和日志文件。
执行DBCC SHRINKDATABASE。
一次一个特定数据库中的数据或日志文件.执行DBCC SHRINKFILE.DBCC SHRINKDATABASE 以每个文件为单位对数据文件进行收缩。
然而,DBCC SHRINKDATABASE 在对日志文件进行收缩时,看起来好像所有的日志文件都存在于一个连续的日志池中.假设名为mydb 的数据库有两个数据文件和两个日志文件。
这些数据文件和日志文件大小都为10 MB。
第一个数据文件包含6 MB 数据。
对于每个文件,SQL Server 计算目标大小,即要收缩文件到的大小.当用target_percent 指定DBCC SHRINKDATABASE 时,SQL Server 计算的目标大小是收缩后文件中的target_percent 可用空间大小.例如,如果指定按target_percent 为25 收缩mydb。
数据库解决db2事务日志已满及日志磁盘空间已满的问题
数据库解决db2事务⽇志已满及⽇志磁盘空间已满的问题事务⽇志满指当前事务⽆法写⼊到活动⽇志中(主⽇志⽂件和辅助⽇志⽂件已全部⽤完或者没有⾜够当前事务写⼊的空间)⽇志磁盘空间已满指辅助⽇志⽂件还未使⽤完,磁盘空间已经满了。
db2数据库事务⽇志⽂件分为主⽇志⽂件和辅助⽇志⽂件,主⽇志⽂件已分配空间,辅助⽇志⽂件使⽤时再分配。
查看事务⽇志配置(mid为数据库名称):db2 get db cfg for mid运⾏结果:⽇志⽂件⼤⼩(4KB) (LOGFILSIZ) = 1024主⽇志⽂件的数⽬ (LOGPRIMARY) = 13辅助⽇志⽂件的数⽬ (LOGSECOND) = 4已更改的⾄⽇志⽂件的路径 (NEWLOGPATH) =⽇志⽂件路径 = D:\DB2\NODE0000\SQL00003\SQLOGDIR\总事务⽇志容量⼤⼩=(LOGPRIMARY+LOGSECOND)*LOGFILSIZ*4kps:(13+4)*1024*4kb=68mbDB2事务⽇志满解决办法:(1)增⼤⽇志⽂件⼤⼩:db2 udpate db cfg for mid using LOGFILSIZ 8192或者增⼤主⽇志⽂件个数:db2 update db cfg for mid using LOGPRIMARY 15或者增⼤辅助⽇志⽂件个数:db2 update db cfg for mid using LOGSECOND 10(2)停掉引起这个错误的应⽤程序或者停掉所有的应⽤程序,再重启数据库db2 force applications alldb2 force application (应⽤程序句柄通过db2 list applications获取)db2stopdb2start。
数据库事务日志已满解决方法-删除侠客站群数据库日志文件
数据库事务日志已满解决方法-删除侠客站群数据库日志文件
大家在使用侠客站群V3的时候有时会提示事务日志已满,或者,可以看到存放库的那个磁盘越来越小,这是因为数据库的日志文件占用了大量的磁盘空间,如果觉得磁盘空间不足,想删除数据库的日志文件,即log后缀的文件,我们这里给大家介绍分离附加的方式来删除数据库的日志文件
该方法对SQL 2005和SQL 2008均有效
1. 开始--程序进入Microsoft SQL Server 2008/2005 然后点击SQL Server Management Studio 进入SQL管理登陆点击确定,进入数据库管理面板
2.点击“数据库”(或者点前面的加号),找到自己初始化的数据库,侠客站群默认使用的为V3DBS ,选中V3DBS后点击右键,选择任务,然后选择分离。
3.出现选择要分离的数据库之后,记得勾选“删除链接”,然后点击确定
4.找到自己当初初始化数据库时存放的位置,然后删除v3dbs_1.ldf 这个文件,切记是删除ldf后缀的文件,删错了数据就没了
5.同样在数据库管理面板中右键点击数据库,选择附加。
6.进入附加界面后点击添加按钮,找到自己数据库存放的位置(这个时候日志文件已经在第四步删除过了),选中数据库后点击确定,会显示需要附加的数据库信息
7.删除数据库信息里的ldf文件,如果不删除,就会提示附加数据库出错,因为找不到日志文件。
在数据库的相信信息里可以看到提示,找不到日志,我们用鼠标选中那一行,然后点击下方的删除按钮删除
8.删除后点击下方的确定按钮即可成功附加,数据库会自动创建新的日志文件。
附加完成之后,就可以去重新打开侠客站群继续正常使用啦!。
sybase数据库tempdb日志滿了
sybase数据库tempdb日志滿了开发数据库服务器遇到这样的一个问题,使用了一段时间之的后,突然之间数据库就用不了了,现象是新连接连接不上,已经连接的执行sql时,报出tempdb日志满了,无法进行操作的错误,而且控制台无法连接上服务器,所有操作都无法正常进行。
经过上网查询,得知是tempdb日志满了,缺省情况下,tempdb数据库是放置在master设备上,容量为2M,而临时数据库是活动最为平凡的数据库常常被用来排序、创建临时表、重格式化等操作,所以tempdb的优化应该受到特别的关注。
安装Sybase的时候就应该把tempdb的空间扩大,并且最好新建一个表空间给它专门用。
正常的时候可以用sp_helpdb tempdb命令查看tempdb,可以看到tempdb占用空间的情况。
如果日志满了,可以执行dump tran tempdb with truncate_only或者dump tran tempdb with no_log来清除日志,但是现在根本无法执行该语句,因为tempdb已经满了,根本没有空间来执行该语句,这该怎么办,好像进入了一个死循环里,日志满了要清除,但因为满了又无法清除,看来只能先扩容了,现在已经没有一个空闲的表空间了,控制台根本无法连接上数据库,只能用语句来新建一个表空间,下面是新建表空间的语句:disk initname="tempdblog",physname="c:/sybasedb/tempdblog.dat",vdevno=11,size= 409600go新建好表空间后,将该空间分配给tempdb存放日志用如下命令:alter database tempdb log on tempdblog=800如果要分配数据空间,用如下命令:alter database tempdb on tempdbdata=1024分配好后,就可以执行之前的清除日志的语句:dump tran tempdb with truncate_only或者 dump tran tempdb with no_log如果不想占用master的空间,可以执行如下语句将master上为tempdb的空间删除:sp_dropsegment "default",tempdb,mastersp_dropsegment logsegment,tempdb,master还可以将临时数据库与高速缓冲进行绑定tempdb数据库是活动最为平凡的数据库,常常被用来排序、创建临时表、重格式化等操作,它会频繁地使用数据缓存,所以应为临时数据库创建高速缓存,从而可以使其常驻内存并有助于分散I/O,根据服务器的实际情况,我们为tempdb数据库创建100M的高速缓存,实现方法如下:1、创建命名高速缓存sp_cacheconfig “tempdb_cache”,”100m”,”mixed”go2、重新启动server3、捆绑临时数据库到tempdb_cache高速缓存sp_bindcache “tempdb_cache”, tempdbgo以上操作已在系统中实现,硬件环境为IBMX系列服务器,操作系统为sco unix 5.0.6,系统优化后,性能得到较为明显的提高。
SQLserver事务日志已满
和 tempdb 数据库的日志文件占用过大空
要解决这个问题,要稍微麻烦点。因为磁盘空间已满,
SqlServer 服务有可能无法正常
启动。先不要让应用程序连接数据库, SharePoint 也不要连接数据库。 试着启动 SqlServer
服务。看看能否启动起来。如果不能,需要腾出来一点空间来。删除一些暂时不要的软件。
use SharePoint_Config
go
select name from sysfiles; go 知道了事务日志文件的 logic name, 就写命令 :
use SharePoint_Config go
dbcc shrinkfile (SharePoint_Config_log,
10240)
总之要让 SqlS能起来,就做下面的。
打开 Sql Analyzer , 执行如下语句 :
backup log tempdb with no_log
-- 清除事务日志
go backup log SharePoint_Config with no_log
占满,当事务日志文件 < 数据库名 >_log.ldf 被占满时, SqlServer 会根据某些特定策略来
处理,一个常见的做法是增加事务日志文件
< 数据库名 >_log.ldf 10% 的空间。这避免了
事务日志文件 < 数据库名 >_log.ldf 满而使数据库事务失败。磁盘空间不是无限的。总有一
门户系统共三台服务器 : 10.205.1.6 应用系统服务器 SharePoint 10.205.1.7 门户 DB 服务器 数据库服务器 SQL 2000
10.205.1.5 DC 服务器 出现该错误的是 10.205.1.7 数据库服务器
关于CAMS_数据库事务日志文件满导致认证失败的解决方法
关于CAMS数据库事务日志文件满导致认证失败解决方法的公告故障现象:所有客户端认证失败,同时给出如下提示:查看CAMS系统日志,出现大量如下报错:% 2006-12-31 09:24:17 ; [ERROR (1)] ; $JOB$ ; $JOB$ ; (null) ; (null) ; (null) ; Fail to insert tbl_billdetail_switch in UpdateBillDetail function. Error message : The log file for database 'cams' is full. Back up the transaction log for the database to free up some log space.同时在操作系统的事件管理器中出现大量如下错误类型的事件:问题分析:SQL Server数据库对于崩溃后的恢复有两种模型,一种是“完全”模型,一种是“简单”模型。
在“完全”模型下,数据库事务日志文件会记录下所有对数据库的修改操作,这种模型下数据库一旦崩溃,只要还拥有数据库的备份和数据库事务日志文件,数据就可以恢复到故障的时间点。
但这种情况下有可能导致数据库事务日志文件逐渐增长直到达到某个上限。
而在“简单”模型下,数据库的事务日志只记录对当前数据库的修改操作,修改事务一旦提交,记录在事务日志文件中的空间即可被后续的修改事务覆盖重写,这样事务日志文件不会不断增长。
创建一个SQL Server的数据库时,SQL Server缺省会将数据库还原模型设置为“完全”。
目前CAMS 部分版本设置事务日志的文件大小上限为10GB,且保持数据库缺省的故障还原模型为“完全”,随着事务日志的不断增大,在大用户数的情况下将有可能导致事务日志文件大小达到上限引起的认证失败故障。
问题解决方法:首先请确认问题确实由于事务日志文件超大导致。
事务日志被填满的原因是什么?数据库教程-电脑资料
事务日志被填满的原因是什么?数据库教程-电脑资料
SQL Server事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE, DELETE, INSERT 和CHECKPOINT,。
事务日志填满会导致1105错误:
Can't allocate space for object syslogs in database dbname because
the logsegment is full。
If you ran out of space in syslogs,dump
the transaction log,
电脑资料
《事务日志被填满的原因是什么?数据库教程》(https://www.)。
Otherwise use ALTER DATABASE or
sp_extendsegment to increase the size of the segment。
这种现象可能出现于任何一个数据库中,包括Master和TempDB。
一些难以预见的因素可能消耗日志空间。
例如:
一个大型事务,尤其像批量数据更新、插入或删除。
一个未提交的事务。
检查点处理程序截除时所需的带宽过大。
截除时超过阈值
上述各种条件互相作用的结果。
用于发布的标记事务没有被日志读取程序读走。
事务日志已满的解决方法
1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG2.截断事务日志: 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语句设置方式: EX EC sp_dboption '库名', 'autoshrink', 'TRUE' 6.如果想以后不让它日志增长得太大企业管理器--服务器--右键数据库--属性--事务日志 --将文件增长限制为xM(x是你允许的最大数据文件大小) --SQL语句的设置方式: alter database 库名 modify file(name=逻辑文件名,maxsize=20) ------------------------------------------------------2MSSQL2005日志的收缩1.右键在清除日志的数据库,如“TestDB”,点击[新建查询(Q)]2.输入以下SQL语句,其中“TestDB”是数据库名称DUMP TRANSACTION TestDB WITH NO_LOG3.执行该SQL,成功后继续以下操作4.右键该数据库节点,点击[任务(T)] -> [收缩(S)] -> [文件(F)]5.在弹出的“收缩文件”对话框中,将“文件类型(T)”选为“日志”,将“收缩操作”选中“在释放未使用的空间前重新组织页(O)”6.在“将文件收缩到(K)”文本框中输入后面提示的最小大小的数值,点击[确定]即可。
为什么数据库事务日志满了,使用dump tran with no_log仍不能截断日志?
为什么数据库事务日志满了,使用dump tran with no_log
仍不能截断日志?
佚名
【期刊名称】《铁路计算机应用》
【年(卷),期】2005(14)11
【摘要】有两种情况,可能出现这个问题。
一是应用系统给ASE发送了一个用户自定义事务,一直未提交.这个最早活跃事务阻碍系统截断日志。
二是客户端向ASE发送了一个修改数量大的事务.清日志时,该事务还正在执行之中,此事务所涉及的日志只能等到事务结束后,才能被截掉。
【总页数】1页(P57-57)
【关键词】事务日志;with;截断;数据库;应用系统;用户自定义;ASE;客户端;事务所;发送
【正文语种】中文
【中图分类】TP311.13
【相关文献】
1.数据库事务恢复日志和入侵响应模型研究 [J], 陈驰;冯登国;徐震
2.不要让日志文件夹失去控制使用CleanDir.js轻松管理日志文件夹 [J], Bill Stewart; 黄思维(译)
3.收集安全日志选择适当的日志管理工具,正确使用 [J], JohnHowie 肖欣(译)
4.监控Server Core事件日志——使用Wevtutil强大的命令行事件日志控制功能
[J], Mark Minasi; 欧阳宇(译)
5.收集安全日志选择适当的日志管理工具,正确使用[J], John;Howie;肖欣(译)因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库的事务日志已满。
若要查明无法重用日志中的空间的原因
,请参阅sys.databases 中的log_reuse_wait_desc 列
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
1、清空日志
DBCC SHRINKFILE(库名_log,0)
DUMP TRANSACTION 库名WITH NO_LOG
2、截断事务日志:
如果出现“未能在sysfiles 中找到文件库名_log'。
DBCC 执行完毕。
如果DBCC 输出了错误信息,请与系统管理员联系。
”
则使用这句SQL操作
BACKUP LOG 库名WITH NO_LOG
DBCC SHRINKFILE(2,0)
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
a、选择日志文件--收缩文件至,这里会给出一个允许收缩到的最小M数,确定就可以了
b、选择数据文件--收缩文件至,这里会给出一个允许收缩到的最小M数,,确定就可以了也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDA TABASE(库名)
--收缩指定数据文件,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)。