আমি এসকিউএলসিএলআর দ্বারা ব্যবহৃত অ্যাপডোমেনটিকে পুনরায় সেট করতে বাধ্য করতে চাই। এসকিউএল সার্ভার উদাহরণ পুনরায় চালু করার পাশাপাশি আমি কীভাবে এটি করতে পারি?
আমি এসকিউএলসিএলআর দ্বারা ব্যবহৃত অ্যাপডোমেনটিকে পুনরায় সেট করতে বাধ্য করতে চাই। এসকিউএল সার্ভার উদাহরণ পুনরায় চালু করার পাশাপাশি আমি কীভাবে এটি করতে পারি?
উত্তর:
আমি জানি এটি কিছুটা নিষ্ঠুর, তবে সিএলআর অক্ষম করার এবং এটি পুনরায় সক্ষম করার কী?
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
ALTER ASSEMBLY
লগ শিপিংয়ের মাধ্যমে প্রচারিত যা অ্যাপ ডোমেনটি পুনরায় লোড করে না (বা কমপক্ষে আনলোড করা হয় না) এটি বাগ। যেভাবেই হোক না কেন, আমি একটি আরও সহজ পদ্ধতি পেয়েছি যা আমি এখানে আমার উত্তরে যুক্ত করেছি। আপনি যদি এই নতুন পদ্ধতিটি পরীক্ষা করার ক্ষমতা রাখেন যা দুর্দান্ত হবে কারণ আমি দেখতে আগ্রহী যে এটি আপনার বর্ণিত লগ শিপিং দৃশ্যে কাজ করে কিনা very
আরও একটি মার্জিত সমাধান রয়েছে যা অন্য সমস্ত অ্যাসেমব্লিকে প্রভাবিত করবে না: কেবল অ্যাপ্লিকেশন ডোমেনের যে কোনও একটি অ্যাসেমব্লির 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;
SELECT * FROM sys.dm_clr_appdomains;
। মিষ্টি।