এসকিউএল সার্ভার থেকে অ্যাসেম্বলি না ফেলে কীভাবে সিএলআর অ্যাসেমব্লিকে আপডেট করবেন


18

এসকিউএল সার্ভারে (২০০৮ আর 2) অ্যাসেম্বলিটি ফেলে এবং পুনরায় তৈরি না করে আমি কীভাবে একটি সিএলআর ফাংশন (বা পদ্ধতি) অ্যাসেম্বলি dll আপডেট করতে পারি?

এখন যেমন দাঁড়িয়েছে যদি আমি কোনও অ্যাসেমব্লিকে আপডেট করি (যেমন একটি নতুন ফাংশন যুক্ত করতে), এসকিউএল সার্ভার আপডেট হওয়া ডিএলকে সম্মান দেবে না যতক্ষণ না আমি অ্যাসেম্বলিটি বাদ দিই:

DROP ASSEMBLY CLRFunctions

Msg 6590, Level 16, State 1, Line 1
DROP ASSEMBLY failed because 'CLRFunctions' is referenced by object 'NormalizeString'.

তবে আমি অ্যাসেম্বলিটি নামার আগে, প্রথমে আমাকে অবশ্যই এটি উল্লেখ করা সমস্ত ফাংশন ফেলে দিতে হবে:

DROP FUNCTION NormalizeString
DROP FUNCTION RemoveDiacritics
DROP FUNCTION RemoveCombiningDiacritics
DROP FUNCTION CombineLigatures
....
DROP FUNCTION PseudolocalizeArabic

এবং তারপরে আমি সমাবেশটি ফেলে দিতে পারি:

DROP ASSEMBLY CLRFunctions

এখন আমাকে সমাবেশটি " তৈরি " করতে হবে:

CREATE ASSEMBLY CLRFunctions FROM 'c:\foos\CLRFunctions.dll';

এবং এখন আমি মুছে ফেলার আগে যে সমস্ত ইউডিএফ নিবন্ধিত ছিল তাদের সমস্ত ঘোষণার শিকার করতে হবে ।

আমি বরং কোনও অ্যাসেমব্লিকে আপডেট করব এবং এসকিউএল সার্ভারটি এটি ব্যবহার শুরু করব।


আপডেট : আমি এলোমেলোভাবে DBCC FREEPROCCACHEএকটি "পুনরায় সংযোগ" বলার চেষ্টা করেছি , তবে এসকিউএল সার্ভার এখনও পুরানো কোডটি ব্যবহার করে।

আপডেট : আমি অ্যাসেম্বলি dll মুছে ফেলেছি CLRFunctions.dllএবং এসকিউএল সার্ভার এখনও কোড চালাতে সক্ষম (কোড ছাড়া এটি অসম্ভব হওয়া উচিত)।

উত্তর:


16

আমি আপনি যা খুঁজছেন মনে alter assembly। বিওএল থেকে:

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

একই পৃষ্ঠার উদাহরণগুলির মধ্যে একটির মতো মনে হচ্ছে এটি কৌশলটি করবে:

ALTER ASSEMBLY ComplexNumber 
FROM 'C:\Program Files\Microsoft SQL Server\90\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll' 

1
এসকিউএল সার্ভার হোস্ট মেশিনের পরিবর্তে এসএসএমএস ক্লায়েন্ট মেশিনে আপডেট অ্যাসেম্বলিটি অবস্থিত হলে এটি করা যায়? সার্ভারে সরাসরি এটির ফাইল সিস্টেম অ্যাক্সেস করার জন্য আমার পর্যাপ্ত অধিকার নেই তবে আমার কাছে সিএলআর অ্যাসেম্বলিগুলি যুক্ত করার এবং সরানোর পর্যাপ্ত অধিকার রয়েছে।
জেরেফেথ

না, বেশিরভাগই না আপনি একটি ইউএনসি পাথ (উদাহরণস্বরূপ \\ সার্ভার \ পাথ \ থেকে \ ফাইল) নির্দিষ্ট করতে পারেন এবং এসকিউএল ইঞ্জিনের অধীনে যে সার্ভিস অ্যাকাউন্টটি চলছে সেটিতে ফাইলটিতে পড়ার অনুমতি রয়েছে, এটি কাজ করা উচিত। অন্য বিকল্পটি সমাবেশের জন্য বাইনারি মান নির্দিষ্ট করা specify যদি আপনি ইতিমধ্যে এটি অন্য সার্ভারে স্থাপন করেছেন তবে সেখান থেকে পরিবর্তনটিকে স্ক্রিপ্ট করা আপনার ব্লব মানটি পেয়ে যাবে।
বেন থুল

