Das Transaktionsprotokoll wird nicht verkleinert. DB glaubt, es wird repliziert


13

Ich habe eine SQL Server 2008 R2 Express-Datenbank, in der Kaspersky Security Center ausgeführt wird, und ich habe keine Ahnung, unter welchen Umständen die Installation durchgeführt wurde, aber die Datenbank scheint zu glauben, dass sie repliziert wird, und gibt keinen Speicherplatz aus dem Transaktionsprotokoll frei. z.B:

USE master;

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

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

kehrt zurück:

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

Auch im ist nichts verzeichnet Replication Abschnitt in SSMS .

Bisher habe ich ein paar Aussagen aus Google-Ergebnissen ausprobiert:

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

Aber ich hatte kein Glück, dass diese DB aufhörte zu glauben, dass sie repliziert wird.

Vollständige sys.databasesInformationen:

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

Ebenfalls:

DBCC OPENTRAN;
No active open transactions.

DBCC SQLPERF(LOGSPACE);
KAV 171066  99.55339    0

EXEC sp_replcounters;
KAV 0   0   0   0x00000000000000000000  0x00000000000000000000

Ich habe auch gerade vollständige Daten- und Protokollsicherungen durchgeführt.

Ich bin mit sehr ein paar Posts gestoßen ähnlichen Situationen gestoßen. Die Lösung bestand darin, die Replikation Publishing and Distributing einzurichten und sie dann wieder zu entfernen. Da es sich jedoch um Express Edition handelt, werden diese Optionen für mich nicht einmal angezeigt.

Wir sind hauptsächlich ein Linux-Shop und dies ist die einzige SQL Server-Instanz, die wir haben. Wenn alles andere fehlschlägt, um eine echte Lizenz zu erhalten, ist dies möglicherweise unsere einzige Möglichkeit: Um ein Backup auf einer Nicht-Express-Instanz wiederherzustellen und zu versuchen, eine Publikation einzurichten, zu entfernen und schließlich wieder in Express wiederherzustellen.

Antworten:


5

Lösung zum Wiederherstellen einer veröffentlichten Datenbank

Wir hatten ein ähnliches Problem: Eine veröffentlichte Datenbank ist auf Server1 gespeichert. Diese Datenbank wird jeden Tag auf Server2 gesichert und wiederhergestellt.

  • Wir haben häufig Fehlermeldungen erhalten:

    LOG voll wegen REPLICATION

  • log_reuse_wait_descwurde eingestellt auf REPLICATION.
  • Die Replikation konnte nicht entfernt werden, da diese Datenbank nicht auf Server2 veröffentlicht wurde.

Lösung

Aktivieren Sie nach dem Wiederherstellen der Datenbank die Veröffentlichung und entfernen Sie sie:

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

Ist es akzeptabel, in dieser Datenbank Ausfallzeiten zu haben? Dies wurde wahrscheinlich entweder aus einer replizierten Datenbank wiederhergestellt oder es war möglicherweise ein Abonnent, der nicht ordnungsgemäß entfernt wurde, obwohl dies unwahrscheinlich ist. Sie können versuchen, eine Sicherungskopie von Express zu erstellen und eine Standardversion oder eine höhere Version wiederherzustellen. Richten Sie dann die Replikation erneut ein und entfernen Sie sie. Dann können Sie von Standard sichern und auf Express wiederherstellen. Solange Sie in der höheren Version keine Funktionen in der Datenbank aktivieren, sollte es keine Probleme beim Downgrade geben. Sie können dies vor einem tatsächlichen Ausfall testen, um sicherzustellen, dass der Status entfernt wird, und das gesamte Skript ausführen, um Ausfallzeiten zu minimieren. Wenn Sie keinen anderen Server haben, den Sie verwenden können, greifen Sie auf die Testversion zu und installieren Sie diese auf Ihrem lokalen Computer, einer VM, dem Originalcomputer, sofern dies akzeptabel ist, oder an einem Ort, den Sie finden können.


Ausfallzeiten sind für die Datenbank kein wesentliches Problem, da lediglich ein zentraler Update- / Lizenzserver für unsere AV ausgeführt wird. Wie ich in den Kommentaren erwähnt habe, sind wir in erster Linie ein Linux-Shop und dies ist unsere einzige MSSQL-Instanz. Außerdem beträgt das Backup mehr als 180 GB, sodass der Versand an einen externen Anbieter ebenfalls nicht möglich ist.
Sammitch

Sie können eine weitere Instanz auf derselben Box installieren und die Sicherung dieser Datenbank wiederherstellen, sofern der Speicherplatz dies zulässt. Alternativ können Sie eine Sicherungskopie erstellen und dann die Datenbank von Express trennen und an die Evaluierungskopie anhängen und versuchen, eine Publikation einzurichten / zu entfernen. Im schlimmsten Fall versauen Sie das Original und müssen es fallen lassen und das Backup wiederherstellen. Im besten Fall funktioniert es, wenn Sie sich von der Evaluierung lösen und erneut verbinden, um die Evaluierung auszudrücken und dann zu deinstallieren.
Dein_Kommentar_ist_nicht_lustig

1

Haben Sie versucht, die Datenbank so einzustellen, dass sie nicht veröffentlicht wird?

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

und dann das Protokoll sichern, um zu sehen, was passiert?

Edit 1: Was gibt der folgende t-sql zurück?

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

Ich hatte genau das gleiche Problem. Die SQL Express-Datenbank war nie Teil einer Replikation. In der Vergangenheit wurde es mit einigen DBCC-checkdb-Befehlen repariert. Und irgendwann haben wir das entdeckt

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

hat als Grund "REPLICATION" angegeben und die Logdatei wächst.

Wir haben die Replikation mit folgendem tsql entfernt:

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

exec sp_removedbreplication @db

Das löste es und wir konnten das Protokoll verkleinern.


0

Ich würde folgendes versuchen:

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

Anschließend können Sie versuchen, eine Replikation hinzuzufügen und eine Replikation für eine einzelne Tabelle in der Datenbank zu entfernen.

Wir hatten zu einer Zeit eine Datenbank, die in den Replikationsmodus wechselte, obwohl Verteilung und Replikation nicht auf dem SQL Server eingerichtet worden waren.

Ich konnte das ursprüngliche Skript, das ich für mein Problem verwendet hatte, nicht finden. Daher führte ich eine Suche durch und stieß auf diesen Eintrag bei MSDN:

log_reuse_wait_desc = Replikation, das Transaktionsprotokoll hört nicht auf zu wachsen

Es gibt eine unspezifische Ursache für dieses Problem, die weltweit auftritt.

Gute Jagd!


-1

Wenn Sie alles andere versucht haben, ist es möglicherweise möglich (stellen Sie sicher, dass Sie zuerst eine gute Sicherung haben!), Die Datenbank zu trennen, die Protokolldatei umzubenennen (sodass SQL Server sie nicht finden kann) und die Datenbank erneut anzuhängen. Ich glaube, dies wird SQL Server zwingen, eine neue Protokolldatei zu erstellen. Ob es auch aufhören wird zu denken, dass die Datenbank repliziert wird, weiß ich nicht, aber es scheint zumindest möglich.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.