Log Transaksi tidak akan menyusut, DB berpikir itu mereplikasi

13

Saya punya database SQL Server 2008 R2 Express yang menjalankan Kaspersky Security Center, dan saya tidak tahu dalam keadaan apa pemasangan itu terjadi, tetapi database tersebut tampaknya berpikir bahwa itu direplikasi dan tidak akan membebaskan ruang apa pun dari log transaksi. misalnya:

USE master;

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

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

pengembalian:

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

Juga tidak ada yang terdaftar di Replicationbagian SSMS.

Sejauh ini saya sudah mencoba beberapa pernyataan yang didapat dari hasil Google:

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

Tapi saya tidak beruntung mendapatkan DB ini untuk berhenti berpikir itu direplikasi.

sys.databasesInfo lengkap :

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

Juga:

DBCC OPENTRAN;
No active open transactions.

DBCC SQLPERF(LOGSPACE);
KAV 171066  99.55339    0

EXEC sp_replcounters;
KAV 0   0   0   0x00000000000000000000  0x00000000000000000000

Saya juga baru saja melakukan backup data dan log lengkap.

Saya telah menemukan beberapa posting dengan situasi yang sangat mirip, dan solusi yang diberikan adalah dengan mengatur Penerbitan dan Distribusi replikasi dan kemudian menghapusnya lagi. Namun, karena ini Edisi Ekspres, opsi-opsi ini bahkan tidak muncul untuk saya.

Kami terutama toko Linux dan ini satu-satunya contoh SQL Server yang kami punya. Jika semuanya gagal mendapatkan lisensi nyata mungkin satu-satunya jalan kita: untuk mengembalikan cadangan ke instance non-Ekspres dan mencoba mengatur kemudian menghapus Publikasi, lalu akhirnya mengembalikan kembali ke Express.

Sammitch
sumber

Jawaban:

5

Solusi untuk memulihkan database yang diterbitkan

Kami menghadapi masalah yang sama: Database yang diterbitkan disimpan di Server1. Setiap hari database ini akan dicadangkan dan dipulihkan pada Server2.

  • Kami sering mendapat pesan kesalahan:

    LOG penuh karena REPLIKASI

  • log_reuse_wait_descdiatur ke REPLICATION.
  • Replikasi tidak dapat dihapus, karena database ini tidak dipublikasikan di Server2.

Larutan

Setelah memulihkan database, aktifkan publikasi dan hapus:

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'
Matthias Elflein
sumber
1

Apakah bisa menerima downtime pada database ini? Ini mungkin dipulihkan dari database yang direplikasi atau mungkin pelanggan yang dihapus secara tidak benar, meskipun itu tidak mungkin. Anda dapat mencoba melakukan backup dari express dan mengembalikan ke edisi standar atau lebih tinggi kemudian mengatur replikasi lagi dan menghapusnya. Kemudian Anda dapat membuat cadangan dari standar dan mengembalikan ke ekspres. Selama Anda tidak mengaktifkan fitur apa pun pada basis data sementara pada edisi yang lebih tinggi, seharusnya tidak ada masalah penurunan peringkat. Anda dapat menguji ini sebelum penghentian aktual untuk memastikannya akan menghapus status dan skrip semuanya untuk meminimalkan waktu henti. Jika Anda tidak memiliki server lain yang dapat Anda gunakan, ambil salinan evaluasi dan instal di mesin lokal Anda, VM, mesin asli jika dapat diterima, atau di mana pun Anda dapat menemukan.

Your_comment_is_not_funny
sumber
Waktu henti bukanlah masalah yang signifikan dengan basis data karena hanya menjalankan pembaruan / lisensi server yang terpusat untuk AV kami. [Juga turun selama beberapa hari sebelum saya perhatikan] Namun, seperti yang saya sebutkan di komentar, kami terutama toko Linux dan ini adalah satu-satunya contoh MSSQL kami. Juga cadangannya 180GB +, jadi mengirimkannya ke penyedia eksternal juga bukan pilihan.
Sammitch
Anda dapat menginstal contoh lain pada kotak yang sama dan mengembalikan cadangan dari basis data itu, jika diizinkan. Atau, Anda dapat mengambil cadangan dan kemudian melepaskan database dari express dan melampirkan ke salinan evaluasi dan mencoba untuk mengatur / menghapus publikasi. Kasus terburuk, Anda mengacaukan yang asli dan harus menjatuhkannya dan mengembalikan cadangan. Kasus terbaik, itu berfungsi, Anda lepaskan dari evaluasi dan pasang kembali untuk mengekspresikan dan kemudian uninstall evaluasi.
Your_comment_is_not_funny
1

Sudahkah Anda mencoba mengatur basis data agar tidak menerbitkan?

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

dan kemudian mencadangkan log untuk melihat apa yang terjadi?

Sunting 1: Apa yang dikembalikan oleh t-sql berikut?

-- 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
Pixelated
sumber
1

Saya memiliki masalah yang sama persis. SQL Express DB tidak pernah menjadi bagian dari replikasi. Di masa lalu itu diperbaiki dengan beberapa perintah checkdb DBCC. Dan pada suatu waktu kami menemukan itu

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

telah menunjukkan "REPLICATION" sebagai alasan dan logfile berkembang.

Kami menghapus replikasi menggunakan tsql ini:

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

exec sp_removedbreplication @db

Itu menyelesaikannya dan kami dapat mengecilkan log.

baitronic
sumber
0

Saya akan mencoba yang berikut:

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

Setelah itu Anda bisa mencoba menambahkan replikasi dan menghapus replikasi untuk tabel individual dalam database seperti yang disarankan dalam posting lebih jauh ke bawah.

Kami memiliki database pada satu waktu yang beralih ke mode replikasi meskipun distribusi dan replikasi belum diatur pada SQL Server.

Saya tidak dapat menemukan skrip asli yang saya gunakan untuk masalah saya, jadi saya menjalankan pencarian dan menemukan entri ini di MSDN:

log_reuse_wait_desc = replikasi, log transaksi tidak akan berhenti tumbuh

Ada beberapa penyebab root yang tidak spesifik untuk masalah ini dan itu terjadi di seluruh dunia.

Perburuan yang bagus!

John alias hot2use
sumber
-1

Jika Anda sudah mencoba yang lain, mungkin itu mungkin (pastikan Anda memiliki cadangan yang baik terlebih dahulu!) Untuk melepaskan database, mengganti nama file log (sehingga SQL Server tidak dapat menemukannya) dan kemudian melampirkan kembali database. Saya percaya ini akan memaksa SQL Server untuk membuat file log baru. Apakah itu juga akan berhenti berpikir bahwa basis data direplikasi saya tidak tahu, tetapi tampaknya paling tidak mungkin.

paH
sumber