在SQL Server中移除了事务日志文件后,使用sys.master_files检查时发现,对应的事务日志文件记录信息依然存在sys.master_files里面,只是状态state_desc为OFFLINE。需要经过一段时间,这条记录在这个系统视图才会消失。

DECLARE @db_name NVARCHAR(32);

SET @db_name=N'TEST';

SELECT   f.database_id                AS database_id  

        ,DB_NAME(f.database_id)       AS database_name

        ,f.file_id                    AS primary_log_id 

        ,f.name                       AS log_logical_name

        ,f.physical_name              AS database_file_name

        ,f.type_desc                  AS type_desc

        ,CAST(f.size * 8.0 / 1024 / 1024 AS DECIMAL(8, 4)) 

                                      AS [Size(GB)]  

        ,CASE WHEN max_size = 0  THEN N'不允许增长'

                  WHEN max_size = -1 THEN N'自动增长'

              ELSE LTRIM(STR(max_size * 8.0 / 1024 / 1024, 14, 2))

                      + 'G'

         END                          AS max_size 

        ,CASE WHEN is_percent_growth = 1

                 THEN RTRIM(CAST(Growth AS CHAR(10))) + '%'

                 ELSE RTRIM(CAST(Growth*8.0/1024 AS CHAR(10))) + 'M'

         END                          AS growth_size 

        ,Is_Percent_Growth            AS IsPercentGrowth 

        ,f.state_desc

FROM    sys.master_files  f

WHERE  f.database_id= DB_ID(@db_name) 

  AND  type = 1

其实这个是因为这个系统视图的数据库不会实时更新,它的数据是异步更新。具体英文描述为: The view sys.master_files is something new and is updated asynchronously. It doesn't updates immediately. 以前也由于这个系统视图的数据异步更新,遇到过几个问题, 如下链接所示:

SQL Server系统视图sys.master_files不能正确显示数据库脱机状态

SQL Server使用sys.master_files计算tempdb大小不正确。

不过这个系统视图sys.master_files里面数据什么时候更新,确实不清楚它的同步机制。有时候测试实验发现很快就更新了。有时候可能等好几分钟都没有更新数据。附上测试流程,其实MS SQL 事务日志管理小结这里也有介绍,只是略过简单

--Step 1:    首先找出有2个或多个事务日志的数据库

USE master;

GO

SELECT  f.database_id         AS database_id  ,

        d.name                AS database_name,

        f.type_desc           AS type_desc    ,

        COUNT(*)              AS log_count

FROM    sys.master_files  f

INNER  JOIN sys.databases d ON f.database_id = d.database_id

WHERE   type = 1

GROUP BY f.database_id ,

         f.type_desc,

         d.name

HAVING  COUNT(*) >= 2;

 

 

 

--Step 2:    查看事务日志文件的详细信息(包括文件逻辑名,物理路径,大小,增长情况等等)

DECLARE @db_name NVARCHAR(32);

SET @db_name=N'TEST';

SELECT   f.database_id                AS database_id  

        ,DB_NAME(f.database_id)       AS database_name

        ,f.file_id                    AS primary_log_id 

        ,f.name                       AS log_logical_name

        ,f.physical_name              AS database_file_name

        ,f.type_desc                  AS type_desc

        ,CAST(f.size * 8.0 / 1024 / 1024 AS DECIMAL(8, 4)) 

                                      AS [Size(GB)]  

        ,CASE WHEN max_size = 0  THEN N'不允许增长'

                  WHEN max_size = -1 THEN N'自动增长'

              ELSE LTRIM(STR(max_size * 8.0 / 1024 / 1024, 14, 2))

                      + 'G'

         END                          AS max_size 

        ,CASE WHEN is_percent_growth = 1

                 THEN RTRIM(CAST(Growth AS CHAR(10))) + '%'

                 ELSE RTRIM(CAST(Growth*8.0/1024 AS CHAR(10))) + 'M'

         END                          AS growth_size 

        ,Is_Percent_Growth            AS IsPercentGrowth 

        ,f.state_desc

FROM    sys.master_files  f

WHERE  f.database_id= DB_ID(@db_name) 

  AND  type = 1

 

 

 

 

 

--Step 3: 确认那个是主事务日志文件,因为主日志文件(primary log)是不能删除的

 

 

DECLARE @db_name NVARCHAR(32);

SET @db_name=N'TEST';

SELECT  f.database_id            AS database_id  ,

        DB_NAME(f.database_id)   AS database_name,

        MIN(f.file_id)           AS primary_log_id ,

        f.type_desc              AS type_desc    

FROM    sys.master_files  f

WHERE  f.database_id= DB_ID(@db_name) 

  AND  type = 1

GROUP BY f.database_id,f.type_desc;

 

 

 

--Step 4:查看对应数据库的事务日志状态

 

DECLARE @db_name NVARCHAR(32);

SET @db_name=N'TEST';

SELECT  name ,

        log_reuse_wait_desc

FROM    sys.databases

