Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर 2014:मूल बैकअप एन्क्रिप्शन

SQL सर्वर 2014 में एक नई सुविधा जिसके बारे में आप में से कई लोगों ने तब तक नहीं सुना था जब तक कि इस सप्ताह PASS शिखर सम्मेलन में इसकी घोषणा नहीं की गई थी, मानक, व्यावसायिक खुफिया और एंटरप्राइज़ संस्करणों में मूल बैकअप एन्क्रिप्शन है (क्षमा करें, वेब और एक्सप्रेस समर्थित नहीं हैं)। यह कुछ ऐसा है जो तीसरे पक्ष के विक्रेता लंबे समय से पेश कर रहे हैं, और यह अंततः उत्पाद में अपना रास्ता बनाता है, चार एन्क्रिप्शन एल्गोरिदम का समर्थन करता है:एईएस 128, एईएस 192, एईएस 256, और ट्रिपल डेस (3 डीईएस)।

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

पी.एस. आप अभी CTP2 डाउनलोड कर सकते हैं।

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

इसलिए, मैंने AdventureWorks2012 डेटा फ़ाइल डाउनलोड की, दो प्रतियां बनाईं, उनका नाम awSSD.mdf रखा। और awHDD.mdf , और एक को RAID 1 ड्राइव (D:\) पर और एक को SSD ड्राइव (E:\) पर रखा। फिर मैंने दोनों को FOR ATTACH_REBUILD_LOG . के साथ जोड़ा , उन्हें FULL . पर सेट करें पुनर्प्राप्ति, डिफ़ॉल्ट ऑटो-ग्रोथ सेटिंग्स को बदल दिया, और बीच में लॉग फ़ाइलों के लिए डिफ़ॉल्ट स्थान सेट किया (क्योंकि यह एकमात्र तरीका है जिसके बारे में मुझे पता है कि मैं पुनर्निर्मित लॉग फ़ाइल का स्थान निर्दिष्ट करता हूं):

उपयोग [मास्टर];जाओ EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'D:\CTP2_Data';GO DATABASE awHDD ON बनाएं (फ़ाइल नाम='D:\CTP2_Data\awHDD.mdf') ATTACH_REBUILD_LOG के लिए; ALTER DATABASE awHDD SET पुनर्प्राप्ति पूर्ण; वैकल्पिक डेटाबेस awHDD संशोधित फ़ाइल (NAME =N'AdventureWorks2012_Data', FILEGROWTH =512000KB); वैकल्पिक डेटाबेस awHDD संशोधित फ़ाइल (NAME =N'AdventureWorks2012_regAL_CHINstance', NAME =N'AdventureWorks2012_regAL_CHMALGO'); , N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'E:\CTP2_Data'; ATTACH_REBUILD_LOG के लिए awSSD ON (फ़ाइल नाम ='E:\CTP2_Data\awSSD.mdf') डेटाबेस बनाएं; ALTER DATABASE awSSD SET पुनर्प्राप्ति पूर्ण; वैकल्पिक डेटाबेस awSSD संशोधित फ़ाइल (NAME =N'AdventureWorks2012_Data', FILEGROWTH =512000KB); वैकल्पिक डेटाबेस awSSD संशोधित फ़ाइल (NAME =N'AdventureWorks2012_Log');
N'AdventureWorks2012_Log',

इसके बाद, मैंने जोनाथन केहैयस की इस स्क्रिप्ट का उपयोग करके उन्हें बड़ा किया (ताकि डेटाबेस और लॉग दोनों अर्थपूर्ण होने के लिए पर्याप्त हों)। इसमें HDD और SSD दोनों पर प्रति डेटाबेस लगभग 4 मिनट का समय लगा।

उस समय, EXEC sp_helpfile; प्रत्येक डेटाबेस के लिए निम्नलिखित प्राप्त हुए:

नाम फाइलिड फाइलनाम साइज ------------------------------------------- ----AdventureWorks2012_Data 1 .mdf 1553408 KBAdventureWorks2012_Log 2 .ldf 5605504 KB

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

 मास्टर का उपयोग करें; पासवर्ड द्वारा मास्टर कुंजी एन्क्रिप्शन बनाएं ='p@ssw0rd';पासवर्ड द्वारा GOOPEN मास्टर कुंजी डिक्रिप्शन ='p@ssw0rd';GOCREATE सर्टिफिकेट टेस्ट सर्टिफिकेट विषय के साथ ='एन्क्रिप्शन ; 

