लेन-देन लॉग हटना नहीं होगा, डीबी को लगता है कि यह प्रतिकृति है


13

मुझे Kaspersky Security Center चलाने वाला SQL Server 2008 R2 एक्सप्रेस डेटाबेस मिला है, और मुझे पता नहीं है कि किन परिस्थितियों में इंस्टॉल हुआ है, लेकिन डेटाबेस को लगता है कि यह दोहराया जा रहा है और लेनदेन लॉग से किसी भी स्थान को मुक्त नहीं करेगा। उदाहरण के लिए:

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

मैंने केवल पूर्ण डेटा और लॉग बैकअप भी किया है।

मैं के साथ कुछ पदों के पार चला गया है बहुत इसी तरह की परिस्थितियों, और समाधान दिया प्रतिकृति प्रकाशन और वितरित स्थापित करने के लिए और उसे फिर से हटाने था। हालाँकि, यह एक्सप्रेस संस्करण है, ये विकल्प मेरे लिए भी दिखाई नहीं देते हैं।

हम मुख्य रूप से एक लिनक्स दुकान हैं और यह एकमात्र SQL सर्वर उदाहरण है जो हमें मिला है। यदि बाकी सभी लाइसेंस प्राप्त करने में विफल रहता है, तो हमारा एकमात्र सहारा हो सकता है: किसी गैर-एक्सप्रेस उदाहरण के लिए बैकअप को पुनर्स्थापित करने और सेटअप करने का प्रयास करें और फिर एक प्रकाशन को हटा दें, फिर अंत में वापस एक्सप्रेस में पुनर्स्थापित करें।

जवाबों:


5

प्रकाशित डेटाबेस को पुनर्स्थापित करने के लिए समाधान

हमें एक समान समस्या का सामना करना पड़ा: एक प्रकाशित डेटाबेस सर्वर 1 पर संग्रहीत है। हर दिन इस डेटाबेस को बैकअप लिया जाएगा और सर्वर 2 पर बहाल किया जाएगा।

  • हमें अक्सर त्रुटि संदेश मिला:

    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

क्या इस डेटाबेस में डाउनटाइम होना स्वीकार्य है? यह शायद या तो एक प्रतिकृति डेटाबेस से बहाल किया गया था या यह संभवतः एक ग्राहक था जिसे अनुचित तरीके से हटा दिया गया था, हालांकि यह संभावना नहीं है। आप एक्सप्रेस से बैकअप लेने की कोशिश कर सकते हैं और एक मानक या उच्चतर संस्करण को पुनर्स्थापित कर सकते हैं और फिर से प्रतिकृति स्थापित कर सकते हैं और इसे हटा सकते हैं। फिर आप मानक से बैकअप ले सकते हैं और व्यक्त करने के लिए पुनर्स्थापित कर सकते हैं। जब तक आप उच्च संस्करण में रहते हुए डेटाबेस पर कोई भी सुविधा सक्षम नहीं करते, तब तक डाउनग्रेडिंग में कोई समस्या नहीं होनी चाहिए। आप यह सुनिश्चित करने के लिए वास्तविक आउटेज से पहले इसका परीक्षण कर सकते हैं कि यह स्थिति को हटा देगा और स्क्रिप्ट को डाउनटाइम को कम करने के लिए इसे पूरा करेगा। यदि आपके पास एक और सर्वर नहीं है जिसका आप उपयोग कर सकते हैं, तो मूल्यांकन कॉपी को पकड़ो और अपने स्थानीय मशीन, एक वीएम, मूल मशीन पर स्थापित करें यदि यह स्वीकार्य है, या कहीं भी आप पा सकते हैं।


डाउनटाइम डेटाबेस के साथ एक महत्वपूर्ण मुद्दा नहीं है क्योंकि यह केवल हमारे एवी के लिए एक केंद्रीकृत अपडेट / लाइसेंसिंग सर्वर चला रहा है। [इसके अलावा यह कुछ दिनों के लिए नीचे था इससे पहले कि मैंने देखा] हालांकि, जैसा कि मैंने टिप्पणियों में उल्लेख किया है, हम मुख्य रूप से एक लिनक्स की दुकान हैं और यह हमारा एकमात्र MSSQL उदाहरण है। इसके अलावा बैकअप 180GB + है, इसलिए इसे बाहरी प्रदाता को शिपिंग करना एक विकल्प भी नहीं है।
सेमिच

आप उसी बॉक्स पर एक और इंस्टेंस स्थापित कर सकते हैं और उस डेटाबेस, स्पेस परमिशनिंग के बैकअप को पुनर्स्थापित कर सकते हैं। वैकल्पिक रूप से, आप बैकअप ले सकते हैं और फिर डेटाबेस को एक्सप्रेस से अलग कर सकते हैं और मूल्यांकन प्रति संलग्न कर सकते हैं और एक प्रकाशन को सेटअप / हटाने का प्रयास कर सकते हैं। सबसे खराब स्थिति, आप मूल को खराब कर देते हैं और इसे छोड़ देना पड़ता है और बैकअप को पुनर्स्थापित करना होता है। सबसे अच्छा मामला, यह काम करता है, आप मूल्यांकन और रीटच से व्यक्त करने और फिर मूल्यांकन की स्थापना रद्द करें।
Your_comment_is_not_funny

1

क्या आपने प्रकाशित नहीं करने के लिए डेटाबेस सेट करने की कोशिश की है?

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

और फिर लॉग इन करने के बाद यह देखने के लिए कि क्या होता है?

संपादित करें 1: निम्नलिखित टी-एसक्यूएल क्या देता है?

-- 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 एक्सप्रेस DB कभी एक प्रतिकृति का हिस्सा नहीं था। पूर्व में इसकी मरम्मत कुछ DBCC चेकडब कमांडों के साथ की गई थी। और किसी समय हमने यह खोज की थी

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 सर्वर पर सेटअप नहीं किया गया था।

मुझे वह मूल स्क्रिप्ट नहीं मिली जिसका मैंने अपने मुद्दे के लिए उपयोग किया था, इसलिए मैंने एक खोज चलाई और MSDN पर इस प्रविष्टि में आया:

log_reuse_wait_desc = प्रतिकृति, लेनदेन लॉग बढ़ना बंद नहीं होगा

इस मुद्दे के लिए कुछ अनिर्णायक मूल कारण है और यह पूरी दुनिया में होता है।

अच्छे शिकार!


-1

यदि आपने बाकी सब कुछ करने की कोशिश की है, तो शायद यह संभव होगा (डेटाबेस को अलग करने के लिए आपके पास पहले एक अच्छा बैकअप है!), लॉग फ़ाइल का नाम बदलें (ताकि SQL सर्वर इसे नहीं पा सके) और फिर डेटाबेस को फिर से संलग्न करें। मेरा मानना ​​है कि यह SQL सर्वर को एक नई लॉग फ़ाइल बनाने के लिए मजबूर करेगा। क्या यह सोचना भी बंद हो जाएगा कि डेटाबेस को दोहराया गया है मुझे कोई पता नहीं है, लेकिन यह कम से कम संभव है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.