WHERE name=@db_name

 

 

 

 

--Step 5: DBCC SQLPERF(LOGSPACE)

--查看数据库的事务日志空间使用情况统计信息

DBCC SQLPERF(LOGSPACE)

 

 

 

 

 --Step 6: 查看虚拟日志情况(虚拟日志文件 (VLF)事务日志的信息)

USE TEST;

GO

DBCC LOGINFO('TEST')

GO

 

USE TEST;

GO

DBCC SHRINKFILE('TEST_Log1', 1)

 

 

USE TEST;

GO

DBCC SHRINKFILE('TEST_Log1', EMPTYFILE)

 

 

 

--Step 7: 备份事务日志

 

--类似这样的脚本。

 

BACKUP LOG TEST TO DISK = 'M:\DB_BACKUP\Test.Trn'

GO

 

--有些情况下,Step 6 跟 Step 7要循环交叉进行,直到事务日志文件empty后,然后执行step 8

 

 

--Step 8: 移除事务日志文件

ALTER DATABASE TEST REMOVE FILE TEST_Log1

SQL Server移除事务日志后sys.master_files依然存在记录问题的更多相关文章

  1. SQL Server中的事务日志管理(1/9):事务日志概况

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  2. 第17周翻译:SQL Server中的事务日志管理的阶梯:第5级:在完全恢复模式下管理日志

    来源:http://www.sqlservercentral.com/articles/Stairway+Series/73785/ 作者:Tony Davis, 2012/01/27 翻译:刘琼滨. ...

  3. 第16周翻译:SQL Server中的事务日志管理,级别3:事务日志、备份和恢复

    源自: http://www.sqlservercentral.com/articles/Stairway+Series/73779/ 作者: Tony Davis, 2011/09/07 翻译:刘琼 ...

  4. SQL Server中的事务日志管理的阶梯,级别1:事务日志概述

    SQL Server中的事务日志管理的阶梯,级别1:事务日志概述 翻译:刘琼滨 谢雪妮 许雅莉 赖慧芳 级别1:事务日志概述 事务日志是一个文件,其中SQL服务器存储了所有与日志文件关联的数据库执行的 ...

  5. 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)

    使用SQL Server 2008的事务日志传送功能备份数据库(logshiping) 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)

  6. 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

    简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...

  7. SQL Server中的事务日志管理(7/9):处理日志过度增长

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  8. SQL Server中的事务日志管理(8/9):优化日志吞吐量

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  9. SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

随机推荐

  1. Spring Cloud Eureka Server高可用注册服务中心的配置

    前言 Eureka 作为一个云端负载均衡,本身是一个基于REST的服务,在 Spring Cloud 中用于发现和注册服务. 那么当成千上万个微服务注册到Eureka Server中的时候,Eurek ...

  2. 一个bug分析 ----------换个角度,有另外一个天地

    有个接口是按修改时间(updated_time)排序的 优化后,有人反馈接口的返回值有问题 查了一下,反馈的数据是推荐过的(推荐操作是会更新updated_time的). 然后就认为是有人进行了推荐操 ...

  3. python中用locust做简单的压力测试

    验证导入包成功 首先导入locust模块,百度一下导入方法很多,就不多说了 验证导入成功或失败,在终端中(windows中是cmd)输入:locust --help 导入成功后会出现如下界面: 编辑运 ...

  4. yii批量插入的方法

    public function insertSeveral($table, $array_columns) { $sql = ''; $params = array(); $i = 0; foreac ...

  5. 35.app后端搜索入门

    现在人们的网络生活已经离不开搜索了,遇到不懂的问题,想知道的事情,搜索一下,就知道答案. 在app中,最常见的搜索情景就是搜索用户.只有几百,几千的用户量时,可以直接用用like这样的模糊查询,但是, ...

  6. 第一个vue示例-高仿微信

    这时我学习vue写的第一个demo,因为以前学过angular,所以这次看vue的时候是先写demo,在写的过程中遇到不会的在看书的方式学习的,因为是针对性学习,所以可以快速的对vue有个大概的认识, ...

  7. linux常用命令:创建文件和文件夹

    1.首先说一下touch 创建文件的命令,touch可以用于创建二进制文件,用法非常简单.用法:touch+文件名,touch与文件名之间一定要有空格.图中先用之前分享过的命令来查看一下/目录下面有多 ...

  8. if_else_while_for

    import getpass #标准库里要加密密码需要导包getpass.但是getpass在pycharm中不好用,需要在命令窗口中输入才管用. _username = "abc" ...

  9. go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go

    从本节开始,将逐步阅读nsq各模块的代码. 读一份代码,我的思路一般是: 1.了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助. 2.了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块 ...

  10. [Poi2012]A Horrible Poem BZOJ2795

    分析: 这是今天下午的考试题,推了2个小时,考试中A掉了 首先,循环串通过字符串hash可以O(1)判断:get_hash(l,r-len)==get_hash(l+len,r);显然可证. 我们其次 ...