O log de transações não diminui, o banco de dados acha que está replicando


13

Eu tenho um banco de dados SQL Server 2008 R2 Express executando o Kaspersky Security Center e não tenho idéia de quais circunstâncias a instalação ocorreu, mas o banco de dados parece pensar que está sendo replicado e não liberará espaço no log de transações. por exemplo:

USE master;

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

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

retorna:

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

Também não há nada listado na Replicationseção no SSMS.

Até agora, tentei algumas declarações obtidas nos resultados do Google:

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

Mas não tive sorte em fazer com que esse banco de dados pare de pensar que está sendo replicado.

sys.databasesInformações completas :

+-----------------------------------+------------------------------------------------------------+
| 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                                                          |
+-----------------------------------+------------------------------------------------------------+

Além disso:

DBCC OPENTRAN;
No active open transactions.

DBCC SQLPERF(LOGSPACE);
KAV 171066  99.55339    0

EXEC sp_replcounters;
KAV 0   0   0   0x00000000000000000000  0x00000000000000000000

Também realizei backups completos de dados e log.

Eu me deparei com alguns posts com muito situações semelhantes, e a solução fornecida foi configurar a Publicação e Distribuição de replicação e removê-la novamente. No entanto, sendo esta Express Edition, essas opções nem aparecem para mim.

Somos principalmente uma loja Linux e essa é a única instância do SQL Server que temos. Se tudo mais falhar ao obter uma licença real, pode ser o nosso único recurso: restaurar um backup para uma instância não Express e tentar configurar e remover uma Publicação e, finalmente, restaurar de volta para o Express.

Respostas:


5

Solução para restaurar um banco de dados publicado

Enfrentamos um problema semelhante: um banco de dados publicado é armazenado no Server1. Todos os dias esse banco de dados será copiado e restaurado no Server2.

  • Frequentemente recebemos mensagens de erro:

    LOG completo devido a REPLICATION

  • log_reuse_wait_descfoi definido como REPLICATION.
  • Não foi possível remover a replicação, porque esse banco de dados não foi publicado no Server2.

Solução

Após restaurar o banco de dados, ative a publicação e remova-a:

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

É aceitável ter tempo de inatividade neste banco de dados? Provavelmente, isso foi restaurado a partir de um banco de dados replicado ou, possivelmente, um assinante que foi removido incorretamente, embora isso seja improvável. Você pode tentar fazer um backup do express e restaurar para uma edição padrão ou superior e configurar a replicação novamente e removê-la. Em seguida, você pode fazer backup do padrão e restaurar para expressar. Contanto que você não ative nenhum recurso no banco de dados enquanto estiver na edição superior, não haverá problemas ao fazer o downgrade. Você pode testar isso antes de uma interrupção real para garantir que ele remova o status e faça um script para minimizar o tempo de inatividade. Se você não tiver outro servidor, use a cópia de avaliação e instale na máquina local, em uma VM, na máquina original, se for aceitável, ou em qualquer lugar que você possa encontrar.


O tempo de inatividade não é um problema significativo no banco de dados, pois ele está simplesmente executando um servidor centralizado de atualização / licenciamento para o nosso AV. [Também ficou inoperante por alguns dias antes que eu notasse] No entanto, como mencionei nos comentários, somos principalmente uma loja Linux e esta é nossa única instância do MSSQL. Além disso, o backup tem 180 GB ou mais, portanto, enviá-lo para um provedor externo também não é uma opção.
Sammitch

Você pode instalar outra instância na mesma caixa e restaurar o backup desse banco de dados, se o espaço permitir. Como alternativa, você pode fazer um backup e desanexar o banco de dados do express e anexar à cópia de avaliação e tentar configurar / remover uma publicação. Na pior das hipóteses, você estraga o original e precisa soltá-lo e restaurar o backup. Na melhor das hipóteses, funciona, você se desconecta da avaliação e reconecta para expressar e desinstalar a avaliação.
Your_comment_is_not_funny

1

Você já tentou configurar o banco de dados para não publicar?

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

e depois fazer backup do log para ver o que acontece?

Edit 1: O que o seguinte t-sql retorna?

-- 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

Eu tinha exatamente o mesmo problema. O banco de dados SQL Express nunca fez parte de uma replicação. No passado, ele era reparado com alguns comandos DBCC checkdb. E em algum momento descobrimos que

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

mostrou "REPLICATION" como razão e o arquivo de log está crescendo.

Removemos a replicação usando este tsql:

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

exec sp_removedbreplication @db

Isso resolveu o problema e pudemos reduzir o log.


0

Eu tentaria o seguinte:

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

Após o qual você pode tentar adicionar uma replicação e remover uma replicação para uma tabela individual no banco de dados, conforme sugerido na publicação mais abaixo.

Tivemos um banco de dados ao mesmo tempo que mudou para o modo de replicação, mesmo que a distribuição e a replicação não tivessem sido configuradas no SQL Server.

Não consegui encontrar o script original que havia usado para o meu problema, então fiz uma pesquisa e me deparei com esta entrada no MSDN:

log_reuse_wait_desc = replicação, o log de transações não para de crescer

Existe uma causa raiz inespecífica para esse problema e ocorre em todo o mundo.

Boa caçada!


-1

Se você já tentou de tudo, talvez seja possível (certificando-se de ter um bom backup primeiro!) Desanexar o banco de dados, renomear o arquivo de log (para que o SQL Server não possa encontrá-lo) e reconectá-lo. Acredito que isso forçará o SQL Server a criar um novo arquivo de log. Se ele também deixará de pensar que o banco de dados é replicado, não faço ideia, mas parece pelo menos possível.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.