क्या मैं मिरर डेटाबेस पर ट्रांजेक्शन लॉग फ़ाइल को सिकोड़ सकता हूं?


9

यह पिछले प्रश्न का एक अनुवर्ती प्रश्न है कि मैं मुख्य डेटाबेस पर लॉग फ़ाइल को क्यों नहीं सिकोड़ सका।

एक लंबी कहानी को छोटा करने के लिए, मैंने डेटाबेस को मिररिंग सेटअप किया, लेकिन यह सुनिश्चित करना भूल गया कि जो ट्रांजेक्शन लॉग का बैकअप ले रहा था वह फिर से चल रहा था, और ट्रांजेक्शन लॉग लगभग 60GB हो गया।

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

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

ऐसा करने का एक तरीका दर्पण वाले डेटाबेस में विफल होना और वहां सिकुड़न करना होगा। पूरी तरह से गैर-उत्पादन वातावरण में इसका परीक्षण करें ताकि यह सुनिश्चित किया जा सके कि यह आपके द्वारा अपेक्षित व्यवहार है / उम्मीद है।

ऐसा प्रतीत होता है कि लॉग फ़ाइल को मिरर पर सिकोड़ने के अन्य तरीके हो सकते हैं, और यह तरीका जरूरी नहीं कि प्रोडक्शन सर्वर पर सुरक्षित हो।

क्या डेटाबेस मिरर पर लेनदेन लॉग फ़ाइल को सुरक्षित रूप से सिकोड़ने का एक तरीका है?


2
एकमात्र समर्थित तरीका प्रिंसिपल पर फ़ाइल को सिकोड़ना है जो फ़ाइल को दर्पण पर भी सिकोड़ देगा। यदि आपका दर्पण अब प्रिंसिपल के समान नहीं है, तो आप वास्तव में दर्पण को विफल करने का प्रयास नहीं करना चाहते हैं। मिररिंग को तोड़ें, और इसे फिर से बनाएं, जैसा कि आपने अपने पिछले प्रश्न में कहा था।
मैक्स वर्नोन

जवाबों:


6

DBCC SHRINKFILEआदेश प्रतिबिंबित डेटाबेस के लिए प्रिंसिपल से नजर आता हो जाएगा। यहाँ कुछ सबूत है।

प्रिंसिपल पर एक नमूना डेटाबेस बनाएँ:

create database MirroredDb;
go

उसी डेटाबेस से बैकअप के साथ बनाएं NORECOVERY:

restore database MirroredDb
from disk = '\\backupdir\MirroredDb.bak'
with norecovery;
go

अपने मिररिंग सत्र को सेट करें लेकिन आप किस तरह का चुनाव करते हैं।

पर प्रिंसिपल डेटाबेस डेटाबेस फ़ाइल आकार पर नज़र:

use MirroredDb;
go

select
    name,
    size
from sys.database_files;

मेरा परिणाम सेट इस तरह दिखता है:

name            size
MirroredDb      392
MirroredDb_log  104

पर दर्पण डेटाबेस , एक स्नैपशॉट बना सकते हैं और एक ही जानकारी को देखने के:

create database MirroredDbss
on
(
    name = 'MirroredDb',
    filename = 'c:\sqlserver\MirroedDb.ss'
)as snapshot of MirroredDb;

use MirroredDbss;
go

select
    name,
    size
from sys.database_files;

मेरा परिणाम सेट निम्न जैसा दिखता है:

name            size
MirroredDb      392
MirroredDb_log  104

अब प्रिंसिपल डेटाबेस पर ट्रांजैक्शन लॉग फाइल को बढ़ाएं (मैंने इसे 1 जीबी पर लाया):

alter database MirroredDb
modify file
(
    name = MirroredDb_log,
    size = 1GB
);
go

को देखते हुए प्रिंसिपल डेटाबेस के लेन-देन लॉग आकार, अब हम समायोजित आकार देखें:

use MirroredDb;
go

select
    name,
    size
from sys.database_files;

मेरा परिणाम सेट निम्न जैसा दिखता है:

name            size
MirroredDb      392
MirroredDb_log  131072

मिरर किए गए डेटाबेस पर एक और स्नैपशॉट बनाएं , और वहां लेनदेन लॉग फ़ाइल का आकार देखें:

create database MirroredDbss2
on
(
    name = 'MirroredDb',
    filename = 'c:\sqlserver\MirroedDb2.ss'
)as snapshot of MirroredDb;

use MirroredDbss2;
go

select
    name,
    size
from sys.database_files;

मेरा परिणाम सेट निम्न जैसा दिखता है:

name            size
MirroredDb      392
MirroredDb_log  131072

अब मूलधनDBCC SHRINKFILE पर करें :

use MirroredDb;
go

dbcc shrinkfile('MirroredDb_log', 0);
go

select
    name,
    size
from sys.database_files;

मेरा परिणाम सेट निम्नलिखित है:

name            size
MirroredDb      392
MirroredDb_log  104

मिरर किए गए डेटाबेस पर तीसरा और अंतिम स्नैपशॉट बनाएं , और आकार देखें:

create database MirroredDbss3
on
(
    name = 'MirroredDb',
    filename = 'c:\sqlserver\MirroedDb3.ss'
)as snapshot of MirroredDb;

use MirroredDbss3;
go

select
    name,
    size
from sys.database_files;

और मुझे निम्न परिणाम सेट मिले:

name            size
MirroredDb      392
MirroredDb_log  104

तो जैसा कि आप यहाँ देख सकते हैं, DBCC SHRINKFILEकमांड वास्तव में मिरर डेटाबेस में दिखाया गया है।


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

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

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

आशा है अब नहीं। एक बार जब डेटाबेस सस्पेंड / डिस्कनेक्ट हो जाता है और एक लॉग बैकअप प्राइमरी पर निष्पादित हो जाता है, तो आप बिना री-इनिट के मिरर को सिंक में वापस पाने के लिए बहुत अधिक योग्य होते हैं।
जेसन कंबरलैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.