হ্যাঁ, এটাই আমি ভেবেছিলাম। :( সম্ভবত এসএসএমএসের নতুন সংস্করণটি একটি রিমোট মেশিন থেকে অ্যাসেম্বলিগুলি আপডেট করার অনুমতি দেবে meantime এর মধ্যে, আমি অনুমান করি যে আমি
এসএসএমএস জিইআইয়ের মাধ্যমে অ্যাসেমসিলিগুলি

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

1
"অ্যাসেমব্লিগুলি যুক্ত করা এবং পরিবর্তন করার জন্য একটি ফাইল-সিস্টেমের রেফারেন্স প্রয়োজন" " - এটা সত্য নয়। উভয়ই CREATE ASSEMBLYএবং ALTER ASSEMBLYএকটি ব্লব গ্রহণ করবে যা সমাবেশকে উপস্থাপন করে। ২০০৮++ এ নির্মিত কোনও ডাটাবেসে গিয়ে নিজের কাছে এটি প্রমাণ করুন এবং প্রোগ্রামেবলি -> অ্যাসেমব্লিতে যান এবং মাইক্রোসফ্ট.এসএইচএল সার্ভার.টাইপস অ্যাসেম্বলি তৈরির স্ক্রিপ্ট করুন। সেই বিশাল বৈকল্পিক হ'ল সমাবেশ । এটি যেমন আপনার পরিস্থিতির ক্ষেত্রে প্রযোজ্য, আপনার অ্যাসেম্বলিকে আপনার স্থানীয় উদাহরণে মোতায়েন করুন, এটি স্ক্রিপ্ট করুন এবং এটিকে একটি ALTER ASSEMBLYস্ক্রিপ্ট করুন।
বেন থুল

7

বেন থুলের উত্তর যুক্ত করতে, এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর জিইউআইয়ের মাধ্যমে এটি দূরবর্তী মোটামুটি সহজেই সম্পন্ন করা যায় ।

  1. আপনার ডাটাবেস -> প্রোগ্রামযোগ্যতার জন্য অবজেক্ট এক্সপ্লোরারের অধীনে, অ্যাসেমব্লিগুলিতে ডান ক্লিক করুন এবং 'নিউ এসেম্বলি ...' নির্বাচন করুন।

  2. আপনার আপডেট হওয়া ডিএলএল ব্রাউজ করুন।

  3. 'ঠিক আছে' ক্লিক করার পরিবর্তে (যা ব্যর্থ হবে, একই নামের অ্যাসেম্বলি ইতিমধ্যে বিদ্যমান হিসাবে) নিউ এসেম্বল উইন্ডোর শীর্ষে 'স্ক্রিপ্ট' ক্লিক করুন।
     
    আপনাকে একটি এসকিউএল ক্যোয়ারিতে ফেলে দেওয়া হবে যাতে একটি 'ক্রিয়েট এসেম্বাব্লাইওয়াই' লাইন থাকবে যার পরে আপনি সবেমাত্র নির্বাচিত ডিএলএল হবেন।

  4. 'CREATE' কে 'ALTER' এ পরিবর্তন করুন এবং তারপরে এক্সিকিউট করুন!

স্ক্রিপ্টটি আমার জন্য একটি 'প্রমাণীকরণ' লাইনও তৈরি করেছিল যা কার্যকর করার আগে আমাকে অপসারণ করতে হয়েছিল; আপনার মাইলেজ বিভিন্ন রকম হতে পারে।

আমি আশা করি এটি তাদের সার্ভারগুলিতে ফাইল সিস্টেম অ্যাক্সেসবিহীন অন্য কাউকে সহায়তা করে।

আশা করি কোনও দিন মাইক্রোসফ্ট এসএসএমএসে এটি প্রথম শ্রেণির অপারেশন করবে, তবে এটি না করা পর্যন্ত এটি মোটামুটি সহজ কাজ।


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