স্কিমা পরিবর্তনের পরে আমি কীভাবে ভাঙা সঞ্চিত পদ্ধতি সনাক্ত করতে পারি?


11

আমি আমার ডাটাবেসে একটি কেন্দ্রীয় টেবিলটি সংশোধন করেছি, এবং এসপি_ডিপেন্ডস আক্ষরিক অর্থেই শত শত ফলাফল প্রদান করেছে, এবং আমি উদ্বিগ্ন those কিছু সংরক্ষিত-পদ্ধতি আমার পরিবর্তনের পরে আর সংকলন করতে পারে না।

একটি একক সঞ্চিত প্রক্রিয়া পরীক্ষা করা সহজ (আমি কেবলমাত্র পরিবর্তিত স্ক্রিপ্টটি পুনরায় চালিত করব এবং ক্রিয়াকলাপটি সফল কিনা তা দেখুন) তবে এটি 100+ পদ্ধতিতে করা কিছুটা জটিল umbers

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

আমি আরও ভাবছিলাম যে আমি সমস্ত সঞ্চিত পদ্ধতি সম্পূর্ণভাবে ফেলে দিতে পারি এবং আমার উত্স নিয়ন্ত্রণ সিস্টেমের সাহায্যে আমার ডাটাবেসটিকে পুনরায় নকশায়িত করতে পারি, তবে সেই বিকল্পটি কার্যকর হলেও এটি খুব মার্জিত নয়। এটি করার আরও ভাল উপায় আছে?

আমি এসকিউএল সার্ভার 2008 আর 2 ব্যবহার করছি এবং আমার ডাটাবেস স্ক্রিপ্টগুলি একটি ভিএস ২০০৮ ডাটাবেস প্রকল্পে সঞ্চিত আছে।


স্পষ্ট করার জন্য, আমি একজনের পক্ষে এই পরামর্শের পক্ষে সম্পূর্ণভাবে এই পদ্ধতির উপর নির্ভর করা উচিত নয় adv ঠিক ঠিক সি হিসাবে # আপনি কোডের সাথে সাথে অন্য নির্ভরশীল ফাইলগুলিতে সিনট্যাক্স ত্রুটিটি তাত্ক্ষণিকভাবে সনাক্ত করতে পারেন (এবং তারপরে ইউনিট পরীক্ষার মতো পরীক্ষা করার জন্য অন্যান্য কৌশলগুলি ব্যবহার করেন যা সাধারণত দৈর্ঘ্যের ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কমিয়ে দেয়), আমার মনে হয় এসকিউএল নির্ভরতা সনাক্তকরণে এটি বোধগম্য হবে একটি সম্পূর্ণ কার্যকরী পরীক্ষা চালানোর চেয়ে কয়েক সেকেন্ডের মধ্যে ত্রুটিগুলি যা সাধারণত শেষ হতে কয়েক ঘন্টা সময় নিতে পারে।

উত্তর:


7

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


টেস্টগুলি সর্বদা কোডের 100% কভার করে না এবং যখন তারা সাধারণত চালাতে কয়েক ঘন্টা সময় নেয়। সি # তে, আমি সনাক্ত করতে পারি যে আমার কোডটি এখনও কয়েক সেকেন্ডে সংকলন করে (এটি যথার্থতা নির্বিশেষে)। এর অর্থ এই নয় যে কোডটি সঠিকভাবে পরীক্ষা না করেই কোডটি কোডের (সি # বা পিএলএসকিউএল নির্বিশেষে) উত্পাদনের দিকে ঠেলে দেওয়া উচিত, তবে ভাঙ্গা নির্ভরতা দ্রুত সনাক্ত করার কোনও উপায় অযৌক্তিক বলে মনে হয় না , এটি কি?
ব্রান

2
দুর্ভাগ্যক্রমে আর্টের এসকিউএল সার্ভারের এই মুহুর্তে সঞ্চিত পদ্ধতিতে ভিজ-এ-ভিজ নির্ভরতা সনাক্তকরণটি 'গভীরভাবে ভাঙ্গা' হয়েছে, এসকিউএল নির্ভরতা বোঝা বা এসকিউএল সার্ভার ২০০৮-এ সিএসডিপেন্ডেজ আপ টু ডেট রাখুন দেখুন । এমনকি তৃতীয় পক্ষের সরঞ্জামগুলি সমস্যাটি সমাধান করার চেষ্টা করছে
রেমাস রুসানু

2
এটি ইউনিট / ক্রিয়ামূলক পরীক্ষাগুলিকে ভঙ্গ পরিবর্তনগুলি সনাক্ত করার একমাত্র নির্ভরযোগ্য উপায় করে তোলে।
রিমাস রুসানু

1
দ্রুত চেক করার জন্য ভিজ্যুয়াল স্টুডিও ডাটাবেস প্রকল্পগুলি যে কোনও পরিবর্তনকে বৈধতা দেওয়ার জন্য একটি সুন্দর শালীন কাজ করে।
রিমাস রুসানু

4

এটি প্রায় কাজ, তবে আপনি ডাটাবেসের জন্য তৈরি প্রক্রিয়া স্ক্রিপ্টগুলি তৈরি করতে পারেন (ডান ক্লিক করুন ডাটাবেস -> কার্যগুলি -> স্ক্রিপ্টগুলি তৈরি করুন), বিকল্প পদ্ধতিতে ক্রিয়েট প্রক্রিয়াটি সন্ধান এবং প্রতিস্থাপন এবং পার্স করতে পারেন।

