MS SQL சேவையகத்தின் புதிய பதிப்பிலிருந்து பழைய பதிப்பிற்கு காப்புப் பிரதி தரவை மாற்றுகிறது

முன்வரலாறு

ஒருமுறை, ஒரு பிழையை மீண்டும் உருவாக்க, எனக்கு தயாரிப்பு தரவுத்தளத்தின் காப்புப்பிரதி தேவைப்பட்டது.

எனக்கு ஆச்சரியமாக, நான் பின்வரும் வரம்புகளுக்குள் நுழைந்தேன்:

  1. தரவுத்தள காப்புப்பிரதி பதிப்பில் செய்யப்பட்டது SQL சேவையகம் 2016 மற்றும் என்னுடன் ஒத்துப்போகவில்லை SQL சேவையகம் 2014.
  2. எனது பணி கணினியில், பயன்படுத்தப்பட்ட OS விண்டோஸ் 7அதனால் என்னால் புதுப்பிக்க முடியவில்லை SQL சர்வர் பதிப்பு 2016 வரை
  3. ஆதரிக்கப்படும் தயாரிப்பு, இறுக்கமாக இணைக்கப்பட்ட மரபுக் கட்டமைப்பைக் கொண்ட பெரிய அமைப்பின் ஒரு பகுதியாகும், மேலும் பிற தயாரிப்புகள் மற்றும் தளங்களுடனும் பேசப்பட்டது, எனவே அதை மற்றொரு நிலையத்திற்கு அனுப்புவதற்கு மிக நீண்ட நேரம் ஆகலாம்.

மேற்கூறியவற்றைக் கருத்தில் கொண்டு, தரமற்ற தீர்வுகளின் ஊன்றுகோலுக்கான நேரம் வந்துவிட்டது என்ற முடிவுக்கு வந்தேன்.

காப்புப்பிரதியிலிருந்து தரவை மீட்டமைத்தல்

நான் ஒரு மெய்நிகர் இயந்திரத்தைப் பயன்படுத்தத் தேர்ந்தெடுத்தேன் ஆரக்கிள் வி.எம் விர்ச்சுவல் பாக்ஸ் விண்டோஸ் 10 உடன் (எட்ஜ் உலாவிக்கான சோதனைப் படத்தை நீங்கள் எடுக்கலாம் இங்கிருந்து) SQL சர்வர் 2016 மெய்நிகர் கணினியில் நிறுவப்பட்டது மற்றும் பயன்பாட்டு தரவுத்தளம் காப்புப்பிரதியிலிருந்து மீட்டமைக்கப்பட்டது (அறிவுறுத்தல்).

மெய்நிகர் கணினியில் SQL சேவையகத்திற்கான அணுகலை உள்ளமைக்கிறது

அடுத்து, வெளியில் இருந்து SQL சேவையகத்தை அணுக சில நடவடிக்கைகளை எடுக்க வேண்டியது அவசியம்:

  1. ஃபயர்வாலுக்கு, போர்ட் கோரிக்கைகளைத் தவிர்க்க ஒரு விதியைச் சேர்க்கவும் 1433.
  2. சேவையகத்திற்கான அணுகல் விண்டோஸ் அங்கீகாரம் மூலம் செல்லாமல், உள்நுழைவு மற்றும் கடவுச்சொல்லைப் பயன்படுத்தி SQL மூலம் செல்ல விரும்பத்தக்கது (அணுகலை அமைப்பது எளிது). இருப்பினும், இந்த விஷயத்தில், SQL சர்வர் பண்புகளில் SQL அங்கீகாரத்தை இயக்க நினைவில் கொள்ள வேண்டும்.
  3. தாவலில் SQL சர்வரில் பயனர் அமைப்புகளில் பயனர் மேப்பிங் மீட்டெடுக்கப்பட்ட தரவுத்தளத்திற்கான பயனர் பங்கைக் குறிப்பிடவும் db_securityadmin.

தரவு பரிமாற்ற

உண்மையில், தரவு பரிமாற்றம் இரண்டு நிலைகளைக் கொண்டுள்ளது:

  1. டேட்டா ஸ்கீமா பரிமாற்றம் (அட்டவணைகள், காட்சிகள், சேமிக்கப்பட்ட நடைமுறைகள் போன்றவை)
  2. தரவை தானே மாற்றுகிறது

டேட்டா ஸ்கீமா பரிமாற்றம்

பின்வரும் செயல்பாடுகளை நாங்கள் செய்கிறோம்:

  1. நாம் தேர்வு செய்கிறோம் பணிகள் -> ஸ்கிரிப்ட்களை உருவாக்கவும் ஒரு சிறிய தளத்திற்கு.
  2. நீங்கள் மாற்ற வேண்டிய பொருள்களைத் தேர்ந்தெடுக்கவும் அல்லது இயல்புநிலை மதிப்பை விட்டு வெளியேறவும் (இந்த வழக்கில், அனைத்து தரவுத்தள பொருள்களுக்கும் ஸ்கிரிப்டுகள் உருவாக்கப்படும்).
  3. ஸ்கிரிப்டைச் சேமிப்பதற்கான அமைப்புகளைக் குறிப்பிடவும். ஸ்கிரிப்டை ஒரு யூனிகோட் கோப்பில் சேமிப்பது மிகவும் வசதியானது. பின்னர், தோல்வி ஏற்பட்டால், நீங்கள் அனைத்து படிகளையும் மீண்டும் செய்ய வேண்டியதில்லை.

