ডেটাবেস রয়েছে কি অসুবিধা?


33

এসকিউএল সার্ভার ২০১২ "অন্তর্ভুক্ত" ডাটাবেসগুলির ধারণাটি প্রবর্তন করে, যেখানে ডাটাবেসের মধ্যে প্রয়োজনীয় সমস্ত কিছু (ভাল, বেশিরভাগই সবকিছু) অন্তর্ভুক্ত থাকে। সার্ভারের মধ্যে ডেটাবেসগুলি সরানোর সময় এটি বড় সুবিধা দেয়। আমি জানতে চাই, তবে নতুন ডেটাবেস ডিজাইনের সময় যদি এটি আমার ডিফল্ট কৌশল হয়।

এমএসডিএন হ'ল ডেটাবেসগুলির বিভিন্ন অসুবিধাগুলি তালিকাভুক্ত করে এবং বড়গুলি হ'ল পরিবর্তন ট্র্যাকিং এবং প্রতিরূপকরণের জন্য সমর্থনের অভাব। অন্য কেউ আছে? আমি যদি এই বৈশিষ্ট্যগুলি ব্যবহার করতে যাচ্ছি না, তবে এতে থাকা ডাটাবেসগুলি না ব্যবহার করার কোনও কারণ আছে কি?

উত্তর:


33

নিহিত ডাটাবেসের প্রাথমিক উদ্দেশ্য হ'ল আপনার ডেটাবেসটিকে চার্চের প্রচুর স্ক্যাফোল্ডিং ছাড়াই কোনও নতুন সার্ভারে পোর্ট করা সহজ করা। এই বিষয়টি মাথায় রেখে, আমি কয়েকটি সম্ভাব্য সমস্যার সমাধান করব যা এই মাইগ্রেশনটিকে আরও কঠিন করে তুলবে - এবং বেশিরভাগটি এই বিষয়টিকে ঘুরিয়ে দেয় যে ডেটাবেসগুলি কেবলমাত্র এসকিউএল সার্ভার ২০১২-তে অন্তর্ভুক্ত রয়েছে (কন্টেন্টটি বাস্তবে প্রয়োগ করা হয় না)।


সংযোগ স্ট্রিং

কোনও ধারণকৃত ডাটাবেসের সাথে সংযোগের স্ট্রিং অবশ্যই সংযোগের স্ট্রিংয়ে অবশ্যই ডেটাবেস নির্দিষ্ট করতে হবে । সংযোগ স্থাপনের জন্য আপনি আর লগইনের ডিফল্ট ডাটাবেসের উপর নির্ভর করতে পারবেন না; আপনি যদি কোনও ডাটাবেস নির্দিষ্ট না করেন তবে এসকিউএল সার্ভার সমস্ত ধারণিত ডাটাবেসগুলির মধ্যে পদক্ষেপ নেবে না এবং আপনার শংসাপত্রগুলির সাথে মেলে এমন কোনও ডাটাবেস সন্ধান করার চেষ্টা করবে না।


ক্রস-ডিবি কোয়েরি

