Nhật ký giao dịch sẽ không bị thu hẹp, DB nghĩ rằng nó đang được sao chép


13

Tôi đã có cơ sở dữ liệu SQL Server 2008 R2 Express chạy Kaspersky Security Center và tôi không biết tình huống cài đặt đã xảy ra trong trường hợp nào, nhưng cơ sở dữ liệu dường như nghĩ rằng nó đang được sao chép và sẽ không giải phóng bất kỳ khoảng trống nào khỏi nhật ký giao dịch. ví dụ:

USE master;

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

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

trả về:

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

Ngoài ra không có gì được liệt kê trong Replicationphần trong SSMS.

Cho đến nay tôi đã thử một vài tuyên bố lượm lặt được từ kết quả của Google:

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

Nhưng tôi đã không gặp may trong việc khiến DB này ngừng nghĩ rằng nó đang được nhân rộng.

sys.databasesThông tin đầy đủ :

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

Cũng thế:

DBCC OPENTRAN;
No active open transactions.

DBCC SQLPERF(LOGSPACE);
KAV 171066  99.55339    0

EXEC sp_replcounters;
KAV 0   0   0   0x00000000000000000000  0x00000000000000000000

Tôi cũng vừa thực hiện đầy đủ dữ liệu và sao lưu nhật ký.

Tôi đã chạy qua một vài bài đăng với các tình huống rất giống nhau và giải pháp được đưa ra là thiết lập Sao chép và Phân phối sao chép rồi xóa lại. Tuy nhiên, đây là Express Edition, các tùy chọn này thậm chí không xuất hiện cho tôi.

Chúng tôi chủ yếu là một cửa hàng Linux và đây là phiên bản SQL Server duy nhất chúng tôi có. Nếu tất cả những thứ khác không nhận được giấy phép thực sự có thể là lời đề nghị duy nhất của chúng tôi: khôi phục bản sao lưu thành một phiên bản không phải Express và cố gắng thiết lập sau đó xóa Ấn phẩm, sau đó khôi phục lại về Express.

Câu trả lời:


5

Giải pháp khôi phục cơ sở dữ liệu đã xuất bản

Chúng tôi đã gặp phải một vấn đề tương tự: Một cơ sở dữ liệu được xuất bản được lưu trữ trên Server1. Mỗi ngày cơ sở dữ liệu này sẽ được sao lưu và khôi phục trên Server2.

  • Chúng tôi thường xuyên nhận được thông báo lỗi:

    Đăng nhập đầy đủ do REPLICATION

  • log_reuse_wait_descđã được đặt thành REPLICATION.
  • Không thể xóa bản sao, vì cơ sở dữ liệu này không được công bố trên Server2.

Giải pháp

Sau khi khôi phục cơ sở dữ liệu cho phép xuất bản và xóa nó:

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

Có thể chấp nhận để có thời gian chết trên cơ sở dữ liệu này? Điều này có thể được khôi phục từ cơ sở dữ liệu sao chép hoặc có thể là thuê bao bị xóa không đúng cách, mặc dù điều đó là không thể. Bạn có thể thử thực hiện sao lưu từ express và khôi phục thành phiên bản tiêu chuẩn hoặc cao hơn sau đó thiết lập lại bản sao và xóa nó. Sau đó, bạn có thể sao lưu từ tiêu chuẩn và khôi phục để thể hiện. Miễn là bạn không kích hoạt bất kỳ tính năng nào trên cơ sở dữ liệu trong khi ở phiên bản cao hơn, sẽ không có vấn đề hạ cấp. Bạn có thể kiểm tra điều này trước khi ngừng hoạt động thực tế để đảm bảo nó sẽ xóa trạng thái và kịch bản tất cả để giảm thiểu thời gian chết. Nếu bạn không có máy chủ khác mà bạn có thể sử dụng, hãy lấy bản đánh giá và cài đặt trên máy cục bộ của bạn, VM, máy ban đầu nếu có thể chấp nhận được hoặc bất cứ nơi nào bạn có thể tìm thấy.


