परिचय
डेटाफाइल भौतिक वस्तुएं हैं जो डेटाबेस सिस्टम का सबसे महत्वपूर्ण हिस्सा हैं क्योंकि उनमें वास्तविक डेटा होता है। आप डेटाबेस को डेटा फ़ाइलों के संग्रह के रूप में सोच सकते हैं। एक उदाहरण आपको ऐसी फ़ाइलों को माउंट करने और उन तक पहुँचने का साधन देता है।
यहां, डेटाफ़ाइल्स को प्रबंधित करना यह समझना है कि मौजूदा डेटाफ़ाइलों की निगरानी और उनका आकार कैसे बदला जाए और डेटाबेस से डेटा फ़ाइलों को कैसे जोड़ा या हटाया जाए।
इन कार्यों के लिए टी-एसक्यूएल कोड माइक्रोसॉफ्ट दस्तावेज में मौजूद हैं। हालांकि, इस लेख में, हम उन लोगों के लिए इन फ़ाइलों को प्रबंधित करने की रणनीति पर चर्चा करना चाहते हैं जो अभी भी SQL सर्वर के ऑन-प्रिमाइसेस इंस्टॉलेशन चलाते हैं।
डेटाफ़ाइल प्रकार और संभावित समस्याएं
SQL सर्वर में बनाए गए प्रत्येक नए डेटाबेस के लिए, हमारे पास कम से कम दो फ़ाइलें होनी चाहिए - एक प्राथमिक डेटाफ़ाइल और एक लॉगफ़ाइल।
- प्राथमिक डेटा फ़ाइल में .MDF एक्सटेंशन होता है।
- लॉगफाइल में .LDF एक्सटेंशन है।
- जब हम SQL सर्वर डेटाबेस में डेटाफाइल जोड़ते हैं, तो हम आम तौर पर .NDF एक्सटेंशन का उपयोग करते हैं।
नोट :SQL सर्वर में बिना किसी एक्सटेंशन के डेटाफाइल्स बनाना संभव है, लेकिन यह सबसे अच्छा अभ्यास नहीं है। जब हम इन्हें ऑपरेटिंग सिस्टम स्तर पर देखते हैं तो .mdf, .ndf और .ldf का उपयोग इन फ़ाइलों को अलग करने में मदद करता है।
जाहिर है, जब आप डेटाबेस बनाते हैं तो डेटाफाइल्स बनाई जाती हैं। आप इसे डेटाबेस बनाएं . के साथ कर सकते हैं आज्ञा। हालांकि यह इतना आसान लगता है, आपको संभावित मुद्दों के बारे में पता होना चाहिए।
डेटाबेस और उससे जुड़ी डेटाफ़ाइलें अंततः कितनी बड़ी हो जाती हैं, इस पर निर्भर करते हुए, आपको बैकअप समय और अपने डेटा के बारे में आगे बढ़ने के साथ विखंडन संबंधी समस्याओं और अन्य समस्याओं का सामना करना पड़ सकता है। ऐसा होता है कि डेटाफ़ाइल्स का आकार सही ढंग से नहीं होता है।
नीचे दिए गए दृष्टांत पर एक नज़र डालें। यह CREATE DATABASE को क्रियान्वित करने और डेटाबेस का नाम (MyDB) प्रदान करने का परिणाम दिखाता है।
लिस्टिंग 1 निर्मित डेटाबेस विवरण दिखाता है:
-- Listing 1: Create Database Script
USE [master]
GO
/****** Object: Database [MyDB] Script Date: 29/11/2020 10:38:18 pm ******/
CREATE DATABASE [MyDB]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'MyDB', FILENAME = N'C:\MSSQL\Data\MyDB.mdf' , SIZE = 102400KB , MAXSIZE = UNLIMITED, FILEGROWTH = 131072KB )
LOG ON
( NAME = N'MyDB_log', FILENAME = N'E:\MSSQL\Log\MyDB_log.ldf' , SIZE = 102400KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [MyDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
आपको आश्चर्य हो सकता है कि SQL सर्वर को वे सभी विकल्प कहाँ से मिले, क्योंकि हमने केवल CREATE DATABASE MyDB जारी किया था।
SQL सर्वर उस उदाहरण पर बनाए गए किसी भी नए डेटाबेस के लिए डिफ़ॉल्ट मान के रूप में मॉडल डेटाबेस सेटिंग्स का उपयोग करता है। इस मामले में हम 100MB का प्रारंभिक फ़ाइल आकार देखते हैं। डेटा और लॉग फ़ाइलों के लिए ऑटोग्रोथ क्रमशः 12MB और 64MB है।
आने वाली समस्याएं
चित्र 1 में हाइलाइट की गई सेटिंग्स के निहितार्थ हैं:
- प्राथमिक डेटा फ़ाइल 100MB के आकार से शुरू होती है। यह एक छोटा आकार है। इस प्रकार, डेटाबेस में गतिविधि स्तर के आधार पर, इसे बहुत जल्द बढ़ने की आवश्यकता होगी।
- जब भी ऑटोग्रो की आवश्यकता हो डेटाफ़ाइल, SQL सर्वर को ऑपरेटिंग सिस्टम पर उपलब्ध स्थान से 128MB प्राप्त करने की आवश्यकता है। फिर से, यह छोटा है, जिसका अर्थ है कि डेटाबेस अक्सर स्वत:वृद्धि करेगा . डेटाबेस वृद्धि एक महंगा ऑपरेशन है जो बहुत बार होने पर प्रदर्शन को प्रभावित कर सकता है। इसके अलावा, बार-बार डेटाबेस वृद्धि विखंडन नामक एक घटना का कारण बन सकती है, जो बदले में, डेटाबेस पर गंभीर प्रदर्शन गिरावट का कारण बनती है। इंक्रीमेंट को उच्च मान पर सेट करने के दूसरे चरम के परिणामस्वरूप अंतर्निहित स्टोरेज सिस्टम के प्रदर्शन के आधार पर ग्रोथ ऑपरेशंस को पूरा होने में लंबा समय लग सकता है।
- डेटाबेस फ़ाइलें अनिश्चित काल तक बढ़ सकती हैं। इसका मतलब है, पर्याप्त समय की अनुमति के साथ, ये फ़ाइलें उस वॉल्यूम पर सभी जगह का उपभोग कर सकती हैं जहां वे बैठे हैं। उन्हें स्थानांतरित करने के लिए, आपको उनके आकार या अधिक की मात्रा की आवश्यकता होगी। जब ये फ़ाइलें बैठी हों, तो एक अन्य विकल्प वॉल्यूम में संग्रहण जोड़ रहा है।
डेटाबेस बनाने के लिए डिफ़ॉल्ट मानों के आधार पर ये प्रमुख समस्याएं हैं।
पूर्व आवंटन
विकास के प्रदर्शन प्रभाव को देखते हुए, परियोजना की शुरुआत में डेटाबेस को ठीक से आकार देने के लिए यह अधिक समझ में आता है। इस तरह, हम निकट भविष्य के लिए समाधान आवश्यकताओं को समायोजित करते हैं।
मान लें कि हम जानते हैं कि हमारा डेटाबेस अंततः 1GB आकार का हो जाएगा। प्रोजेक्ट शुरू होने पर हम 1GB स्टोरेज आवंटित कर सकते हैं। फिर, डेटाबेस को कभी भी बढ़ने की जरूरत नहीं है। यह डेटाबेस वृद्धि के कारण होने वाली विखंडन समस्याओं को समाप्त करता है।
लिस्टिंग 2 इस पूर्व-आवंटन: . के लिए लागू स्क्रिप्ट को दिखाती है
-- Listing 2: Create Database Script with Pre-allocation
USE [master]
GO
/****** Object: Database [MyDB] Script Date: 29/11/2020 10:38:18 pm ******/
CREATE DATABASE [MyDB]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'MyDB', FILENAME = N'C:\MSSQL\Data\MyDB.mdf' , SIZE = 1024MB , MAXSIZE = 2048MB, FILEGROWTH = 512MB )
LOG ON
( NAME = N'MyDB_log', FILENAME = N'E:\MSSQL\Log\MyDB_log.ldf' , SIZE = 512MB , MAXSIZE = 2048GB , FILEGROWTH = 512MB )
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [MyDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
हम प्रदर्शन उद्देश्यों के लिए 1GB स्थान का उल्लेख करते हैं। आमतौर पर, एक उत्पादन डेटाबेस को 1TB की आवश्यकता हो सकती है। मुद्दा यह है:शुरुआत में आवश्यक स्थान आवंटित करें। तब आप विकास की आवश्यकता को समाप्त या महत्वपूर्ण रूप से कम कर देते हैं।
अब, हमें अपने आप से पूछना चाहिए कि क्या हम वास्तव में अपने वॉल्यूम पर बैठे हुए एक 1TB फ़ाइल चाहते हैं। इसे छोटे-छोटे टुकड़ों में तोड़ देना ही समझदारी होगी। जब समानांतर संचालन, जैसे कि बैकअप, होते हैं, तो प्रत्येक फ़ाइल को मल्टीप्रोसेसर सिस्टम के लिए एकल CPU थ्रेड द्वारा संबोधित किया जाएगा। एक फ़ाइल के साथ, यह सुचारू रूप से नहीं चलेगा।
फिर से, हम लिस्टिंग 3 में इस आवश्यकता को समायोजित करने के लिए अपनी स्क्रिप्ट को संशोधित करते हैं:
-- Listing 3: Create Database Script with Pre-allocation and
USE [master]
GO
/****** Object: Database [MyDB] Script Date: 29/11/2020 10:38:18 pm ******/
CREATE DATABASE [MyDB]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'MyDB01', FILENAME = N'C:\MSSQL\Data\MyDB01.mdf' , SIZE = 256MB , MAXSIZE = 512MB, FILEGROWTH = 512MB ) ,
( NAME = N'MyDB02', FILENAME = N'C:\MSSQL\Data\MyDB02.ndf' , SIZE = 256MB , MAXSIZE = 512MB, FILEGROWTH = 512MB )
( NAME = N'MyDB03', FILENAME = N'C:\MSSQL\Data\MyDB03.ndf' , SIZE = 256MB , MAXSIZE = 512MB, FILEGROWTH = 512MB ) ,
( NAME = N'MyDB04', FILENAME = N'C:\MSSQL\Data\MyDB04.ndf' , SIZE = 256MB , MAXSIZE = 512MB, FILEGROWTH = 512MB ) ,
( NAME = N'MyDB05', FILENAME = N'C:\MSSQL\Data\MyDB05.ndf' , SIZE = 256MB , MAXSIZE = 512MB, FILEGROWTH = 512MB )
LOG ON
( NAME = N'MyDB_log', FILENAME = N'E:\MSSQL\Log\MyDB_log.ldf' , SIZE = 512MB , MAXSIZE = 2048GB , FILEGROWTH = 512MB )
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [MyDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
अतिरिक्त जानकारी
हमें यह भी उल्लेख करना चाहिए कि लॉग फ़ाइलों के लिए इस दृष्टिकोण का उपयोग करने में कोई मूल्य नहीं है। बात यह है कि, SQL सर्वर हमेशा फाइलों को क्रमिक रूप से लॉग करने के लिए लिखता है। साथ ही, हमने जो नई फ़ाइलें जोड़ी हैं, उनके लिए हमने .ndf एक्सटेंशन का उपयोग किया है।
MAXSIZE क्लॉज सुनिश्चित करता है कि हमारी डेटा फाइलें अनिश्चित काल तक नहीं बढ़ेंगी। हमने प्रत्येक फ़ाइल को एक अलग तार्किक और भौतिक नाम दिया है - NAME खंड फ़ाइल का तार्किक नाम निर्दिष्ट करता है, और FILENAME खंड भौतिक नाम निर्दिष्ट करता है।
बड़े डेटाफ़ाइलों के साथ एक डेटाबेस बनाने में अन्यथा की तुलना में अधिक समय लगेगा। जब तक हम एक आदर्श डेटाबेस संरचना स्थापित नहीं कर लेते हैं, तब तक मेरे लिए पहले एक छोटा डेटाबेस बनाना और फिर फ़ाइलों को आकार देने और जोड़ने के लिए उपयुक्त कमांड के साथ हेरफेर करना अधिक उचित हो सकता है।
स्पष्ट विकल्पों के साथ डेटाबेस बनाकर, हमने इस लेख में पहले उठाई गई तीन चिंताओं का समाधान किया है। चित्र 2 इस दृष्टिकोण का परिणाम दिखाता है:
अब हमारे पास डेटा फ़ाइल वृद्धि की आवश्यकता के बिना एक लंबी अवधि के लिए डेटा वृद्धि को समायोजित करने के लिए ठीक से कॉन्फ़िगर किया गया डेटाबेस है। यह विखंडन के जोखिमों को दूर करता है और बेहतर डेटा फ़ाइल प्रबंधन सुनिश्चित करने में मदद करता है।
डेटा फ़ाइलें प्रबंधित करना
CREATE DATABASE स्टेटमेंट में चार या पाँच डेटाफाइल्स बनाने के बजाय, हम ALTER DATABASE T-SQL स्टेटमेंट के MODIFY और ADD क्लॉज़ का उपयोग कर सकते हैं।
एक बार फिर, हम नीचे सूची 4 में दिखाए गए कथन से शुरू करते हैं। यह 100MB डेटा फ़ाइल और साथ में लॉग फ़ाइल के साथ एकल डेटाबेस बनाता है। हमारा लक्ष्य इस फ़ाइल का विस्तार करके और फिर और फ़ाइलें जोड़कर पूर्व-आवंटन सुनिश्चित करना है।
-- Listing 4: Create Database Script
USE [master]
GO
IF EXISTS (SELECT * FROM sys.databases WHERE name='MyDB')
DROP DATABASE MyDB;
/****** Object: Database [MyDB] Script Date: 29/11/2020 10:38:18 pm ******/
CREATE DATABASE [MyDB]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'MyDB', FILENAME = N'C:\MSSQL\Data\MyDB.mdf' , SIZE = 102400KB , MAXSIZE = UNLIMITED, FILEGROWTH = 131072KB )
LOG ON
( NAME = N'MyDB_log', FILENAME = N'E:\MSSQL\Log\MyDB_log.ldf' , SIZE = 102400KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [MyDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
डेटा फ़ाइलें विस्तृत करें
डेटा फ़ाइल का विस्तार करने वाला T-SQL स्टेटमेंट लिस्टिंग 5 में दिखाया गया है। यह डेटाबेस नाम, फ़ाइल नाम और वांछित प्रारंभिक आकार और वृद्धि को निर्दिष्ट करता है। इस स्थिति में, हम SQL सर्वर को प्रारंभ में 1GB आवंटित करने के लिए सेट करते हैं और फिर बाद के सभी ऑटो विकास के लिए 512MB आवंटित करते हैं।
-- Listing 5: Extend the Primary Datafile
USE [master]
GO
ALTER DATABASE [MyDB] MODIFY FILE ( NAME = N'MyDB', SIZE = 1048576KB , FILEGROWTH = 524288KB )
GO
सूची 6 से पता चलता है कि यदि हम 2GB का MAXSIZE निर्दिष्ट करते हैं तो कोड कैसा दिखेगा:
-- Listing 6: Extend the Primary Datafile with Maximum Size
USE [master]
GO
ALTER DATABASE [MyDB] MODIFY FILE ( NAME = N'MyDB', SIZE = 1048576KB , MAXSIZE = 2097152KB , FILEGROWTH = 524288KB )
GO
अगर हम FILEGROWTH क्लॉज को 0 पर सेट करते हैं, तो हम अपने SQL सर्वर को डेटा फ़ाइल को ऑटोग्रो न करने के लिए सेट करते हैं . इस मामले में, हमें डेटा फ़ाइल को विकसित करने या अन्य फ़ाइलों को जोड़ने के लिए स्पष्ट रूप से आदेश जारी करने की आवश्यकता है।
डेटा फ़ाइलें जोड़ना
लिस्टिंग 7 उस कोड को दिखाती है जिसका उपयोग हम डेटाबेस में एक नई डेटा फ़ाइल जोड़ने के लिए करते हैं। ध्यान दें कि हमें फिर से तार्किक फ़ाइल नाम और भौतिक फ़ाइल नाम निर्दिष्ट करना होगा जिसमें एक पूर्ण पथ शामिल है।
साथ ही, हम भौतिक फ़ाइल को भिन्न वॉल्यूम पर रख सकते हैं। उसके लिए हमें सिर्फ रास्ता बदलने की जरूरत है।
-- Listing 7: Add Data Files to the Primary Filegroup
USE [master]
GO
ALTER DATABASE [MyDB] ADD FILE ( NAME = N'MyDB01', FILENAME = N'C:\MSSQL\Data\MyDB01.ndf' , SIZE = 1048576KB , FILEGROWTH = 524288KB ) TO FILEGROUP [PRIMARY]
GO
डेटा फ़ाइलों का विस्तार और जोड़ना उस परिदृश्य पर भी लागू होता है जहां हम अपने डेटाबेस के लिए ऑटोग्रोथ को अक्षम करना चुनते हैं (चित्र 4 देखें)।
फिर हमें लिस्टिंग 5 या 6 से उपरोक्त कोड का उपयोग करके डेटाबेस को मैन्युअल रूप से विस्तारित करने की आवश्यकता है, या लिस्टिंग 7 के रूप में फाइलें जोड़ने की जरूरत है।
फ़ाइल समूह का उपयोग करना
फ़ाइल समूह हमें डेटा फ़ाइलों के संग्रह को एक साथ प्रबंधित करने देते हैं। हम तार्किक रूप से अलग-अलग डिस्क या अलग-अलग वॉल्यूम पर संग्रहीत कुछ डेटा फ़ाइलों को एक फ़ाइल समूह में समूहित कर सकते हैं। वह फ़ाइलग्रुप टेबल और इंडेक्स और डेटा को स्टोर करने वाली वास्तविक भौतिक फ़ाइलों के बीच एक अमूर्त परत बनाता है।
इसलिए, यदि हम किसी फ़ाइल समूह पर एक तालिका बनाते हैं, तो इस तालिका का डेटा फ़ाइल समूह को निर्दिष्ट सभी डेटा फ़ाइलों में फैल जाता है।
इस बिंदु तक, हम केवल प्राथमिक फ़ाइल समूह के साथ काम कर रहे हैं। लिस्टिंग 8 से पता चलता है कि हम एक नई फाइल कैसे जोड़ सकते हैं MyDB02 प्राथमिक फ़ाइल समूह के अलावा किसी फ़ाइल समूह में।
डेटाबेस संदर्भ को मास्टर पर सेट करने के बाद पहला स्टेटमेंट नया फ़ाइलग्रुप FG01 बनाता है। इसके बाद अगला कथन सूची 7 में उपयोग किए गए विकल्पों के समान विकल्पों के साथ फ़ाइल को इस नए फ़ाइल समूह में जोड़ता है।
-- Listing 8: Add Data Files to the Primary Filegroup
USE [master]
GO
ALTER DATABASE [MyDB] ADD FILEGROUP [FG01]
GO
ALTER DATABASE [MyDB] ADD FILE ( NAME = N'MyDB02', FILENAME = N'C:\MSSQL\Data\MyDB02.ndf' , SIZE = 102400KB , MAXSIZE = 2097152KB , FILEGROWTH = 524288KB ) TO FILEGROUP [FG01]
GO
डेटा फ़ाइलें छोड़ना
चित्र 5 हमारे द्वारा अब तक किए गए कार्यों के परिणाम को दर्शाता है। हमारे पास तीन डेटा फाइलें हैं। उनमें से दो प्राथमिक फ़ाइल समूह में हैं, और तीसरा FG01 फ़ाइल समूह में है।
आइए मान लें कि हमने कुछ गलत किया है, उदाहरण के लिए, गलत फ़ाइल आकार सेट करें। फिर, हम सूची 9 में निम्नलिखित कोड का उपयोग करके फ़ाइल समूह को छोड़ सकते हैं:
-- Listing 9: Drop Data Files
USE [MyDB]
GO
ALTER DATABASE [MyDB] REMOVE FILE [MyDB02]
GO
निष्कर्ष
इस आलेख ने डेटाबेस फ़ाइल प्रकारों, डेटाफ़ाइलों के विकास के कारण संभावित जटिलताओं और समस्या को हल करने के तरीकों की खोज की। साथ ही, हमने डेटा फ़ाइलों को विस्तारित करने और डेटाबेस में नई डेटा फ़ाइलों को जोड़ने के लिए टी-एसक्यूएल कोड की जांच की। हमने फ़ाइल समूहों के उपयोग पर भी ध्यान दिया।
हमारा लक्ष्य यह सुनिश्चित करना है कि जब हम डेटाबेस को परिनियोजित करते हैं, तो हम किसी विशेष एप्लिकेशन के लिए आवश्यक सभी डेटा को संग्रहीत करने के लिए डेटाबेस तैयार करते हैं।
संदर्भ
- डेटाबेस फ़ाइलें और फ़ाइल समूह