事务日志不会减少,数据库认为它正在复制


13

我有一个运行Kaspersky Security Center的SQL Server 2008 R2 Express数据库,我不知道在什么情况下会进行安装,但是该数据库似乎认为它已被复制并且不会从事务日志中释放任何空间。例如:

USE master;

SELECT 
    name, log_reuse_wait, log_reuse_wait_desc, is_cdc_enabled 
FROM 
    sys.databases 
WHERE 
    name = 'KAV';

SELECT DATABASEPROPERTYEX('KAV', 'IsPublished');

返回:

name | log_reuse_wait | log_reuse_wait_desc | is_cdc_enabled
-----|----------------|---------------------|---------------
KAV  | 6              | REPLICATION         | 0 
DATABASEPROPERTYEX('KAV', 'IsPublished')
----------------------------------------
0 [not published]

同样Replication,SSMS 的部分中没有列出任何内容。

到目前为止,我已经尝试了一些来自Google结果的陈述:

USE KAV;
EXEC sp_repldone null, null, 0,0,1;
EXEC sp_removedbreplication KAV;

但是我没有运气让这个数据库停止认为它正在被复制。

完整sys.databases信息:

+-----------------------------------+------------------------------------------------------------+
| name                              | KAV                                                        |
| database_id                       | 5                                                          |
| source_database_id                | NULL                                                       |
| owner_sid                         | 0x0105000000000005150000004EB006B0C3554AB049CEA01BE8030000 |
| create_date                       | 2013-07-04 10:31:28.947                                    |
| compatibility_level               | 90                                                         |
| collation_name                    | Latin1_General_CI_AS                                       |
| user_access                       | 0                                                          |
| user_access_desc                  | MULTI_USER                                                 |
| is_read_only                      | 0                                                          |
| is_auto_close_on                  | 0                                                          |
| is_auto_shrink_on                 | 0                                                          |
| state state_desc                  | ONLINE                                                     |
| is_in_standby                     | 0                                                          |
| is_cleanly_shutdown               | 0                                                          |
| is_supplemental_logging_enabled   | 0                                                          |
| snapshot_isolation_state          | 1                                                          |
| snapshot_isolation_state_desc     | ON                                                         |
| is_read_committed_snapshot_on     | 1                                                          |
| recovery_model                    | 1                                                          |
| recovery_model_desc               | FULL                                                       |
| page_verify_option                | 2                                                          |
| page_verify_option_desc           | CHECKSUM                                                   |
| is_auto_create_stats_on           | 1                                                          |
| is_auto_update_stats_on           | 1                                                          |
| is_auto_update_stats_async_on     | 0                                                          |
| is_ansi_null_default_on           | 1                                                          |
| is_ansi_nulls_on                  | 1                                                          |
| is_ansi_padding_on                | 1                                                          |
| is_ansi_warnings_on               | 1                                                          |
| is_arithabort_on                  | 1                                                          |
| is_concat_null_yields_null_on     | 1                                                          |
| is_numeric_roundabort_on          | 0                                                          |
| is_quoted_identifier_on           | 1                                                          |
| is_recursive_triggers_on          | 0                                                          |
| is_cursor_close_on_commit_on      | 0                                                          |
| is_local_cursor_default           | 1                                                          |
| is_fulltext_enabled               | 1                                                          |
| is_trustworthy_on                 | 0                                                          |
| is_db_chaining_on                 | 0                                                          |
| is_parameterization_forced        | 0                                                          |
| is_master_key_encrypted_by_server | 0                                                          |
| is_published                      | 0                                                          |
| is_subscribed                     | 0                                                          |
| is_merge_published                | 0                                                          |
| is_distributor                    | 0                                                          |
| is_sync_with_backup               | 0                                                          |
| service_broker_guid               | 19C05AF5-8686-4C27-BF7E-93E240DA953B                       |
| is_broker_enabled                 | 0                                                          |
| log_reuse_wait                    | 6                                                          |
| log_reuse_wait_desc               | REPLICATION                                                |
| is_date_correlation_on            | 0                                                          |
| is_cdc_enabled                    | 0                                                          |
| is_encrypted                      | 0                                                          |
| is_honor_broker_priority_on       | 0                                                          |
+-----------------------------------+------------------------------------------------------------+

也:

DBCC OPENTRAN;
No active open transactions.

DBCC SQLPERF(LOGSPACE);
KAV 171066  99.55339    0

EXEC sp_replcounters;
KAV 0   0   0   0x00000000000000000000  0x00000000000000000000

我也刚刚执行了完整的数据和日志备份。

我遇到过一些情况非常相似的帖子,给出的解决方案是设置复制发布和分发,然后再次将其删除。但是,这是Express Edition,这些选项甚至对我来说都不显示。

我们主要是一家Linux商店,这是我们拥有的唯一SQL Server实例。如果所有其他方法均无法获得真实许可证,则可能是我们唯一的方法:将备份还原到非Express实例并尝试设置,然后删除发布,然后最终还原回Express。

