Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> डेटाबेस

उसी फ़ाइल समूह में mdf फ़ाइल से ndf फ़ाइल में डेटा माइग्रेट करें

समस्या: टेस्टडीबी डेटाबेस के लिए आईओपीएस समस्या के कारण डेटाबेस अखंडता कार्य विफल हो रहा था जो आकार में 2 टीबी से अधिक है। बड़े फ़ाइल आकार के कारण, डेटाबेस को प्रबंधित करना कठिन होता जा रहा है।

दृष्टिकोण: इसका निवारण करने के लिए, हमने डेटा को 2 डेटा फ़ाइलों के बीच विभाजित करने का निर्णय लिया। तो ड्राइव स्पेस और डेटा फ़ाइल की वर्तमान स्थिति इस प्रकार है:

हमारी डेटा फ़ाइल N:\ ड्राइव में होस्ट की गई है और हम उसी स्थान पर दूसरी फ़ाइल बनाएंगे। हमारा दृष्टिकोण खाली फ़ाइल कमांड का उपयोग करके डेटा स्थानांतरण शुरू करना है और डेटा आंदोलन को बलपूर्वक रोकने के लिए मैन्युअल रूप से क्वेरी को बीच में रोकना है। कृपया ध्यान दें कि बीच में क्वेरी को मैन्युअल रूप से रोकने से डेटाबेस (अखंडता/संगति) पर कोई प्रभाव नहीं पड़ेगा। फिर हम खाली स्थान को पुनः प्राप्त करने के लिए mdf फ़ाइल को छोटा कर देंगे।

समाधान :एकाधिक SQL सर्वर डेटा फ़ाइलों के बीच डेटा को विभाजित करने के लिए नीचे दिए गए चरणों का पालन करें। सबसे पहले, हमें एक द्वितीयक डेटा फ़ाइल जोड़ने की आवश्यकता है जिसमें हम डेटा सम्मिलित करेंगे। इसे ndf (अगली डेटा फ़ाइल) के रूप में जोड़ा जाएगा। TestDB डेटाबेस पर अतिरिक्त डेटा फ़ाइल जोड़ने के लिए स्क्रिप्ट के नीचे चलाएँ

 
USE [master]
GO
ALTER DATABASE [TestDB] ADD FILE ( NAME = N'TestDB_1', FILENAME = 
N'N:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\TestDB_1.ndf' , 
SIZE = 209715200KB , FILEGROWTH = 5242880KB ) TO FILEGROUP [PRIMARY]GO 

एक बार जब आप इस स्क्रिप्ट को निष्पादित करते हैं, तो यह N:\ ड्राइव में TestDB_1 नामक एक नई डेटा फ़ाइल जोड़ देगा और आकार 200 GB होगा (हमने इसे अपने डेटाबेस के संदर्भ में लिया)। हमने फ़ाइल की वृद्धि 5 जीबी निर्धारित की है और डेटाफ़ाइल प्राथमिक फ़ाइल समूह में जोड़ दी जाएगी।

अब, डेटा फ़ाइल जोड़ने के बाद टेस्टडीबी डेटाबेस पर डीबीसीसी खाली फ़ाइल ऑपरेशन शुरू करें। सिंटैक्स होगा:

use YOURDATABASE
go
dbcc shrinkfile(‘mdfFileName’,emptyfile)

तो हमारे मामले में यह होगा:

USE [TestDB]

go