এমনকি যদি আপনি একই সার্ভারে থাকা দুটি পৃথক পৃথক ডাটাবেসে একই পাসওয়ার্ড সহ একই ব্যবহারকারী তৈরি করেন, আপনার অ্যাপ্লিকেশন ক্রস-ডাটাবেস অনুসন্ধানগুলি করতে সক্ষম হবে না। ব্যবহারকারীর নাম ও পাসওয়ার্ড একই হতে পারে, কিন্তু তারা না একই ব্যবহারকারীর। এর কারন? যদি আপনার কোনও হোস্ট করা সার্ভারে ডাটাবেস থাকে, তবে একই হোস্ট করা সার্ভারটি ব্যবহার করার কারণে অন্য কারও মতো একই ব্যবহারকারী থাকা থেকে আপনাকে বাধা দেওয়া উচিত নয়। যখন সম্পূর্ণ নিয়ন্ত্রণটি উপস্থিত হয় (সম্ভবত এসকিউএল সার্ভার ২০১২ এর পরে সংস্করণে কখনও হয় না)), ক্রস-ডাটাবেস প্রশ্নগুলি যাইহোক একেবারে নিষিদ্ধ করা হবে। আমি অত্যন্ত, উচ্চতর, আপনাকে উচ্চ প্রস্তাব দিচ্ছি যে আপনি থাকা ডাটাবেস ব্যবহারকারীদের মতো একই নাম দিয়ে সার্ভার-স্তরের লগইনগুলি তৈরি করবেন না এবং অন্তর্ভুক্ত ডাটাবেসগুলির মধ্যে একই ব্যবহারকারীর নামটি এড়াতে চেষ্টা করবেন। যদি আপনার একাধিক ধারণকৃত ডাটাবেসগুলিতে আঘাত করে এমন কোয়েরি চালানোর দরকার হয় তবে যথাযথ সুযোগ-সুবিধাগুলি রয়েছে এমন সার্ভার-লেভেল লগইন ব্যবহার করে এটি করুন (আপনি সম্ভবত এটি sysadminপড়তে পারেন তবে কেবল পঠন অনুসন্ধানের জন্যই এটি CONNECT ANY DATABASEএবং এটি SELECT ALL USER SECURABLES)।


প্রতিশব্দ

বেশিরভাগ 3- এবং 4-অংশের নামগুলি সনাক্ত করা সহজ, এবং একটি ডিএমভিতে উপস্থিত হয়। তবে আপনি যদি একটি প্রতিশব্দ তৈরি করেন যা একটি 3- বা 4-অংশের নামকে নির্দেশ করে তবে এগুলি ডিএমভিতে প্রদর্শিত হবে না। সুতরাং আপনি যদি সমার্থক শব্দটির ভারী ব্যবহার করেন তবে সম্ভবত আপনি কিছু বাহ্যিক নির্ভরতা মিস করবেন এবং এটি এমন একটি সমস্যা তৈরি করতে পারে যেখানে আপনি ডাটাবেসটিকে অন্য একটি সার্ভারে স্থানান্তরিত করতে পারেন। আমি এই সমস্যাটি সম্পর্কে অভিযোগ করেছি, তবে এটি "ডিজাইন দ্বারা" হিসাবে বন্ধ ছিল এবং নতুন প্রতিক্রিয়া সিস্টেমে মাইগ্রেশনটি টিকেনি । নোট করুন যে ডিএমভি গতিশীল এসকিউএল এর মাধ্যমে নির্মিত 3- এবং 4-অংশের নামগুলিও মিস করবে।


পাসওয়ার্ড নীতি

আপনি যদি কোনও পাসওয়ার্ড নীতিমালা ছাড়াই কোনও সিস্টেমে থাকা একটি ডাটাবেস ব্যবহারকারী তৈরি করে থাকেন, তবে একই পাসওয়ার্ড নীতিমালার পরিবর্তে অন্য কোনও সিস্টেমে একই ব্যবহারকারী তৈরি করা আপনার পক্ষে কঠিন হতে পারে। এটি কারণ CREATE USERসিনট্যাক্সটি পাসওয়ার্ড নীতিটিকে বাইপাস করে সমর্থন করে না। আমি এই সমস্যাটি সম্পর্কে একটি বাগ দায়ের করেছি, এবং এটি উন্মুক্ত রয়েছে (এবং কানেক্টের অবসর নেওয়ার সময় এটি চালানো থেকেও বাঁচেনি)। এবং এটি আমার কাছে আশ্চর্যজনক বলে মনে হয় যে একটি সিস্টেমে পাসওয়ার্ড নীতি রয়েছে এমন জায়গায় আপনি একটি সার্ভার-লেভেল লগইন তৈরি করতে পারেন যা নীতিটি সহজেই বাইপাস করে, তবে আপনি এমন একটি ডাটাবেস ব্যবহারকারী তৈরি করতে পারবেন না যা এই ব্যবহারকারী সহজাতভাবেই রয়েছেন সুরক্ষা ঝুঁকি কম।


হালকা খাবার

