El registro de transacciones no se reducirá, DB cree que se está replicando


13

Tengo una base de datos SQL Server 2008 R2 Express que ejecuta Kaspersky Security Center, y no tengo idea en qué circunstancias ocurrió la instalación, pero la base de datos parece pensar que se está replicando y no liberará espacio del registro de transacciones. p.ej:

USE master;

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

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

devoluciones:

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

Además, no hay nada en la Replicationsección de SSMS.

Hasta ahora he probado un par de declaraciones obtenidas de los resultados de Google:

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

Pero no he tenido suerte en hacer que este DB deje de pensar que está siendo replicado.

sys.databasesInformación completa :

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

También:

DBCC OPENTRAN;
No active open transactions.

DBCC SQLPERF(LOGSPACE);
KAV 171066  99.55339    0

EXEC sp_replcounters;
KAV 0   0   0   0x00000000000000000000  0x00000000000000000000

También acabo de realizar copias de seguridad completas de datos y registros.

Me he encontrado con algunas publicaciones con situaciones muy similares, y la solución dada fue configurar la publicación y distribución de replicación y luego eliminarla nuevamente. Sin embargo, al tratarse de la Edición Express, estas opciones ni siquiera aparecen para mí.

Somos principalmente una tienda de Linux y esta es la única instancia de SQL Server que tenemos. Si todo lo demás falla, obtener una licencia real podría ser nuestro único recurso: restaurar una copia de seguridad en una instancia que no sea Express e intentar configurar, luego eliminar una Publicación y finalmente restaurar nuevamente a Express.

Respuestas:


5

Solución para restaurar una base de datos publicada

Nos enfrentamos a un problema similar: una base de datos publicada se almacena en el Servidor1. Todos los días esta base de datos será respaldada y restaurada en el Servidor2.

  • Frecuentemente recibimos mensajes de error:

    REGISTRO lleno debido a REPLICACIÓN

  • log_reuse_wait_descse estableció en REPLICATION.
  • La replicación no se pudo eliminar porque esta base de datos no se publicó en Server2.

Solución

Después de restaurar la base de datos, habilite la publicación y elimínela:

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

¿Es aceptable tener tiempo de inactividad en esta base de datos? Esto probablemente se restauró desde una base de datos replicada o posiblemente fue un suscriptor que se eliminó incorrectamente, aunque eso es poco probable. Puede intentar hacer una copia de seguridad desde express y restaurar a una edición estándar o superior y luego configurar la replicación nuevamente y eliminarla. Luego puede hacer una copia de seguridad desde el estándar y restaurar a express. Siempre que no habilite ninguna función en la base de datos mientras esté en la edición superior, no debería haber un problema de degradación. Puede probar esto antes de una interrupción real para asegurarse de que eliminará el estado y redactará todo para minimizar el tiempo de inactividad. Si no tiene otro servidor que pueda usar, tome la copia de evaluación e instálela en su máquina local, una VM, la máquina original, si es aceptable, o en cualquier lugar que pueda encontrar.


El tiempo de inactividad no es un problema importante con la base de datos, ya que simplemente ejecuta un servidor centralizado de actualización / licencia para nuestro AV. [También estuvo inactivo durante unos días antes de darme cuenta] Sin embargo, como mencioné en los comentarios, somos principalmente una tienda de Linux y esta es nuestra única instancia de MSSQL. Además, la copia de seguridad es de 180 GB o más, por lo que enviarlo a un proveedor externo tampoco es una opción.
Sammitch

Puede instalar otra instancia en el mismo cuadro y restaurar la copia de seguridad de esa base de datos, si el espacio lo permite. Alternativamente, puede hacer una copia de seguridad y luego separar la base de datos de express y adjuntarla a la copia de evaluación e intentar configurar / eliminar una publicación. En el peor de los casos, arruinas el original y tienes que soltarlo y restaurar la copia de seguridad. El mejor de los casos, funciona, se desconecta de la evaluación y se vuelve a conectar para expresar y luego desinstalar la evaluación.
Your_comment_is_not_funny

1

¿Has intentado configurar la base de datos para que no se publique?

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

y luego haciendo una copia de seguridad del registro para ver qué sucede?

Edición 1: ¿Qué devuelve el siguiente 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

Yo tuve exactamente el mismo problema. El SQL Express DB nunca fue parte de una replicación. En el pasado fue reparado con algunos comandos DBCC checkdb. Y en algún momento descubrimos que

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

ha mostrado "REPLICACIÓN" como razón y el archivo de registro está creciendo.

Eliminamos la replicación usando este tsql:

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

exec sp_removedbreplication @db

Eso lo resolvió y pudimos reducir el registro.


0

Intentaría lo siguiente:

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

Después de lo cual podría intentar agregar una replicación y eliminar una replicación para una tabla individual en la base de datos como se sugiere en la publicación más abajo.

Tuvimos una base de datos que cambió al modo de replicación a pesar de que la distribución y la replicación no se habían configurado en el servidor SQL.

No pude encontrar el script original que había usado para mi problema, así que realicé una búsqueda y encontré esta entrada en MSDN:

log_reuse_wait_desc = replicación, el registro de transacciones no dejará de crecer

Hay una causa raíz inespecífica para este problema y ocurre en todo el mundo.

¡Buena caza!


-1

Si ha intentado todo lo demás, entonces quizás sea posible (¡asegúrese de tener una buena copia de seguridad primero!) Para separar la base de datos, cambiar el nombre del archivo de registro (para que SQL Server no pueda encontrarlo) y luego volver a adjuntar la base de datos. Creo que esto obligará a SQL Server a crear un nuevo archivo de registro. No sé si también dejará de pensar que la base de datos está replicada, pero al menos parece posible.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.