यदि आप किसी ऐसे प्रमाणपत्र का उपयोग करके एन्क्रिप्टेड बैकअप बनाने का प्रयास करते हैं जिसका स्वयं बैकअप नहीं लिया गया है, तो आपको एक चेतावनी भी मिलती है:

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

मेरे मामले में मैं इस तरह से प्रमाणपत्र और मास्टर कुंजी का बैकअप ले सकता था:

बैकअप सर्टिफिकेट टेस्टकर्ट टू फाइल ='सी:\temp\TestCert.cert' निजी कुंजी के साथ ( FILE ='C:\temp\TestCert.key', एन्क्रिप्शन द्वारा पासवर्ड ='p@ssw0rd'); फ़ाइल के लिए बैकअप मास्टर कुंजी ='C:\temp\MasterKey.key' पासवर्ड द्वारा एन्क्रिप्शन ='p@ssw0rd';

कड़ाई से बोलते हुए, एन्क्रिप्टेड बैकअप (या यहां तक ​​​​कि चेतावनी से बचने के लिए) करने के लिए मास्टर कुंजी का बैक अप लेना आवश्यक नहीं है, लेकिन आपको इसे वैसे भी बैक अप लेना चाहिए। और आप शायद p@ssw0rd . से अधिक मजबूत पासवर्ड का उपयोग करना चाहेंगे , इसे सी के अलावा कहीं और स्टोर करें:उसी मशीन पर ड्राइव करें, आदि। अंत में, आपको ध्यान रखना चाहिए कि यदि आप अपने बैकअप को एन्क्रिप्ट करते हैं और आप सभी सही सावधानी नहीं बरतते हैं, तो वे आपदा की स्थिति में बेकार हो सकते हैं। . यह एक ऐसी सुविधा नहीं है जिसे आपको उचित मात्रा में परिश्रम और परीक्षण के बिना चालू करना चाहिए।

उस सब के साथ, मैं परीक्षण के साथ आगे बढ़ सकता था। इस प्रणाली में केवल एक प्लेट-आधारित डिस्क और एक एकल एसएसडी है, इसलिए मैं एसएसडी -> विभिन्न एसएसडी या एचडीडी -> विभिन्न एचडीडी का परीक्षण नहीं कर सका; केवल एक से दूसरे में या एक ही ड्राइव पर बैकअप लेना। एन्क्रिप्शन के साथ बैकअप लेने का मूल सिंटैक्स है:

बैकअप डेटाबेस ... एनक्रिप्शन के साथ (एल्गोरिथम =<एल्गोरिदम>, सर्वर सर्टिफिकेट =<प्रमाणपत्र>);

और <algorithm> . के लिए चार संभावित मान हैं AES_128 , AES_192 , AES_256 और TRIPLE_DES_3KEY

इसलिए, अगला, मैंने विभिन्न संयोजनों के प्रदर्शन और आकार की तुलना करने के लिए बैकअप चलाने के लिए स्क्रिप्ट तैयार की - चार अलग-अलग एन्क्रिप्शन एल्गोरिदम (और कोई एन्क्रिप्शन नहीं), संपीड़न के साथ और बिना, जहां डेटा (एचडीडी या एसएसडी) से आता है और कहां डेटा का बैकअप (HDD या SSD) तक है। यह 40 अलग-अलग बैकअप हैं, और इसे बनाने के लिए मैं जिस स्क्रिप्ट का उपयोग करता था वह इस तरह दिखती है:

घोषणा @sql NVARCHAR(MAX) =N'';;एस (एस) एएस के साथ (सेलेक्ट 1 यूनियन ऑल सेलेक्ट 2), एम एएस (सेलेक्ट एम फ्रॉम (वैल्यूज('एईएस_128'),('एईएस_192'),('एईएस_256'),('ट्रिपल_डीईएस_3की'),(नल )) एएस एम (एम)), सी एएस (सेलेक्ट सी (मूल्य ('NO_COMPRESSION'), ('संपीड़न')) एएस सी (सी)), डी एएस (चुनें डी, टी से (मूल्य ('डी') ,'HDD'),('E','SSD')) AS d(d,t)) @sql +=N'BACKUP DATABASE aw' चुनें + केस जब 1 तब 'HDD' और 'SSD' END + ' TO DISK =''' + d + ':\backup\' + n + '.bak'' INIT के साथ, '+ c +',' + COALESCE(' EnNCRYPTION (ALGORITHM =' + m + ', सर्वर सर्टिफिकेट) =टेस्टकर्ट),', '') + 'नाम =''' + एन + ''';' से (चुनें *, n ='परीक्षण' + कन्वर्ट (VARCHAR (8000), अधिकार ('0' + RTRIM (आर), 2)) + '-' + COALESCE (एम, 'NO_ENCRYPTION') + '-' + मामला जब r <11 तब 'HDD' ELSE 'SSD' END + '-to-' + t + '-' + c FROM (सेलेक्ट *, r =ROW_NUMBER() ओवर (s.s,m.m,c.c द्वारा d.d ऑर्डर द्वारा विभाजन) ) एस क्रॉस जॉइन एम क्रॉस जॉइन सी क्रॉस जॉइन डी) एक्स के रूप में) आर द्वारा वाई ऑर्डर के रूप में; --EXEC sp_executesql @sql;--गो 10 सेलेक्ट कन्वर्ट (XML, @sql);

वास्तव में जटिल लग रहा है, लेकिन वास्तव में यह सिर्फ 40 BACKUP DATABASE उत्पन्न कर रहा है तार। मैं एक्सएमएल के रूप में चयन करता हूं ताकि, जब आप ग्रिड में परिणामों पर क्लिक करते हैं, तो आप पूरे आउटपुट को देख सकते हैं - इसके बजाय PRINT या आउटपुट को ग्रिड/टेक्स्ट में चुनने से आप सीमित हो जाएंगे। इस मामले में आउटपुट नीचे है (दिखाने/छिपाने के लिए क्लिक करें):