যেহেতু আমরা আর টেম্পডিবি'র জোটের উপর নির্ভর করতে পারি না, আপনার বর্তমানে এমন কোনও কোড পরিবর্তন করতে হবে যা বর্তমানে সুস্পষ্ট সংগ্রহের DATABASE_DEFAULTব্যবহার CATALOG_DEFAULTকরে বা পরিবর্তে ব্যবহার করতে পারে । কিছু সম্ভাব্য সমস্যার জন্য এই বিওএল নিবন্ধটি দেখুন ।


IntelliSense

যদি আপনি কোনও ধারণকৃত ব্যবহারকারী হিসাবে থাকা একটি ডাটাবেসের সাথে সংযুক্ত হন তবে এসএসএমএস সম্পূর্ণরূপে ইন্টেলিজেন্স সমর্থন করবে না। সিনট্যাক্স ত্রুটিগুলির জন্য আপনি বেসিক আন্ডারলাইনিং পাবেন তবে কোনও স্বয়ংক্রিয়-পূর্ণ তালিকা বা সরঞ্জামদ্বার এবং সমস্ত মজাদার উপাদান নেই। আমি এই সমস্যাটি সম্পর্কে একটি ত্রুটি দায়ের করেছি, এবং এটি উন্মুক্ত রয়েছে - এবং আরও একটি যা এই পদক্ষেপটি থেকে রক্ষা পায় নি।


এসকিউএল সার্ভার ডেটা সরঞ্জাম

আপনি যদি ডাটাবেস বিকাশের জন্য এসএসডিটি ব্যবহার করার পরিকল্পনা করছেন তবে বর্তমানে উপস্থিত ডাটাবেসগুলির জন্য সম্পূর্ণ সমর্থন নেই। যার সত্যিকারের অর্থ হ'ল প্রকল্পটি বিল্ডিং ব্যর্থ হবে না যদি আপনি এমন কিছু বৈশিষ্ট্য বা সিনট্যাক্স ব্যবহার করেন যা কন্টেন্টগুলি ভেঙে দেয়, কারণ এসএসডিটি বর্তমানে জানে না কী কী নিয়ন্ত্রণ রয়েছে এবং এটি কী ভাঙতে পারে।


পরিবর্তে ডেটাবেস

কোনও ALTER DATABASEঅন্তর্নিহিত ডাটাবেসের প্রসঙ্গের মধ্যে থেকে কোনও কমান্ড চালানোর সময় , আপনার যতটা ALTER DATABASE fooপ্রয়োজন ব্যবহারের চেয়ে বেশি রথের ব্যবহার করুন ALTER DATABASE CURRENT- এটি ডাটাবেস স্থানান্তরিত হলে, নাম পরিবর্তন করা ইত্যাদি etc. এই আদেশগুলি তাদের বাহ্যিক প্রসঙ্গ বা রেফারেন্স সম্পর্কে কিছু জানতে হবে না ।


আরও কয়েকজন

কিছু কিছু জিনিস যা আপনার সম্ভবত ব্যবহার করা উচিত নয় তবে তবুও সেই বিষয়গুলির তালিকায় উল্লেখ করা উচিত যা সমর্থিত নয় বা অবমানিত রয়েছে এবং এতে থাকা ডাটাবেসে ব্যবহার করা উচিত নয়:

  • সংখ্যাযুক্ত পদ্ধতি
  • অস্থায়ী পদ্ধতি
  • আবদ্ধ বস্তুতে কোলেশন পরিবর্তন হয়
  • ডেটা ক্যাপচার পরিবর্তন করুন
  • ট্র্যাকিং পরিবর্তন করুন
  • প্রতিলিপি

যে সমস্ত বলেছিল, এটি অন্তর্ভুক্ত থাকা ডাটাবেসগুলি ব্যবহার করার জন্য অগত্যা অসুবিধা নয়, এগুলি কেবল আপনার বিষয় সম্পর্কে সচেতন হওয়া উচিত এবং সরকারী ডকুমেন্টেশনে সমস্ত স্পষ্টভাবে প্রকাশ করা হয়নি।