Thời gian chết không phải là một vấn đề quan trọng với cơ sở dữ liệu vì nó chỉ đơn giản là chạy một máy chủ cấp phép / cập nhật tập trung cho AV của chúng tôi. [Ngoài ra, tôi đã nhận thấy một vài ngày trước khi tôi nhận thấy] Tuy nhiên, như tôi đã đề cập trong các bình luận, chúng tôi chủ yếu là một cửa hàng Linux và đây là ví dụ MSSQL duy nhất của chúng tôi. Ngoài ra, bản sao lưu là 180GB +, do đó, việc gửi nó cho nhà cung cấp bên ngoài cũng không phải là một lựa chọn.
Sammitch

Bạn có thể cài đặt một thể hiện khác trên cùng một hộp và khôi phục bản sao lưu của cơ sở dữ liệu đó, cho phép không gian. Ngoài ra, bạn có thể sao lưu và sau đó tách cơ sở dữ liệu khỏi express và đính kèm vào bản đánh giá và cố gắng thiết lập / xóa một ấn phẩm. Trường hợp xấu nhất, bạn làm hỏng bản gốc và phải bỏ nó và khôi phục bản sao lưu. Trường hợp tốt nhất, nó hoạt động, bạn tách ra khỏi đánh giá và gắn lại để thể hiện và sau đó gỡ cài đặt đánh giá.
Your_comment_is_not_funny

1

Bạn đã thử thiết lập cơ sở dữ liệu để không xuất bản?

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

và sau đó sao lưu nhật ký để xem điều gì xảy ra?

Chỉnh sửa 1: Điều gì sau đây trả lại 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

Tôi đã có vấn đề chính xác cùng. SQL Express DB không bao giờ là một phần của bản sao. Trong quá khứ, nó đã được sửa chữa với một số lệnh checkdb DBCC. Và đôi lúc chúng tôi phát hiện ra rằng

SELECT name, log_reuse_wait_desc 
FROM sys.databases 

đã cho thấy "REPLICATION" là lý do và logfile đang phát triển.

Chúng tôi đã xóa bản sao bằng cách sử dụng tsql này:

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

exec sp_removedbreplication @db

Điều đó đã giải quyết nó và chúng tôi có thể thu nhỏ nhật ký.


0

Tôi sẽ thử như sau:

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

Sau đó, bạn có thể thử thêm một bản sao và loại bỏ một bản sao cho một bảng riêng lẻ trong cơ sở dữ liệu như được đề xuất trong bài viết tiếp theo.

Chúng tôi đã có một cơ sở dữ liệu cùng một lúc chuyển sang chế độ sao chép mặc dù phân phối và sao chép chưa được thiết lập trên Máy chủ SQL.

Tôi không thể tìm thấy tập lệnh gốc mà tôi đã sử dụng cho vấn đề của mình, vì vậy tôi đã chạy một tìm kiếm và tìm thấy mục này tại MSDN:

log_Vuse_wait_desc = sao chép, nhật ký giao dịch sẽ không ngừng phát triển

Có một số nguyên nhân gốc rễ không đặc hiệu cho vấn đề này và nó xảy ra trên toàn thế giới.

Tốt săn bắn!


-1

Nếu bạn đã thử mọi thứ khác thì có lẽ điều đó là có thể (trước tiên hãy đảm bảo bạn có một bản sao lưu tốt!) Để tách cơ sở dữ liệu, đổi tên tệp nhật ký (để SQL Server có thể tìm thấy nó) và sau đó đính kèm lại cơ sở dữ liệu. Tôi tin rằng điều này sẽ buộc SQL Server tạo một tệp nhật ký mới. Cho dù nó cũng sẽ ngừng nghĩ rằng cơ sở dữ liệu được sao chép, tôi không biết, nhưng có vẻ như ít nhất là có thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.