Answers:


5

恢复已发布数据库的解决方案

我们遇到了类似的问题:已发布的数据库存储在Server1上。每天都会在Server2上备份和还原此数据库。

  • 我们经常收到错误消息:

    由于复制,日志已满

  • log_reuse_wait_desc设置为REPLICATION
  • 无法删除复制,因为此数据库未在Server2上发布。

还原数据库后,启用发布并将其删除:

USE MyDatabase
GO
-- 1.) enable publication for MyDatabase
EXEC sp_replicationdboption 
  @dbname = 'MyDatabase', 
  @optname = N'publish', 
  @value = N'true';
GO
-- 2.) remove publication from database. Use the PUBLICATION-name (not database name)
sp_removedbreplication 'Publ_MyDatabase','both'

-- 3.) disable publication for MyDatabase
EXEC sp_replicationdboption 
  @dbname = 'MyDatabase', 
  @optname = N'publish', 
  @value = N'false';
GO

-- Verify: log_reuse_wait_desc should have changed from REPLICATION to NOTHING
SELECT name, log_reuse_wait_desc, * FROM sys.databases WHERE name = 'MyDatabase'

1

在此数据库上停机可以接受吗?这可能是从复制的数据库还原的,或者可能是未正确删除的订户,尽管这不太可能。您可以尝试从express备份并还原到标准或更高版本,然后再次设置复制并将其删除。然后,您可以从标准备份并还原到Express。只要在较高版本中不启用数据库的任何功能,降级就不会有问题。您可以在实际中断之前对其进行测试,以确保它将删除状态并将其全部编写为脚本,以最大程度地减少停机时间。如果没有其他服务器可以使用,请获取评估副本并安装在本地计算机,VM,可接受的原始计算机上或可以找到的任何位置。


停机对于数据库而言不是一个重要的问题,因为它只是为我们的AV运行集中式更新/许可服务器。[也有几天没有出现,我才注意到]但是,正如我在评论中提到的,我们主要是Linux商店,这是我们唯一的MSSQL实例。此外,备份的容量为180GB +,因此也不能选择将其发送到外部提供商。
Sammitch 2014年

您可以在同一盒子上安装另一个实例,并在空间允许的情况下还原该数据库的备份。或者,您可以进行备份,然后将数据库与express分离,并附加到评估副本,然后尝试设置/删除发布。最坏的情况是,您将原始文件弄糟,必须将其丢弃并还原备份。最好的情况是,它有效,您从评估中分离出来并重新附加以表示,然后卸载评估。
Your_comment_is_not_funny 2014年

1

您是否尝试过将数据库设置为不发布?

use master
exec sp_replicationdboption @dbname = N'<DATABASENAME>', @optname = N'publish', @value = N'false'
GO

然后备份日志以查看会发生什么情况?

编辑1:以下t-sql返回什么?

-- Run on publisher database for Pub, subscriber information

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT  sa.name AS ArticleName,
        sp.name AS PublicationName,
        d.datasource AS Distributor,
        s.dest_db AS Destination_DB,
        srv.srvname AS SubscriptionServer
FROM    dbo.syspublications sp  
LEFT JOIN
        dbo.sysarticles sa 
        on sp.pubid = sa.pubid 
LEFT JOIN
        dbo.syssubscriptions s 
        on sa.artid = s.artid 
LEFT JOIN
        master.dbo.sysservers srv 
        on s.srvid = srv.srvid 
OUTER APPLY 
        (
        SELECT  datasource
        FROM    master.dbo.sysservers
        WHERE   srvstatus & 8 <> 0
        ) d

1

我有完全相同的问题。SQL Express数据库从来不是复制的一部分。过去使用某些DBCC checkdb命令对其进行了修复。有时我们发现

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

已将“ REPLICATION”显示为原因并且日志文件越来越多。

我们使用以下tsql删除了复制:

declare @db as varchar(100) = 'dbname'

exec sp_removedbreplication @db

这样就解决了,我们可以缩小日志。


0

我会尝试以下方法:

USE <database_name_here>
GO
EXEC sp_repldone 
    @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1

之后,您可以尝试添加复制并删除数据库中单个表的复制,如后续文章中所建议。

即使没有在SQL Server上设置分发和复制,我们一次也有一个数据库切换到复制模式。

我找不到用于问题的原始脚本,因此我进行了搜索,并在MSDN上遇到了以下条目:

log_reuse_wait_desc =复制,事务日志不会停止增长

此问题有一些不确定的根本原因,并且在世界各地都有发生。

打得好!


-1

如果您尝试了其他所有方法,则可能有可能(首先确保您具有良好的备份!)分离数据库,重命名日志文件(以便SQL Server无法找到它),然后重新附加数据库。我相信这将迫使SQL Server创建一个新的日志文件。我是否还不知道是否还会停止认为数据库已被复制,但似乎至少有可能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.