আমি আশা করি আপনি এখানে আরও ভাল উত্তর পাবেন - আমিও আগ্রহী! :)


আমি আপনার উত্তরটিকে স্বীকৃত হিসাবে চিহ্নিত করছি না কারণ আমি এখনও একটি পরিষ্কার সমাধান (আশা করি কোনও স্ক্রিপ্টযোগ্য) আশা করি তবে আপনি অবশ্যই আমার +1 পান! ধন্যবাদ।
ব্রান

3
আপনি যদি অস্তিত্বহীন টেবিলটি উল্লেখ করছেন তবে এই পদ্ধতির মাধ্যমে আপনাকে জানতে দেওয়া হবে না ।
নিক চামাস

উত্পাদিত স্ক্রিপ্টটি প্রায় 30 কে লাইনের চেয়ে বড় হলে এই পদ্ধতিও কাজ করবে না। আমি ঘৃণা করি যে আমি এটি জানি ..
এওনসদন

3

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


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

3

আপনি এই এসও প্রশ্নটি দেখতে চাইতে পারেন আমি টি-এসকিউএল সঞ্চিত পদ্ধতি যাচাই করার জন্য একটি নির্ভরযোগ্য উপায় খুঁজছি। কেউ পেয়েছেন? যা বেশ কয়েকটি উত্তর সহ মূলত একই জিনিস জিজ্ঞাসা করছে।

আলা আবাদ পোস্ট করা স্ক্রিপ্টটি তৈরি করতে ... এটি রেফারেন্স এবং রেফারেন্সিং অবজেক্টগুলির স্কিমা এবং ডাটাবেস প্রদর্শন করবে। আপনি যদি sys.sql_expression_dependenciesএলিয়াসগুলির মাধ্যমে অনেকগুলি টেম্প টেবিল ব্যবহার করেন (যা কখনও কখনও ব্যবহারের সময় প্রদর্শিত হয় ), ইউডিটিটি প্যারামিটার বা অন্যান্য গতিশীল বৈশিষ্ট্যগুলির জন্য আপনাকে ফাংশনগুলি ব্যবহার করার প্রয়োজন হতে পারে sys.dm_sql_referenced_entitiesবা sys.dm_sql_referencing_entitiesতার পরিবর্তে / এছাড়াও।

SELECT
    DB_NAME() + '.' + OBJECT_SCHEMA_NAME(sed.referencing_id) + '.' + OBJECT_NAME(sed.referencing_id) AS [referencingObject],
    isnull(sed.referenced_server_name + '.', '') + isnull(sed.referenced_database_name + '.', DB_NAME() + '.') + isnull(sed.referenced_schema_name + '.', OBJECT_SCHEMA_NAME(sed.referencing_id) + '.') + sed.referenced_entity_name AS [missingReference]
FROM 
    sys.sql_expression_dependencies sed
WHERE 
    sed.is_ambiguous = 0
    AND OBJECT_ID(isnull(sed.referenced_database_name + '.', DB_NAME() + '.') + isnull(sed.referenced_schema_name + '.', OBJECT_SCHEMA_NAME(sed.referencing_id) + '.') + sed.referenced_entity_name) IS NULL
ORDER BY
    [referencingObject], [missingReference]

1
এগুলিকে এই দফায় যুক্ত করা উচিত: / * কোনও বিদ্যমান ব্যবহারকারী টাইপ নয় / এবং সিড। রেফারেন্সডেন্টস_নাম্টি নাম নেই (সিসি টাইপগুলি থেকে নির্বাচন করুন (নাম নির্বাচন করুন) / একটি উপন্যাস নয় * / এবং সিড। রেফারেন্স_স্কেমি_নাম নাল নয়
জেসন ব্লুফায়ার

1

এসকিএল সার্ভার ২০০৮-তে যুক্ত হওয়া sys.sql_expression_d dependferences ব্যবহার করুন

CREATE PROCEDURE [dbo].[spMaintenance_Find_Broken_Dependencies]

AS
SELECT
    OBJECT_NAME(referencing_id) AS [referencingObject],
    referenced_entity_name AS [missingReference]
FROM 
    sys.sql_expression_dependencies
WHERE 
    is_ambiguous = 0
    AND OBJECT_ID(referenced_entity_name) IS NULL
ORDER BY 
    OBJECT_NAME(referencing_id), referenced_entity_name

GO

এটি দরকারী হতে পারে, তবে এটি এত সহজ নয় কারণ স্কিমারও অ্যাকাউন্টে নেওয়া দরকার। আমি ss.sql_expession_d dependency প্রকৃত নির্ভরশীল টেবিলের পরিবর্তে ব্যবহৃত উপনাম প্রদর্শন করছি যা অবজেক্ট_আইডি () পরীক্ষা ব্যর্থ করে। অবশেষে এটি সঞ্চিত পদ্ধতিতে প্যারামিটার হিসাবে পাস করা ব্যবহারকারী-সংজ্ঞায়িত সারণীগুলি নিয়ে আসে - যা সত্যই কার্যকর নয়।
তাবলু কুইজিকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.