আপনার এটিও নিশ্চিত হওয়া দরকার যে যদি কোনও অন্তর্ভুক্ত ডাটাবেস স্থানান্তরিত হতে চলেছে বা কোনও উপলব্ধতা গোষ্ঠীর অংশ বা মিরর করা হচ্ছে তবে সমস্ত সম্ভাব্য গন্তব্য সার্ভারগুলির sp_configureবিকল্পটি contained database authentication1 তে সেট করা আছে।

আপনি খুঁজে পেতে পারেন এই ব্লগ পোস্টে দরকারী, সেইসাথে এই এক যদিও তারা প্রাক তারিখ RTM।


আপনি কি জানেন কেন অস্থায়ী পদ্ধতির অনুমতি দেওয়া হয় না?
জন সেগেল

2
@ জোনসিগেল তাদের এখনও আংশিক রক্ষণাবেক্ষণের আওতায় অনুমোদিত, তবে তারা কন্টেন্টগুলি লঙ্ঘন করে (অর্থাত্ পদ্ধতিটি কী কী সত্তা অ্যাক্সেস করে তা বৈধ করার কোনও উপায় নেই, কারণ এটি মেটাডেটা এবং সংজ্ঞা অন্য কোথাও সঞ্চিত রয়েছে) সুতরাং প্রস্তাবিত নয়। এমএসডিএন.মাইক্রোসফট.ইন- ইউএস / লাইব্রেরি / 9৯৯৯৯৯৯০.সপিএক্স থেকে প্রতিলিপি : অস্থায়ী সঞ্চিত প্রক্রিয়া বর্তমানে অনুমোদিত। অস্থায়ীভাবে সঞ্চিত প্রক্রিয়াগুলি লঙ্ঘন করার কারণে, ভবিষ্যতে থাকা ডেটাবেসগুলির সংস্করণগুলিতে তাদের সমর্থন করার আশা করা যায় না।
অ্যারন বারট্রান্ড

9

যারা অন্তর্ভুক্ত ডেটাবেসগুলি সম্পর্কে আরও বিশদ পেতে আগ্রহী তাদের জন্য আমি এই নিবন্ধটি http://www.sqlshack.com/contain-databases-in-sql-server/ পড়ার পরামর্শ দিতে পারি

নিবন্ধটি থাকা ডাটাবেসগুলি ব্যবহারের প্রধান সুবিধা / অসুবিধাগুলি নির্দেশ করে।

অসুবিধেও

আংশিকভাবে অন্তর্ভুক্ত ডেটাবেসগুলি অনুলিপি, পরিবর্তন সম্পর্কিত ডেটা ক্যাপচার, ট্র্যাকিং পরিবর্তন, স্কিমা-বাউন্ড অবজেক্টস যা কোলেশন পরিবর্তনের সাথে অন্তর্নির্মিত ফাংশনগুলির উপর নির্ভর করে features

সুবিধাদি

অন্যদিকে, ইতিমধ্যে উল্লিখিত হিসাবে, রয়েছে ডিবিযুক্ত ব্যবহারের কিছু সুবিধা, যেমন:

  • ডাটাবেসটিকে একটি সার্ভার থেকে অন্য সার্ভারে সরানো বেশ সহজ,
    কারণ অনাথ ব্যবহারকারীর সমস্যা থাকবে না
  • মেটাডেটা ধারণকৃত ডেটাবেজে সংরক্ষণ করা হয় তাই এটি সহজ এবং আরও বহনযোগ্য
  • উপস্থিত ডিবি ব্যবহারকারীদের জন্য এসকিউএল সার্ভার এবং উইন্ডোজ প্রমাণীকরণ উভয়ই পাওয়া সম্ভব

নিবন্ধটি এর সাথেও সহায়তা করে:

  • একটি নতুন অন্তর্ভুক্ত ডেটাবেস তৈরি করা (এসকিউএল সার্ভারে বিকল্প পৃষ্ঠায় আংশিক হিসাবে ধার্যকরণের ধরণের তৈরি করে এবং পরবর্তীকালে একটি ডাটাবেস তৈরি করতে টি-এসকিউএল কোয়েরি ব্যবহার করে)
  • এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করে থাকা ডিবিতে সংযোগ স্থাপন করা (সংযোগের প্যারামিটারে থাকা ডিবি নাম নির্দিষ্ট করার প্রয়োজন)
  • বিদ্যমান ডাটাবেসকে একটি বিদ্যমান ডাটাবেসে রূপান্তর করা
  • একটি অন্তর্ভুক্ত ডাটাবেসে কাজ করে এবং ব্যবহারকারীর ধরণের সমস্ত লগইন তালিকাবদ্ধ করে

