Журнал транзакцій не зменшиться, DB вважає, що він копіюється


13

У мене є база даних SQL Server 2008 R2 Express під управлінням Центру безпеки Касперського, і я не маю уявлення, за яких обставин відбулася установка, але, схоже, база даних думає, що вона реплікується і не звільнить жодного місця з журналу транзакцій. наприклад:

USE master;

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

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

повертає:

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

Також у Replicationрозділі SSMS нічого не вказано .

Поки я спробував кілька тверджень, отриманих з результатів Google:

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

Але мені не пощастило отримати цю БД, щоб перестати думати, що вона копіюється.

Повна sys.databasesінформація:

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

Також:

DBCC OPENTRAN;
No active open transactions.

DBCC SQLPERF(LOGSPACE);
KAV 171066  99.55339    0

EXEC sp_replcounters;
KAV 0   0   0   0x00000000000000000000  0x00000000000000000000

Я також щойно виконував резервні копії даних та резервних даних.

Я зіткнувся з декількома публікаціями з дуже схожими ситуаціями, і рішенням було встановити реплікацію Publishing and Distributing, а потім видалити її знову. Однак, будучи Express Edition, ці параметри для мене навіть не з'являються.

Ми в першу чергу є магазином Linux, і це єдиний екземпляр SQL Server у нас. Якщо все інше не вдасться отримати справжню ліцензію, може бути єдиним нашим зверненням: відновити резервну копію до екземпляра, що не експресує, і спробувати встановити, потім видалити публікацію, а потім нарешті відновити назад до Express.

Відповіді:


5

Рішення для відновлення опублікованої бази даних

Ми зіткнулися з подібною проблемою: Опублікована база даних зберігається на Server1. Кожен день ця база буде створюватися в режимі резервного копіювання та відновлення на сервері2.

  • Ми часто отримували повідомлення про помилки:

    ЛОГІЙ повний завдяки ЗАМОВЛЕННЮ

  • log_reuse_wait_descбуло встановлено REPLICATION.
  • Реплікацію неможливо було видалити, оскільки ця база даних не була опублікована на Server2.

Рішення

Після відновлення бази даних увімкніть публікацію та видаліть її:

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

Чи допустимо час простою в цій базі даних? Це, мабуть, або відновлено з реплікуваної бази даних, або, можливо, абонент був неправильно видалений, хоча це малоймовірно. Ви можете спробувати зробити резервну копію з експрес-відновлення та відновити до стандартної чи вищої версії, потім знову встановити реплікацію та видалити її. Тоді ви можете створити резервну копію зі стандартного та відновити до express. Поки ви не ввімкнете жодних функцій у базі даних, перебуваючи у вищій версії, не повинно виникнути проблем із пониженням рівня. Ви можете перевірити це заздалегідь від фактичного виходу з ладу, щоб переконатися, що він видалить стан та все це буде сценарій, щоб мінімізувати час простою. Якщо у вас немає іншого сервера, який ви можете використовувати, візьміть копію оцінки та встановіть на локальну машину, VM, оригінальну машину, якщо вона прийнятна, або де завгодно.


Пробіг не є суттєвою проблемою для бази даних, оскільки вона просто працює з централізованим сервером оновлення / ліцензування для нашого AV. [Крім того, це було знищено кілька днів, перш ніж я помітив] Однак, як я вже згадував у коментарях, ми в першу чергу є магазином Linux, і це наш єдиний екземпляр MSSQL. Крім того, резервна копія становить 180 ГБ +, тому доставка її до зовнішнього постачальника також не є варіантом.
Саммітч

Ви можете встановити інший екземпляр у тому ж вікні та відновити резервну копію цієї бази даних, дозволяючи простір. Крім того, ви можете зробити резервну копію, а потім від'єднати базу даних від експресу та прикласти до копії оцінки та спробувати налаштувати / видалити публікацію. Найгірший випадок, ви викручуєте оригінал і мусите його скинути і відновити резервну копію. У кращому випадку це працює, ви від'єднуєтесь від оцінки та повторно додаєте, щоб висловити та потім видалити оцінку.
Your_comment_is_not_funny

1

Ви намагалися налаштувати базу даних не публікувати?

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

а потім створити резервну копію журналу, щоб побачити, що відбувається?

Редагувати 1: Що повертає наступний 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

У мене було саме таке питання. БД SQL Express ніколи не була частиною реплікації. У минулому вона ремонтувалася за допомогою деяких команд DBCC checkdb. І ми в якийсь час це виявили

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

показав "ЗАМОВЛЕННЯ" як причину та зростання журналу файлів.

Ми видалили реплікацію за допомогою цього tsql:

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

exec sp_removedbreplication @db

Це вирішило це, і ми могли скоротити колоду.


0

Я б спробував таке:

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

Після цього ви можете спробувати додати реплікацію та видалити реплікацію для окремої таблиці в базі даних, як це запропоновано в публікації далі.

Свого часу у нас була база даних, яка перейшла в режим реплікації, навіть якщо розподіл та реплікація не були налаштовані на SQL Server.

Я не зміг знайти оригінальний сценарій, який використав для своєї проблеми, тому я запустив пошук і наткнувся на цей запис у MSDN:

log_reuse_wait_desc = реплікація, журнал транзакцій не припинить зростати

У цій проблемі є певна першопричина, яка трапляється в усьому світі.

Гарного полювання!


-1

Якщо ви спробували все інше, можливо, можливо, можна було б (переконайтесь, що у вас хороша резервна копія!) Від'єднати базу даних, перейменувати файл журналу (так що SQL Server не може його знайти), а потім знову приєднати базу даних. Я вважаю, що це змусить SQL Server створити новий файл журналу. Чи перестане вона думати, що реплікується база даних, я поняття не маю, але, мабуть, це можливо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.