डिस्क के लिए बैकअप डेटाबेस awHDD ='D:\backup\test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION.bak' INIT, COMPRESSION, NAME ='test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION' के साथ; बैकअप डेटाबेस awHDD to DISK ='E:\backup\test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION.bak' INIT, COMPRESSION, NAME ='test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION' के साथ; बैकअप डेटा डिस्क के लिए ='ई:\ बैकअप \ test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION'; डिस्क के लिए बैकअप डेटा =HDD 'D:\backup\test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION'; बैकअप डेटाबेस awHDD टू डिस्क ='डिस्क के लिए बैकअप डेटाबेस:\backup\test03-AES_128-HDD-to-HDD-COMPRESSION.bak' INIT, कंप्रेशन, एनक्रिप्शन के साथ (ALGORITHM =AES_128, सर्वर सर्टिफिकेट =TestCert), NAME ='test03-AES_128-HDD-to-HDD-COMPRESSION'; बैकअप डेटाबेस awHDD टू डिस्क ='E:\backup\test03-AES_128-HDD-to-SSD-COMPRESSIO N.bak' INIT, कंप्रेशन, एनक्रिप्शन के साथ (ALGORITHM =AES_128, सर्वर सर्टिफिकेट =TestCert), NAME ='test03-AES_128-HDD-to-SSD-COMPRESSION'; बैकअप डेटाबेस awHDD to DISK ='E:\backup\test04 -AES_128-HDD-to-SSD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, सर्वर सर्टिफिकेट =TestCert), NAME ='test04-AES_128-HDD TO-SSD-NO_COMPRESSION'; डिस्क ='D:\backup\test04-AES_128-HDD-to-HDD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, सर्वर सर्टिफिकेट =TestCert), NAME ='test04-AES_128-HDD-to- HDD-NO_COMPRESSION'; बैकअप डेटाबेस awHDD से DISK ='D:\backup\test05-AES_192-HDD-to-HDD-COMPRESSION.bak' INIT, COMPRESSION, Encryption (ALGORITHM =AES_192, सर्वर सर्टिफिकेट) के साथ, NAME =टेस्ट सर्टिफिकेट 'test05-AES_192-HDD-to-HDD-COMPRESSION'; BACKUP DATABASE awHDD to DISK ='E:\backup\test05-AES_192-HDD-to-SSD-COMPRESSION.bak' INIT, कंप्रेशन, एनक्रिप्शन (ALGORITHM =AES_192) के साथ , सर्वर सर्टिफिकेट =टेस्ट सर्टिफिकेट) , NAME ='test05-AES_192-HDD-to-SSD-COMPRESSION'; BACKUP DATABASE awHDD to DISK ='E:\backup\test06-AES_192-HDD-to-SSD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION ( ALGORITHM =AES_192, सर्वर प्रमाणपत्र =TestCert), NAME ='test06-AES_192-HDD-to-SSD-NO_COMPRESSION'; बैकअप डेटाबेस awHDD से DISK ='D:\backup\test06-AES_192-HDD-to-HDD-NO_COMPRESSION. bak' INIT के साथ, NO_COMPRESSION, एन्क्रिप्शन (ALGORITHM =AES_192, सर्वर प्रमाणपत्र =TestCert), NAME ='test06-AES_192-HDD-to-HDD-NO_COMPRESSION'; BACKUP DATABASE awHDD to DISK ='D:\backup\ -HDD-to-HDD-COMPRESSION.bak' के साथ INIT, कंप्रेशन, एनक्रिप्शन (ALGORITHM =AES_256, सर्वर सर्टिफिकेट =TestCert), NAME ='test07-AES_256-HDD-to-HDD-COMPRESSION'; बैकअप डेटाबेस में HDD awd 'E:\backup\test07-AES_256-HDD-to-SSD-COMPRESSION.bak' के साथ INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, सर्वर सर्टिफिकेट =TestCert), NAME ='test07-AES_256-HDD-to-SSD- COMPRESSION'; बैकअप डेटाबेस awHDD से DISK ='E:\backup\te st08-AES_256-HDD-to-SSD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, सर्वर सर्टिफिकेट =TestCert), NAME ='test08-AES_256-HDD-to-SSD-NO_COMPRESSION'; टू डिस्क ='D:\backup\test08-AES_256-HDD-to-HDD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, सर्वर सर्टिफिकेट =TestCert), NAME ='test08-AES_256-HDD-to -HDD-NO_COMPRESSION'; BACKUP DATABASE awHDD to DISK ='D:\backup\test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION.bak' INIT, COMPRESSION, ENCRIFICATE =TestCertHM =TRIPLE_DES_3 के साथ ='test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION'; BACKUP DATABASE awHDD to DISK ='E:\backup\test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION.bak' INIT, COMPRESSION (ALGORIPTM=bak' with INIT, COMPRESSION (ALGORIPTM) TRIPLE_DES_3KEY, सर्वर सर्टिफिकेट =टेस्ट सर्टिफिकेट), NAME ='test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION'; बैकअप डेटाबेस awHDD to DISK ='E:\backup\test10-TRIPLE_DES_3KEY-HDD-to-SSD- .bak' के साथ INIT, NO_COMPRESSION, EnNCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test10-TRIPLE_DES_3KEY-HDD-to-SSD-NO_COMPRESSION10'; बैकअप डेटाबेस awHDD परीक्षण डिस्क awHDD डेटाबेस awHDD TRIPLE_DES_3KEY-HDD-to-HDD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, सर्वर सर्टिफिकेट =टेस्ट सर्टिफिकेट), NAME ='test10-TRIPLE_DES-SE_HDSSD TOPRESSION'; ='D:\backup\test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION.bak' INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION' के साथ; डिस्क के लिए बैकअप डेटाबेस awSSD ='ई :\backup\test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION.bak' INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION' के साथ; बैकअप डेटाबेस awSSD to DISK ='E:\backup \test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION'; BACKUP DATABASE awSSD to DISK ='D:\backup\backup\ NO_ENCRYPTION-S SD-to-HDD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-HDD-NO_COMPRESSION'; बैकअप डेटाबेस awSSD to DISK ='D:\backup\test13-AES_128-SSD-to -HDD-COMPRESSION.bak' INIT के साथ, संपीड़न, एन्क्रिप्शन (एल्गोरिथम =AES_128, सर्वर प्रमाणपत्र =TestCert), NAME ='test13-AES_128-SSD-to-HDD-संपीड़न'; बैकअप डेटाबेस awSSD to DISK ='डिस्क के लिए बैकअप डेटाबेस बैकअप\test13-AES_128-SSD-to-SSD-COMPRESSION.bak' INIT के साथ, संपीड़न, एन्क्रिप्शन (ALGORITHM =AES_128, सर्वर प्रमाणपत्र =TestCert), NAME ='test13-AES_128-SSD-to-SSD-संपीड़न'; बैकअप DATABASE awSSD to DISK ='E:\backup\test14-AES_128-SSD-to-SSD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, सर्वर सर्टिफिकेट =TestCert), NAME ='test14-A -to-SSD-NO_COMPRESSION'; बैकअप डेटाबेस awSSD to DISK ='D:\backup\test14-AES_128-SSD-to-HDD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, एन्क्रिप्शन (ALGORITHM =AES_128, सर्वर) =टेस्टर , NAME ='test14-AES_128-SSD-to-H DD-NO_COMPRESSION'; बैकअप डेटाबेस awSSD से DISK ='D:\backup\test15-AES_192-SSD-to-HDD-COMPRESSION.bak' INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, सर्वर सर्टिफिकेट) के साथ, NAME =टेस्ट 'test15-AES_192-SSD-to-HDD-COMPRESSION'; BACKUP DATABASE awSSD to DISK ='E:\backup\test15-AES_192-SSD-to-SSD-COMPRESSION.bak' INIT, कंप्रेशन, एनक्रिप्शन (ALGORITHM =AES_192) के साथ , सर्वर प्रमाणपत्र =टेस्टकर्ट), NAME ='test15-AES_192-SSD-to-SSD-COMPRESSION'; बैकअप डेटाबेस awSSD से DISK ='E:\backup\test16-AES_192-SSD-to-SSD-NO_COMPRESSION.bak' के साथ INIT, NO_COMPRESSION, एन्क्रिप्शन (ALGORITHM =AES_192, सर्वर सर्टिफिकेट =टेस्ट सर्टिफिकेट), NAME ='test16-AES_192-SSD-to-SSD-NO_COMPRESSION'; बैकअप डेटाबेस awSSD to DISK ='D:\backup\-test16-AES_1 to-HDD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, सर्वर सर्टिफिकेट =TestCert), NAME ='test16-AES_192-SSD-to-HDD-NO_COMPRESSION'; बैकअप डेटाबेस awSSD:\बैकअप\test17-AES_256-SSD-to-HDD-COMPRE SSION.bak' INIT, कंप्रेशन, एनक्रिप्शन के साथ (ALGORITHM =AES_256, सर्वर सर्टिफिकेट =TestCert), NAME ='test17-AES_256-SSD-to-HDD-COMPRESSION'; बैकअप डेटाबेस awSSD to DISK\test17 ='E:\backup -AES_256-SSD-to-SSD-COMPRESSION.bak' INIT के साथ, संपीड़न, एन्क्रिप्शन (ALGORITHM =AES_256, सर्वर प्रमाणपत्र =TestCert), NAME ='test17-AES_256-SSD-to-SSD-संपीड़न'; बैकअप डेटाबेस डिस्क ='ई:\ बैकअप \ test18-AES_256-SSD-to-SSD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, एन्क्रिप्शन (ALGORITHM =AES_256, सर्वर प्रमाणपत्र =TestCert), NAME ='test18-AES_256-SSD-to- SSD-NO_COMPRESSION'; BACKUP DATABASE awSSD to DISK ='D:\backup\test18-AES_256-SSD-to-HDD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, सर्वर सर्टिफिकेट), NAME =AES_256, सर्वर सर्टिफिकेट), 'test18-AES_256-SSD-to-HDD-NO_COMPRESSION'; BACKUP DATABASE awSSD to DISK ='D:\backup\test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION.bak' INIT के साथ, KEYPRESSION, ENCRYPTION =(ALGOPLEDES_3 , सर्वर सेर TIFICATE =TestCert), NAME ='test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION'; BACKUP DATABASE awSSD to DISK ='E:\backup\test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSION.bak,' INIT के साथ संपीड़न, एन्क्रिप्शन (ALGORITHM =TRIPLE_DES_3KEY, सर्वर प्रमाणपत्र =टेस्टकर्ट), NAME ='test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSION'; TRIBUP DATABASE awSSD to DISK ='E:_PLE_DES_DESD-to-test SSD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, एन्क्रिप्शन (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test20-TRIPLE_DES_3KEY-SSD-to-SSD-NO_COMPRESSION'; \test20-TRIPLE_DES_3KEY-SSD-to-HDD-NO_COMPRESSION.bak' INIT के साथ, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, सर्वर सर्टिफिकेट =टेस्ट सर्टिफिकेट), NAME ='test20-TRIPLE_DES-to-कोम_3 पूर्व> 