4

একটি অসুবিধা হ'ল একটি অন্তর্ভুক্ত ডাটাবেস ব্যবহারকারীকে লগইন করতে পারে (যেমন MUST_CHANGE) এর মতো তাদের নিজস্ব পাসওয়ার্ড পরিবর্তন করতে বাধ্য করা যায় না । আপনি যদি তাদের কোনও পরিবর্তিত ব্যবহারকারীর অনুমতি না দেন এবং কোনও এসকিউএল স্টেটমেন্ট ব্যবহার করে কীভাবে এটি পরিবর্তন করবেন তা তাদের না বললে ব্যবহারকারীরা তাদের নিজস্ব পাসওয়ার্ড পরিচালনা করতে পারবেন না। তাদের পক্ষে ইউজার ইন্টারফেসের মাধ্যমে এটি পরিচালনা করা সহজ কোথাও নেই বা কমপক্ষে আমি জানি না।

অতিরিক্ত নোটটি হ'ল, আমি "পাইভট" এবং "ইউএনপিভোট" ধারাটিতে অপ্রত্যাশিত এবং অনাবৃত মেটাডেটা ব্যবহার পেয়েছি যা আমি ভেবেছিলাম এটি কেবল সিস্টেম ক্যাটালগে থাকা উচিত (sys.tables / sys.colम / ইত্যাদি)। এমএসডিএন-তে নথিভুক্ত হিসাবে :

একটি অন্তর্ভুক্ত ডাটাবেসের মধ্যে, ক্যাটালগ কোলেশন Latin1_General_100_CI_AS_WS_KS_SC । এই জোটটি এসকিউএল সার্ভারের সমস্ত দস্তাবেজে থাকা সমস্ত ডাটাবেসের জন্য সমান এবং পরিবর্তন করা যায় না।

তবে তারা উল্লেখ করেনি যে "পিভট" এবং "ইউএনপিভোট" ধারাটি কার্যকরভাবে কার্যকর করার ব্যবস্থা হিসাবে সিস্টেম ক্যাটালগগুলিও ব্যবহার করে। সুতরাং এটি অভিবাসনের সময় "PIVOT" এবং "UNPIVOT" ধারাটির ব্যবহারের নিকটে সর্বত্র কোলেশন বিরোধী ত্রুটি তৈরি করে। এখানে কিছু তিরস্কার:

/*step1 create a table belongs to a contained database and populate some data*/
create  table dbo.test1 (col1 varchar(100),col2 varchar(100))
insert  dbo.test1 values('a','x')
insert  dbo.test1 values('b','y')
insert  dbo.test1 values('c','z')

/*step2 lets see its collation you will see it is correctly as same as its (contained) database */
select name,collation_name from sys.columns where object_name(object_id) = 'test1'

/*step3 reproduce an unpivoted column*/
select * into dbo.test2
from (select * from dbo.test1) a unpivot (val for col in (col1,col2)) a


/*step4 lets check its collation you will see the column specified at "FOR" clause is created as Latin1_General_100_CI_AS_KS_WS_SC */
select name,collation_name from sys.columns where object_name(object_id) = 'test2'

/*step5 make use of the unpivoted table without awareness will cause an error*/
select val + ' = ' + col from dbo.test2 

/*step6 clean up*/
drop table dbo.test1
drop table dbo.test2

আপনি দেখতে পাবেন যে অন্তর্ভুক্ত ডাটাবেস সম্পর্কে নিবন্ধগুলি বেশিরভাগই অসম্পূর্ণ। সুতরাং এটি ব্যবহার করার সিদ্ধান্ত নেওয়ার জন্য খুব ভাল সংশোধন প্রয়োজন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.