我不是SQL专家,每当我需要做一些超出基础知识的事情时,我就会想起这个事实.我有一个不大的测试数据库,但事务日志肯定是.如何清除事务日志?
我有一个数据库,[我的数据库],它有以下信息:
SQL Server 2008
MDF大小:30 GB
LDF大小:67 GB
我想尽可能地缩小日志文件,所以我开始寻找如何做到这一点.警告:我不是一名DBA(甚至是接近DBA)并且一直在通过这个任务感受到进步.
首先,我刚进入SSMS,数据库属性,文件,并将初始大小(MB)值编辑为10.这将日志文件减少到62 GB(不完全是我输入的10 MB).所以,我附加了SQL Profiler,看到正在调用DBCC SHRINKFILE.然后我将该命令输入查询编辑器,这是结果.
DBCC SHRINKFILE (N'My DB_Log' , 10)
Run Code Online (Sandbox Code Playgroud)
输出是:
Cannot shrink log file 2 (My DB_Log) because the logical log file located at the end of the file is in use.
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
------ ----------- ----------- ----------- ----------- --------------
8 2 8044104 12800 8044104 12800
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Run Code Online (Sandbox Code Playgroud)
然后我做了一些研究,发现了这个:
http://support.microsoft.com/kb/907511
这说我需要在收缩文件之前备份日志文件,以便释放虚拟日志文件并且收缩文件可以完成它的工作 - …
给定一个SQL Server 2008 .bak文件,有没有办法只从.bak文件中恢复数据文件,而没有事务日志?
我问的原因是这个数据库的事务日志文件大小很大 - 超过我现有的磁盘空间.
我对事务日志没兴趣,对任何未完成的事务没兴趣.通常,我只是将日志缩小为零,一旦我恢复了数据库.但是,当我没有足够的磁盘空间来创建日志时,这没有任何帮助.
我需要的是告诉SQL Server只恢复.bak文件中的数据而不是事务日志的方法.有没有办法做到这一点?
请注意,我无法控制.bak文件的生成- 它来自外部源.在生成.bak文件之前缩小事务日志不是一种选择.
我正在尝试编写一个T-SQL例程,根据数据库的逻辑名称使用DBCC SHRINKFILE缩小事务日志文件.该DB_NAME()函数为您提供数据库的逻辑名称.事务日志是否有等价的?如果没有,是否有其他方式来获取此信息?事务日志的默认名称是<<Database Name>>_log,但我宁愿不依赖于此.
我正在尝试管理SQL Server 2008日志文件的大小.我有一个每天加载一次的报告数据库.简单恢复模型是最合适的,因为除了早上加载之外没有其他事务,我可以重新创建这些记录.我的目标是使事务日志具有固定大小,足够大,以便在加载期间不必分配新空间.
我的问题是日志不断增长.我知道日志应该被标记为可重用,但为什么日志会不断增长?log_reuse_wait_desc显示"Nothing".
我可以将日志文件缩小到1 MB,所以我知道它没有任何事务.我可以设置一个工作来做这件事,但我宁愿把日志保留在500MB,这足以处理每日负载.如果我这样做,日志会增长.
如何使日志保持一致的大小?
请注意:缩小日志文件不能解决此问题.我知道该怎么做.我正试图在事务日志中找到一种方法来重用.
MySQL是否保留了事务日志,如果存在,我在哪里可以找到它?
从表中神秘地删除了许多行,我想尝试看看它是如何以及何时发生的.
我想查询最后一次事务日志备份时所有数据库(在SQL Server 2008实例中)的日期.怎么做?我知道这个信息在某个地方,但我不知道在哪里.
我需要具有以下功能的事务日志库:
最高性能.没有强制(刷新),让O/S自行决定写缓冲区.大块文件大小增加,以最小化元数据修改.我不在乎是否遗失了一些最后的记录.
问题是,如何在读取日志文件时找到最后一个有效记录?可以使用哪些技术,还是有一个现成的开源库?
如何获取事务日志的当前大小?我如何获得尺寸限制?
我想对此进行监控,以便确定备份事务日志的频率.
我执行大型操作时通常会遇到事务日志问题.