मुझे इन समय के लिए कुछ विशेष करने की आवश्यकता नहीं थी, क्योंकि मैं एमएसडीबी डेटाबेस से सभी प्रासंगिक आंकड़े खींच सकता था (केवल नकारात्मक पक्ष यह है कि अवधि केवल सेकंड की ग्रैन्युलैरिटी तक मापी जाती है, जब तक कि मैं नहीं चाहता आउटपुट को मैन्युअल रूप से पार्स करने के लिए)। इसलिए मैंने EXEC sp_executesql . पर टिप्पणी नहीं की और GO लाइनें (मैं औसत प्राप्त करने के लिए प्रत्येक बैकअप को 10 बार चलाना चाहता था, विसंगतियों को दूर करना, आदि), F5 मारा, और PASS शिखर सम्मेलन के लिए अपने एक सत्र पर काम करने के लिए चला गया।

जब मैं वापस आया, तो मैंने प्रत्येक बैकअप के लिए आकार/अवधि प्राप्त करने के लिए msdb तालिकाओं की जाँच की। यह प्रश्न काफी सरल है:

; एक्स एएस के साथ (नाम चुनें, प्राकृतिक_साइज =बैकअप_साइज/1024/1024.0, संपीड़ित_साइज =संपीड़ित_बैकअप_साइज/1024/1024.0, अवधि =1.0 * DATEDIFF (दूसरा, बैकअप_स्टार्ट_डेट, बैकअप_फिनिश_डेट) msdb.dbo.backupset से जहां नाम पसंद है 'परीक्षण %') नाम चुनें, [नेचुरल_साइज़] =MAX (नेचुरल_साइज़), [संपीड़ित_साइज़] =MAX (संपीड़ित_साइज़), [min_duration] =MIN (अवधि), [max_duration] =MAX (अवधि), [avg_duration] =AVG (अवधि) x ग्रुप बाय नेमऑर्डर बाय नाम;

