Il log delle transazioni non si restringe, DB pensa che si stia replicando


13

Ho un database SQL Server 2008 R2 Express con Kaspersky Security Center e non ho idea in quali circostanze sia avvenuta l'installazione, ma il database sembra pensare che venga replicato e non libererà spazio dal registro delle transazioni. per esempio:

USE master;

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

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

ritorna:

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

Inoltre non c'è nulla elencato nella Replicationsezione in SSMS.

Finora ho provato un paio di dichiarazioni tratte dai risultati di Google:

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

Ma non ho avuto fortuna nel far smettere a questo DB di pensare che venga replicato.

sys.databasesInformazioni complete :

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

Anche:

DBCC OPENTRAN;
No active open transactions.

DBCC SQLPERF(LOGSPACE);
KAV 171066  99.55339    0

EXEC sp_replcounters;
KAV 0   0   0   0x00000000000000000000  0x00000000000000000000

Ho anche appena eseguito backup completi dei dati e dei log.

Mi sono imbattuto in alcuni post con situazioni molto simili e la soluzione fornita è stata quella di impostare la replica di pubblicazione e distribuzione e quindi rimuoverla di nuovo. Tuttavia, trattandosi di Express Edition, queste opzioni non appaiono nemmeno per me.

Siamo principalmente un negozio Linux e questa è l'unica istanza di SQL Server che abbiamo. Se tutto il resto non riesce a ottenere una licenza reale potrebbe essere la nostra unica risorsa: ripristinare un backup in un'istanza non Express e provare a configurare, quindi rimuovere una Pubblicazione, quindi ripristinare nuovamente in Express.

Risposte:


5

Soluzione per ripristinare un database pubblicato

Abbiamo riscontrato un problema simile: un database pubblicato è archiviato su Server1. Ogni giorno verrà eseguito il backup e il ripristino di questo database su Server2.

  • Abbiamo spesso ricevuto messaggi di errore:

    LOG pieno a causa della REPLICAZIONE

  • log_reuse_wait_descera impostato su REPLICATION.
  • Non è stato possibile rimuovere la replica perché questo database non è stato pubblicato su Server2.

Soluzione

Dopo aver ripristinato il database abilitare la pubblicazione e rimuoverlo:

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

È accettabile avere tempi di inattività su questo database? Probabilmente questo è stato ripristinato da un database replicato oppure era probabilmente un abbonato che era stato rimosso in modo improprio, sebbene ciò sia improbabile. È possibile provare a eseguire un backup da express e ripristinandolo a un'edizione standard o superiore, quindi impostare nuovamente la replica e rimuoverla. Quindi è possibile eseguire il backup da standard e ripristinare per esprimere. Fintanto che non abiliti alcuna funzionalità nel database durante l'edizione superiore, non dovrebbe esserci alcun problema al downgrade. È possibile verificarlo prima di un'interruzione effettiva per assicurarsi che rimuoverà lo stato e lo script tutto per ridurre al minimo i tempi di inattività. Se non disponi di un altro server che puoi utilizzare, prendi la copia di valutazione e installa sul tuo computer locale, una macchina virtuale, la macchina originale se è accettabile o ovunque tu possa trovare.


I tempi di inattività non sono un problema significativo con il database poiché eseguono semplicemente un server di aggiornamento / licenza centralizzato per il nostro AV. [Inoltre è stato inattivo per alcuni giorni prima che me ne accorgessi] Tuttavia, come ho già detto nei commenti, siamo principalmente un negozio Linux e questa è la nostra unica istanza MSSQL. Inoltre, il backup è di 180 GB +, quindi non è nemmeno possibile inviarlo a un provider esterno.
Sammitch,

È possibile installare un'altra istanza nella stessa casella e ripristinare il backup di quel database, spazio permettendo. In alternativa, è possibile eseguire un backup e quindi scollegare il database da express e allegarlo alla copia di valutazione e provare a impostare / rimuovere una pubblicazione. Nel peggiore dei casi, rovini l'originale e devi lasciarlo cadere e ripristinare il backup. Nel migliore dei casi, funziona, si stacca dalla valutazione e si ricollega per esprimere e quindi disinstallare la valutazione.
Your_comment_is_not_funny

1

Hai provato a impostare il database per non pubblicare?

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

e quindi il backup del registro per vedere cosa succede?

Modifica 1: Cosa restituisce il seguente 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

Ho avuto lo stesso identico problema. SQL Express DB non ha mai fatto parte di una replica. In passato è stato riparato con alcuni comandi DBCC checkdb. E a un certo punto lo abbiamo scoperto

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

ha mostrato "REPLICATION" come motivo e il file di registro in crescita.

Abbiamo rimosso la replica usando questo tsql:

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

exec sp_removedbreplication @db

Ciò ha risolto e abbiamo potuto ridurre il registro.


0

Vorrei provare quanto segue:

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

Dopodiché puoi provare ad aggiungere una replica e rimuovere una replica per una singola tabella nel database come suggerito nel post più avanti.

Un tempo avevamo un database che passava alla modalità di replica anche se la distribuzione e la replica non erano state configurate su SQL Server.

Non sono riuscito a trovare lo script originale che avevo usato per il mio problema, quindi ho eseguito una ricerca e ho trovato questa voce su MSDN:

log_reuse_wait_desc = replica, il registro delle transazioni non smetterà di crescere

Esiste una causa alla radice non specifica per questo problema e succede in tutto il mondo.

Buona caccia!


-1

Se hai provato tutto il resto, forse sarebbe possibile (assicurandoti di avere prima un buon backup!) Per scollegare il database, rinominare il file di registro (in modo che SQL Server non riesca a trovarlo) e quindi ricollegare il database. Credo che questo costringerà SQL Server a creare un nuovo file di registro. Se smetterà anche di pensare che il database sia replicato non ho idea, ma sembra almeno possibile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.