Dziennik transakcji nie zmniejsza się, DB uważa, że ​​się replikuje


13

Mam bazę danych SQL Server 2008 R2 Express z uruchomionym programem Kaspersky Security Center i nie mam pojęcia, w jakich okolicznościach nastąpiła instalacja, ale baza danych wydaje się myśleć, że jest replikowana i nie zwolni miejsca w dzienniku transakcji. na przykład:

USE master;

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

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

zwroty:

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

Również nic nie jest wymienione w Replicationsekcji w SSMS.

Do tej pory wypróbowałem kilka stwierdzeń uzyskanych z wyników Google:

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

Ale nie miałem szczęścia, żeby ten DB przestał myśleć, że jest replikowany.

Pełna sys.databasesinformacja:

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

Również:

DBCC OPENTRAN;
No active open transactions.

DBCC SQLPERF(LOGSPACE);
KAV 171066  99.55339    0

EXEC sp_replcounters;
KAV 0   0   0   0x00000000000000000000  0x00000000000000000000

Właśnie wykonałem pełne kopie zapasowe danych i dzienników.

Natknąłem się na kilka postów w bardzo podobnych sytuacjach, a rozwiązaniem było skonfigurowanie publikowania i dystrybucji replikacji, a następnie usunięcie go ponownie. Ponieważ jednak jest to Express Edition, te opcje nawet się dla mnie nie pojawiają.

Jesteśmy przede wszystkim sklepem z Linuksem i jest to jedyna instancja SQL Server, którą mamy. Jeśli wszystko inne nie powiedzie się, uzyskanie prawdziwej licencji może być naszym jedynym rozwiązaniem: przywrócenie kopii zapasowej w instancji innej niż Express i próba instalacji, a następnie usunięcie Publikacji, a następnie przywrócenie z powrotem do Express.

Odpowiedzi:


5

Rozwiązanie do przywracania opublikowanej bazy danych

Napotkaliśmy podobny problem: opublikowana baza danych jest przechowywana na serwerze Server1. Codziennie kopia zapasowa tej bazy danych będzie przywracana na serwerze Server2.

  • Często pojawiają się komunikaty o błędach:

    DZIENNIK pełny z powodu REPLIKACJI

  • log_reuse_wait_desczostał ustawiony na REPLICATION.
  • Nie można usunąć replikacji, ponieważ ta baza danych nie została opublikowana na serwerze Server2.

Rozwiązanie

Po przywróceniu bazy danych włącz publikację i usuń ją:

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

Czy dopuszczalne jest przestoje w tej bazie danych? Prawdopodobnie została ona przywrócona z zreplikowanej bazy danych lub prawdopodobnie subskrybent został nieprawidłowo usunięty, choć jest to mało prawdopodobne. Możesz spróbować wykonać kopię zapasową z ekspresowego i przywrócić do wersji standardowej lub wyższej, a następnie ponownie skonfigurować replikację i usunąć ją. Następnie możesz wykonać kopię zapasową ze standardowej i przywrócić, aby wyrazić. Tak długo, jak nie włączasz żadnych funkcji bazy danych w wyższej wersji, nie powinno być problemu z obniżeniem wersji. Możesz to przetestować przed faktyczną awarią, aby upewnić się, że usunie status i skryptuje wszystko, aby zminimalizować przestoje. Jeśli nie masz innego serwera, którego możesz użyć, pobierz kopię próbną i zainstaluj ją na komputerze lokalnym, maszynie wirtualnej, maszynie oryginalnej, jeśli jest akceptowalna, lub w dowolnym innym miejscu.


Przestój nie jest znaczącym problemem z bazą danych, ponieważ po prostu działa scentralizowany serwer aktualizacji / licencjonowania dla naszego AV. [Poza tym przez kilka dni przestałem działać] Jednak, jak wspomniałem w komentarzach, jesteśmy przede wszystkim sklepem z Linuksem i jest to nasza jedyna instancja MSSQL. Ponadto kopia zapasowa ma 180 GB +, więc wysłanie jej do zewnętrznego dostawcy również nie jest możliwe.
Sammitch,

Możesz zainstalować inną instancję w tym samym pudełku i przywrócić kopię zapasową bazy danych, o ile pozwala na to miejsce. Alternatywnie możesz wykonać kopię zapasową, a następnie odłączyć bazę danych od ekspresowej i dołączyć do kopii testowej oraz spróbować skonfigurować / usunąć publikację. W najgorszym przypadku zepsułeś oryginał i musisz go upuścić i przywrócić kopię zapasową. Najlepszy przypadek, to działa, odłączasz się od oceny i ponownie łączysz, aby wyrazić, a następnie odinstalować ocenę.
Your_comment_is_not_funny

1

Czy próbowałeś ustawić bazę danych, aby nie publikowała?

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

a następnie wykonać kopię zapasową dziennika, aby zobaczyć, co się stanie?

Edycja 1: Co zwraca następujący 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

Miałem dokładnie ten sam problem. Baza danych SQL Express nigdy nie była częścią replikacji. W przeszłości był naprawiany za pomocą niektórych poleceń DBCC checkdb. I w pewnym momencie to odkryliśmy

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

pokazał „REPLIKACJA” jako przyczynę i rosnący plik dziennika.

Usunęliśmy replikację za pomocą tego tsql:

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

exec sp_removedbreplication @db

To rozwiązało problem i mogliśmy zmniejszyć dziennik.


0

Spróbowałbym następujących rzeczy:

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

Następnie można spróbować dodać replikację i usunąć replikację dla pojedynczej tabeli w bazie danych, zgodnie z sugestią zamieszczoną poniżej.

Kiedyś mieliśmy bazę danych, która przeszła w tryb replikacji, mimo że dystrybucja i replikacja nie zostały skonfigurowane na serwerze SQL.

Nie mogłem znaleźć oryginalnego skryptu, którego użyłem do wydania, więc przeprowadziłem wyszukiwanie i natrafiłem na ten wpis w witrynie MSDN:

log_reuse_wait_desc = replikacja, dziennik transakcji nie przestanie rosnąć

Istnieje pewna nieokreślona pierwotna przyczyna tego problemu i dzieje się to na całym świecie.

Dobre polowanie!


-1

Jeśli wypróbowałeś wszystko inne, być może byłoby możliwe (najpierw upewnij się, że masz dobrą kopię zapasową!), Aby odłączyć bazę danych, zmienić nazwę pliku dziennika (aby SQL Server nie mógł go znaleźć), a następnie ponownie dołączyć bazę danych. Wierzę, że to zmusi SQL Server do utworzenia nowego pliku dziennika. Czy przestanie myśleć, że baza danych jest zreplikowana, nie mam pojęcia, ale wydaje się to przynajmniej możliwe.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.