यह मुझे कुछ सुंदर चार्ट बनाने के लिए आवश्यक डेटा देगा।

आकार पर प्रभाव

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

अंतिम परिणाम यह है कि यह चार्ट बहुत रोमांचक नहीं है। चार अलग-अलग एन्क्रिप्शन विधियों के खिलाफ देशी बैकअप के संकुचित और गैर-संपीड़ित आकार:


एन्क्रिप्शन के साथ और बिना बैकअप के एमबी में आकार उन्हें>

जैसा कि आप देख सकते हैं, डेटाबेस के आकार पर लगभग शून्य प्रभाव पड़ा - गैर-संपीड़ित बैकअप के लिए लगभग 0.03% बढ़ा हुआ आकार, और एक संपीड़ित बैकअप के लिए अतिरिक्त 0.04%।

प्रदर्शन पर प्रभाव

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


विभिन्न बैकअप की औसत अवधि, सेकेंडों में

मुझे वास्तव में उम्मीद थी कि एन्क्रिप्शन हमेशा एक प्रदर्शन हिट का कारण बनेगा, और आपको यह देखने के लिए अपने वातावरण में परीक्षण करना चाहिए कि क्या आपके परिणाम मेरे से अलग हैं। मैं वापस आने जा रहा हूं और एक नए चार्ट के साथ इसे अपडेट करूंगा जो विशेष मामलों को दिखा रहा है जो मेरे लिए आश्चर्यजनक थे, और यह सुनिश्चित करने के लिए कि परिणाम वास्तव में प्रतिनिधि हैं, कुछ बाहरी मूल्यों को हटा दें।

एक चेतावनी

एक महत्वपूर्ण नोट:आप एन्क्रिप्टेड बैकअप नहीं जोड़ सकते। यदि आप WITH INIT . का उपयोग करके एक एन्क्रिप्टेड बैकअप फ़ाइल जेनरेट करते हैं , और फिर उसी फ़ाइल में एक और एन्क्रिप्टेड बैकअप जोड़ने का प्रयास करें, आपको यह त्रुटि प्राप्त होगी:

संदेश 3095, स्तर 16, राज्य 1, पंक्ति 11
बैकअप नहीं किया जा सकता क्योंकि मीडिया को एक असंगत संरचना के साथ स्वरूपित करने के बाद 'एनक्रिप्शन' का अनुरोध किया गया था। इस मीडिया सेट में जोड़ने के लिए, या तो 'एन्क्रिप्‍शन' को छोड़ दें या अपने बैकअप स्‍टेटमेंट में FORMAT के साथ का उपयोग करके एक नया मीडिया सेट बनाएं। यदि आप किसी मौजूदा मीडिया सेट पर FORMAT के साथ उपयोग करते हैं, तो इसके सभी बैकअप सेट ओवरराइट हो जाएंगे।
Msg 3013, Level 16, State 1, Line 11
BACKUP DATABASE असामान्य रूप से समाप्त हो रहा है।

आप भ्रमित रूप से एक गैर . जोड़ सकते हैं एन्क्रिप्टेड बैकअप जब प्रारंभिक फ़ाइल एन्क्रिप्ट की गई थी। यह इरादा नहीं है, और यह एक बग है जिसकी मैंने Connect पर रिपोर्ट की है (#805220, लेकिन इसे वर्तमान में निजी के रूप में चिह्नित किया गया है); उम्मीद है कि वे आरटीएम से पहले इसे संबोधित करेंगे।

इस बीच, आपको यहां सावधान रहना होगा क्योंकि RESTORE HEADERONLY के बारे में कुछ भी नहीं बदला गया है आउटपुट यह इंगित करने के लिए कि क्या कोई संलग्न बैकअप एन्क्रिप्ट किया गया था। इसे खोजने के लिए, आपको BackupSetGUID . की जांच करनी होगी उस आउटपुट में मान Position = 1 . पर है , और संबंधित backup_set_uuid . ढूंढें msdb.dbo.backupset में मान . इस तालिका में एन्क्रिप्शन का समर्थन करने के लिए नए कॉलम हैं, जहां आप यह जानकारी प्राप्त कर सकते हैं:key_algorithm , encryptor_thumbprint , और encryptor_type . यह उन मामलों में समस्याग्रस्त है जहां आपके पास backupset . नहीं है डेटा - हो सकता है कि रखरखाव कार्यों के दौरान इसे हटा दिया गया हो, या हो सकता है कि आप इसे एक्सेस नहीं कर सकते क्योंकि आप वास्तव में किसी आपदा से उबर रहे हैं या केवल .bak फ़ाइल है (या अन्य कारणों से केवल .bak फ़ाइल है)। इस मामले में मैं उम्मीद कर रहा हूं कि बैकअप फ़ाइल से यह बताने का कोई और तरीका है कि इसे एन्क्रिप्ट किया गया है (और कैसे), लेकिन लिखने के समय मुझे कोई तरीका नहीं पता है। मैंने एक सुझाव (#805292, निजी भी) दायर किया कि RESTORE HEADERONLY का आउटपुट एन्क्रिप्शन जानकारी के साथ उसी तरह संवर्धित किया जाना चाहिए जिस तरह से इसे संपीड़न जानकारी के साथ संवर्धित किया गया था जब उस सुविधा को SQL Server 2008 में जोड़ा गया था।

जब वे इन मुद्दों को हल कर लेंगे (और मुझे विश्वास है कि वे करेंगे), तो मैं इस शोर को दूर कर दूंगा, लेकिन इस बीच इस बारे में जागरूक होना महत्वपूर्ण है, अगर आप वर्तमान सीटीपी के साथ कोई परीक्षण करने जा रहे हैं।

अगला आगे...

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दिनांक रूपांतरण और संस्कृति:DATE और DATETIME के ​​बीच का अंतर

  2. SQL डेटा को एक टेबल से दूसरी टेबल पर ले जाएं

  3. निकाय ढांचे का उपयोग करके संग्रहीत कार्यविधि निष्पादित करें

  4. विशिष्ट अभिलेखों पर PIVOT क्वेरी

  5. इनर जॉइन के अलावा तीन टेबल जॉइन के साथ जुड़ते हैं