ஸ்கிரிப்ட் சேமிக்கப்பட்டதும், தேவையான தளத்தை உருவாக்க அசல் SQL சர்வரில் (பழைய பதிப்பு) இயக்கலாம்.

எச்சரிக்கை: ஸ்கிரிப்டை இயக்கிய பிறகு, காப்புப்பிரதியிலிருந்து தரவுத்தளத்தின் அமைப்புகளுக்கும் ஸ்கிரிப்ட் உருவாக்கிய தரவுத்தளத்திற்கும் இடையிலான கடிதத்தை நீங்கள் சரிபார்க்க வேண்டும். என் விஷயத்தில், ஸ்கிரிப்ட்டில் COLLATE க்கு எந்த அமைப்பும் இல்லை, இது தரவை மாற்றும் போது தோல்விக்கு வழிவகுத்தது மற்றும் கூடுதல் ஸ்கிரிப்டைப் பயன்படுத்தி தரவுத்தளத்தை மீண்டும் உருவாக்க ஒரு டம்போரைனுடன் நடனமாடியது.

தரவு பரிமாற்ற

தரவை மாற்றுவதற்கு முன், தரவுத்தளத்தில் உள்ள அனைத்து கட்டுப்பாடுகளின் சரிபார்ப்பை நீங்கள் முடக்க வேண்டும்:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

தரவு இறக்குமதி வழிகாட்டியைப் பயன்படுத்தி தரவு பரிமாற்றம் மேற்கொள்ளப்படுகிறது பணிகள் -> தரவு இறக்குமதி ஸ்கிரிப்ட் மூலம் உருவாக்கப்பட்ட தரவுத்தளம் அமைந்துள்ள SQL சர்வரில்:

  1. மூலத்திற்கான இணைப்பு அமைப்புகளைக் குறிப்பிடவும் (மெய்நிகர் கணினியில் SQL சர்வர் 2016). நான் தரவு மூலத்தைப் பயன்படுத்தினேன் SQL சர்வர் நேட்டிவ் கிளையண்ட் மற்றும் மேற்கூறிய SQL அங்கீகாரம்.
  2. இலக்குக்கான இணைப்பு அமைப்புகளைக் குறிப்பிடவும் (ஹோஸ்ட் கணினியில் SQL சர்வர் 2014).
  3. அடுத்து, வரைபடத்தை அமைக்கவும். அனைத்தும் தேர்ந்தெடுக்கப்பட வேண்டும் படிக்க மட்டும் அல்ல பொருள்கள் (உதாரணமாக, காட்சிகள் தேர்ந்தெடுக்கப்பட வேண்டியதில்லை). கூடுதல் விருப்பங்களாக, தேர்ந்தெடுக்கவும் "அடையாள நெடுவரிசைகளில் செருக அனுமதி"அப்படி பயன்படுத்தினால்.
    எச்சரிக்கை: பல அட்டவணைகளைத் தேர்ந்தெடுத்து அவற்றின் சொத்தை அமைக்க முயற்சிக்கும்போது "அடையாள நெடுவரிசைகளில் செருக அனுமதி" தேர்ந்தெடுக்கப்பட்ட அட்டவணைகளில் குறைந்தபட்சம் ஒரு அட்டவணைக்கு சொத்து ஏற்கனவே அமைக்கப்பட்டுள்ளது, தேர்ந்தெடுக்கப்பட்ட அனைத்து அட்டவணைகளுக்கும் சொத்து ஏற்கனவே அமைக்கப்பட்டிருப்பதை உரையாடல் குறிக்கும். இந்த உண்மை குழப்பம் மற்றும் இடம்பெயர்வு பிழைகளுக்கு வழிவகுக்கும்.
  4. நாங்கள் பரிமாற்றத்தைத் தொடங்குகிறோம்.
  5. தடைச் சரிபார்ப்பை மீட்டமைத்தல்:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

ஏதேனும் பிழைகள் ஏற்பட்டால், அமைப்புகளைச் சரிபார்த்து, பிழைகளுடன் உருவாக்கப்பட்ட தரவுத்தளத்தை நீக்கி, ஸ்கிரிப்டிலிருந்து மீண்டும் உருவாக்கி, திருத்தங்களைச் செய்து தரவு பரிமாற்றத்தை மீண்டும் செய்கிறோம்.

முடிவுக்கு

இந்த பணி மிகவும் அரிதானது மற்றும் மேலே உள்ள வரம்புகள் காரணமாக மட்டுமே நிகழ்கிறது. பயன்பாட்டு கட்டமைப்பு அனுமதித்தால், SQL சேவையகத்தை மேம்படுத்துவது அல்லது தொலை சேவையகத்துடன் இணைப்பது மிகவும் பொதுவான தீர்வாகும். இருப்பினும், மரபுக் குறியீடு மற்றும் மோசமான தரம் வாய்ந்த வளர்ச்சியின் வளைந்த கைகளில் இருந்து யாரும் விடுபடவில்லை. உங்களுக்கு இந்த அறிவுறுத்தல் தேவையில்லை என்று நம்புகிறேன், ஆனால் உங்களுக்கு இன்னும் தேவைப்பட்டால், அது நிறைய நேரத்தையும் நரம்புகளையும் சேமிக்க உதவும். உங்கள் கவனத்திற்கு நன்றி!

பயன்படுத்தப்பட்ட ஆதாரங்களின் பட்டியல்

ஆதாரம்: www.habr.com