DBCC shrinkfile ('TestDB’,emptyfile)

यहां टेस्टडीबी उस फाइल का तार्किक नाम है जिससे हम डेटा को हटाना चाहते हैं यानी हमारी एमडीएफ फाइल। अब एक बार जब हमने इस ऑपरेशन को शुरू कर दिया, तो हमें ट्रैक रखने की जरूरत है कि डेटा को एमडीएफ से एनडीएफ में कितना स्थानांतरित किया गया है। इसका ट्रैक रखने के लिए आप नीचे दी गई क्वेरी का उपयोग कर सकते हैं:

USE [TestDB]
GO
SELECT
[TYPE] = A.TYPE_DESC
,[FILE_Name] = A.name
,[FILEGROUP_NAME] = fg.name
,[File_Location] = A.PHYSICAL_NAME
,[FILESIZE_MB] = CONVERT(DECIMAL(10,2),A.SIZE/128.0)
,[USEDSPACE_MB] = CONVERT(DECIMAL(10,2),A.SIZE/128.0 - ((SIZE/128.0) - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0))
,[USEDSPACE_%] = CAST((CAST(FILEPROPERTY(A.name, 'SpaceUsed')/128.0 AS DECIMAL(10,2))/CAST(A.size/128.0 AS DECIMAL(10,2)))*100 AS DECIMAL(10,2))
,[FREESPACE_MB] = CONVERT(DECIMAL(10,2),A.SIZE/128.0 - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0)
,[FREESPACE_%] = CONVERT(DECIMAL(10,2),((A.SIZE/128.0 - CAST(FILEPROPERTY(A.NAME, 'SPACEUSED') AS INT)/128.0)/(A.SIZE/128.0))*100)
,[AutoGrow] = 'By ' + CASE is_percent_growth WHEN 0 THEN CAST(growth/128 AS VARCHAR(10)) + ' MB -'
WHEN 1 THEN CAST(growth AS VARCHAR(10)) + '% -' ELSE '' END
+ CASE max_size WHEN 0 THEN 'DISABLED' WHEN -1 THEN ' Unrestricted'
ELSE ' Restricted to ' + CAST(max_size/(128*1024) AS VARCHAR(10)) + ' GB' END
+ CASE is_percent_growth WHEN 1 THEN ' [autogrowth by percent, BAD setting!]' ELSE '' END
FROM sys.database_files A LEFT JOIN sys.filegroups fg ON A.data_space_id = fg.data_space_id
order by A.TYPE desc, A.NAME;

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

DBCC Shrinkfile('TestDB', 1500000) --  

हमें आकार को छोटे टुकड़ों में बदलना होगा

अब हमारा एमडीएफ 2 टीबी था, हम 500 जीबी को एनडीएफ में ले गए, इसलिए 500 जीबी एमडीएफ से पुनः प्राप्त करने योग्य है, जिसे हमने उपरोक्त क्वेरी का उपयोग करके पुनः प्राप्त किया है।

हम डेटा फ़ाइलों के बीच डेटा को स्थानांतरित करने के लिए इस चरण को कई बार दोहरा सकते हैं, हमारे भंडारण के अनुसार मैन्युअल रूप से ऑपरेशन को बीच में रोक सकते हैं और फिर स्थान को पुनः प्राप्त कर सकते हैं।

एमडीएफ पर खाली फ़ाइल का उपयोग करते समय एक बात ध्यान देने योग्य है कि आप फ़ाइल आईडी 1 के साथ प्राथमिक डेटा फ़ाइल की सामग्री को पूरी तरह से खाली नहीं कर पाएंगे। फ़ाइल आईडी संख्या प्राप्त करने के लिए, इस स्क्रिप्ट को चलाएं।

select file_id, name,physical_name from sys.database_files

यहां, इस उदाहरण में, फ़ाइल नाम "मो" है और फ़ाइल_आईडी 1 है। जब आप फ़ाइल मो को खाली करने का प्रयास करते हैं जिसमें file_id 1 है, तो आपको यह त्रुटि संदेश मिलेगा।

ऐसा इसलिए है क्योंकि मूल फ़ाइल में सिस्टम जानकारी है, जिसे खाली नहीं किया जा सकता है। लेकिन, यदि आप अन्य डेटा फ़ाइल "mo2data" पर समान कमांड का प्रयास करते हैं, तो खाली फ़ाइल कमांड सफल होगी।

निष्कर्ष

एक बार जब यह डेटा संचलन गतिविधि पूरी हो जाती है, तो कृपया डेटाबेस रखरखाव कार्य चलाएँ:- अनुक्रमणिका अनुकूलन कार्य- सत्यनिष्ठा जाँच कार्य- पूर्ण डेटाबेस बैकअप कार्य।

कोई भी टिप्पणी करने या प्रश्न पूछने के लिए फीडबैक टैब का उपयोग करें। आप हमारे साथ बातचीत भी शुरू कर सकते हैं।


  1. टेक्स्ट फ़ाइल से एक्सेल में डेटा कैसे आयात करें (3 तरीके)

    कभी-कभी, हमारे पास टेक्स्ट फ़ाइल में हमारा वांछित डेटा हो सकता है। और हमें उस डेटा को Excel . में आयात करने की आवश्यकता है विभिन्न कार्यों को करने के लिए कार्यपुस्तिका। इस लेख में, हम आपको डेटा आयात करने . के सरल लेकिन प्रभावी तरीके दिखाएंगे एक टेक्स्ट फ़ाइल . से एक्सेल . में । उदाहरण के लिए,

  1. XML फ़ाइल से एक्सेल में डेटा कैसे निकालें (2 आसान तरीके)

    इस लेख में, हम एक्सएमएल फ़ाइल से एक्सेल में डेटा निकालना सीखेंगे . XML फॉर्मेट का इस्तेमाल मुख्य रूप से वेब पर डेटा स्टोर करने के लिए किया जाता है। साथ ही, हम इसे अपने सिस्टम पर सेव कर सकते हैं। कभी-कभी, उपयोगकर्ताओं को एक्सेल में एक्सएमएल फ़ाइल से डेटा निकालने की आवश्यकता होती है। आज, हम दिखाएंगे 2

  1. डेटा खोए बिना OS को HDD से SSD में माइग्रेट कैसे करें

    यदि आप सोच रहे हैं कि OS को HDD से SSD में कैसे स्थानांतरित किया जाए, तो हम EaseUS Partition Manager का उपयोग करने का सुझाव देंगे। यह बिना डेटा खोए ओएस को हार्ड डिस्क से एसएसडी में आसानी से स्थानांतरित कर देगा। यदि आपके पास एक कंप्यूटर है जो अब पुराना हो चुका है, लेकिन आप सभी डेटा को अक्षुण्ण रखन