এসকিউএল সার্ভার পুনরায় চালু করা ব্যতীত, এসকিউএলসিআরআর অ্যাপডোমেনকে পুনরায় সেট করতে বাধ্য করার কোনও উপায় আছে কি?


11

আমি এসকিউএলসিএলআর দ্বারা ব্যবহৃত অ্যাপডোমেনটিকে পুনরায় সেট করতে বাধ্য করতে চাই। এসকিউএল সার্ভার উদাহরণ পুনরায় চালু করার পাশাপাশি আমি কীভাবে এটি করতে পারি?


আপনি উত্তর আপডেটে বিজ্ঞপ্তি পান কিনা তা নিশ্চিত নই, তবে আমি আমার উত্তরটি আরও সহজ পদ্ধতির সাথে আপডেট করেছি :)।
সলোমন রুটজকি

উত্তর:


6

আমি জানি এটি কিছুটা নিষ্ঠুর, তবে সিএলআর অক্ষম করার এবং এটি পুনরায় সক্ষম করার কী?

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 0;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

2
এই পদ্ধতি সম্পর্কে একটি গুরুত্বপূর্ণ বিশদটি হ'ল স্ট্যান্ডবি (কেবল পঠনযোগ্য) ডাটাবেসের বিরুদ্ধে কার্যকর করার সময় এটি কাজ করে; অন্যান্য সমস্ত পদ্ধতি আমি চেষ্টা করেছি না। আমার এটি দরকার কারণ একটি সিএলআর অ্যাসেমব্লির আপডেটটি স্ট্যান্ডবিওয়াই ক্যাটালগে লগ শিপিংয়ের মাধ্যমে স্বাভাবিক হিসাবে প্রচারিত হয়েছিল, কিন্তু অ্যাপডোমাইন পুনরায় লোড করেনি --- সুতরাং এটি প্রায় এক দিনের জন্য .dll এর পুরানো সংস্করণ থেকে কোড চালিয়ে যেতে থাকে।
গ্রেঞ্জার

@ গ্রেঞ্জার খুব আকর্ষণীয় এবং জেনে ভাল :)। তবে, আমি বিবেচনা করব যে এসকিউএল সার্ভারের মধ্যে একটি বাগ। : আপনি প্রতিবেদন করছি যে, কানেক্ট সাইট এর মাধ্যমে চাইতে পারেন connect.microsoft.com/SQLServer/Feedback
সলোমন Rutzky

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

@ গ্রেঞ্জার (এবং সর্বোচ্চ): আমি কী বলছিলাম সে সম্পর্কে আমি পরিষ্কার ছিলাম না আমি ভেবেছিলাম বাগ ছিল। আমি বলছিলাম না যে "সিএলআর সক্ষম" সেটিংস পুনরায় সেট করা আনলোডের কারণ হয়ে একটি বাগ ছিল। আমি বলছিলাম যে ALTER ASSEMBLYলগ শিপিংয়ের মাধ্যমে প্রচারিত যা অ্যাপ ডোমেনটি পুনরায় লোড করে না (বা কমপক্ষে আনলোড করা হয় না) এটি বাগ। যেভাবেই হোক না কেন, আমি একটি আরও সহজ পদ্ধতি পেয়েছি যা আমি এখানে আমার উত্তরে যুক্ত করেছি। আপনি যদি এই নতুন পদ্ধতিটি পরীক্ষা করার ক্ষমতা রাখেন যা দুর্দান্ত হবে কারণ আমি দেখতে আগ্রহী যে এটি আপনার বর্ণিত লগ শিপিং দৃশ্যে কাজ করে কিনা very
সলোমন রুটজকি

8

আরও একটি মার্জিত সমাধান রয়েছে যা অন্য সমস্ত অ্যাসেমব্লিকে প্রভাবিত করবে না: কেবল অ্যাপ্লিকেশন ডোমেনের যে কোনও একটি অ্যাসেমব্লির PERMISSION_SET পরিবর্তন করুন (ব্যবহারকারীদের জন্য অ্যাপ্লিকেশন ডোমেনগুলি)।

ALTER ASSEMBLY [AssemblyName] WITH PERMISSION_SET = {1 of the 2 levels that 
                                                      this assembly is not current at}

