트랜잭션 로그가 축소되지 않고 DB가 복제 중이라고 생각합니다


13

Kaspersky Security Center를 실행하는 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]

또한 ReplicationSSMS 섹션에 아무것도 없습니다 .

지금까지 Google 결과에서 얻은 몇 가지 진술을 시도했습니다.

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

그러나 나는이 DB가 복제되고 있다고 생각하지 않도록 운이 없었습니다.

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

방금 전체 데이터 및 로그 백업을 수행했습니다.

매우 유사한 상황을 가진 몇 개의 게시물을 살펴 봤으며 해결책은 복제 게시 및 배포를 설정 한 다음 다시 제거하는 것입니다. 그러나 이것은 Express Edition이므로 이러한 옵션은 나에게도 나타나지 않습니다.

우리는 주로 Linux 상점이며 이것이 우리가 보유한 유일한 SQL Server 인스턴스입니다. 다른 모든 라이센스가 실제 라이센스를 얻는 데 실패하는 경우 유일한 방법 일 수 있습니다. 즉, Express가 아닌 인스턴스로 백업을 복원하고 설정을 시도한 다음 발행물을 제거한 다음 Express로 다시 복원하십시오.

답변:


5

게시 된 데이터베이스를 복원하기위한 솔루션

비슷한 문제가 발생했습니다. 게시 된 데이터베이스가 Server1에 저장되어 있습니다. 이 데이터베이스는 매일 Server2에서 백업 및 복원됩니다.

  • 자주 오류 메시지가 나타납니다.

    REPLICATION으로 인해 로그가 가득 참

  • 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 인스턴스입니다. 또한 백업은 180GB 이상이므로 외부 공급자에게 배송하는 것도 옵션이 아닙니다.
Sammitch

동일한 상자에 다른 인스턴스를 설치하고 공간을 허용하여 해당 데이터베이스의 백업을 복원 할 수 있습니다. 또는 백업을 수행 한 다음 Express에서 데이터베이스를 분리하고 평가판에 연결하고 게시를 설정 / 제거 할 수 있습니다. 최악의 경우 원본을 망쳐 놓아 버리고 백업을 복원해야합니다. 가장 좋은 경우, 작동합니다. 평가에서 분리 한 후 다시 연결하여 평가를 표현한 다음 제거하십시오.
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 DB는 복제의 일부가 아닙니다. 과거에는 일부 DBCC checkdb 명령으로 복구되었습니다. 그리고 때때로 우리는

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

"REPLICATION"을 이유 ​​및 로그 파일 증가로 표시했습니다.

이 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가 새 로그 파일을 작성해야한다고 생각합니다. 데이터베이스가 복제되었다고 생각하지 않을지는 모르겠지만 적어도 가능해 보입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.