কেবল মনে রাখবেন যে আপনাকে PERMISSION_SET যা ছিল তা ফিরে সেট করতে হবে। এছাড়াও, আপনার PERMISSION_SET এটিকে আনলোড করার আগে অ্যাসেমব্লিতে কোনও পদ্ধতি অ্যাক্সেস করতে হবে; সক্রিয় যে অ্যাপ্লিকেশন ডোমেনে বর্তমানে লোড করা হয়নি এমন একটি অ্যাসেমব্লিকে পরিবর্তন করে তবে অন্য একটি সমাবেশের সাথে অ্যাপ ডোমেনের কোনও প্রভাব নেই (অ্যাপ্লিকেশন ডোমেনগুলি প্রতি-ডিবি, প্রতি ব্যবহারকারী, প্রতি-সংসদ নয়)।


হালনাগাদ
উপরে বর্ণিত পদ্ধতিটি সর্বাধিক সূক্ষ্ম-দাগযুক্ত পদ্ধতি যেখানে এটি কেবলমাত্র একটি অ্যাপ ডোমেনটি আনলোড করবে। তবে, এটি দরকার যে সমাবেশটি অন্য দুটি স্তরের একটিতে সেট করা যায়। হিসাবে চিহ্নিত হিসাবে চিহ্নিত সমাবেশগুলি SAFEকেবল তখনই সম্ভব হবে যদি হয়

  • ডাটাবেস সেট করা আছে TRUSTWORTHY ON, বা
  • সমাবেশটি স্বাক্ষরিত হয় এবং একটি লগইন, একটি অসমমিতিক কী এর ভিত্তিতে যা নিজেই সমাবেশ হিসাবে একই স্বাক্ষরের উপর ভিত্তি করে উপস্থিত থাকে এবং অনুমোদিত EXTERNAL ACCESS ASSEMBLYবা UNSAFE ASSEMBLYঅনুমতি দেওয়া হয়

এই ক্ষেত্রে আপনি কেবল TRUSTWORTHYসেটিংসটি চালু করতে পারেন ONএবং তারপরে তাত্ক্ষণিকভাবে OFFআবার ফিরে যেতে পারেন এবং এটি সেই নির্দিষ্ট ডাটাবেসে সমস্ত অ্যাপ ডোমেনগুলি আনলোড করবে :

ALTER DATABASE CURRENT SET TRUSTWORTHY ON;
ALTER DATABASE CURRENT SET TRUSTWORTHY OFF;

যদি আপনার ডাটাবেসে কেবলমাত্র একটি অ্যাপ ডোমেন থাকে (এবং আমি সন্দেহ করি যে এটি 95% বা ততোধিক সময়ের ক্ষেত্রে হয়) তবে এখানে বর্ণিত দুটি পদ্ধতিরই একই নেট প্রভাব রয়েছে। এবং এই পরিস্থিতিতে, ALTER DATABASEপদ্ধতিটি সহজ বলে মনে হচ্ছে কারণ এটিতে কোনও নির্দিষ্ট বস্তুর নাম নির্দিষ্ট করার প্রয়োজন হয় না বা মূলটি কী তা জানার প্রয়োজন হয় না PERMISSION_SET

এছাড়াও, আপনার যদি কেবল একটি একক অ্যাপ্লিকেশন ডোমেন থাকে তবে ALTER DATABASEডাটাবেসটি ইতিমধ্যে সেট করা আছে TRUSTWORTHY ONবা আপনি যথাযথ অনুমতি নিয়ে কী-বেস লগইন সেটআপ করেছেন এমন ক্ষেত্রেও পদ্ধতিটি সহজ । আপনি একটি কী ভিত্তিক লগ-ইন ব্যবহার করে থাকেন তাহলে আপনি সেট করতে পারেন TRUSTWORTHYথেকে ONএবং তারপর OFFআবার উপরের হিসাবে উল্লেখ করেছে। তবে আপনি যদি ইতিমধ্যে TRUSTWORTHYসেট করে ONরেখেছেন, তবে কেবল এটিকে বিপরীত করুন এবং এটিকে সেট করুন OFFএবং তারপরে তাত্ক্ষণিকভাবে এখানে ফিরে যান ON:

ALTER DATABASE CURRENT SET TRUSTWORTHY OFF;
ALTER DATABASE CURRENT SET TRUSTWORTHY ON;

1
আপডেট পদ্ধতির কাজ করে একটি অপেক্ষারত (READ_ONLY) ডাটাবেসের ক্যাটালগ উপর। এসকিএল সার্ভার আমাকে "বিশ্বাস" সেটিংস পরিবর্তন করার অনুমতি দিয়েছে, তারপরে এটিকে আগের মতো করে ফেলা হয়েছে। আমি যাচাই করেছি যে পরিবর্তনটি আসলে ফলাফলটি দেখে ডোমেনটি আনলোড করেছে SELECT * FROM sys.dm_clr_appdomains;। মিষ্টি।
গ্রেঞ্জার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.