আমার কাছে দুটি এসএসআইএস প্যাকেজ রয়েছে যা কোনও সমস্যা ছাড়াই বৃহত্তর এসএসআইএস স্থাপনার অংশ হিসাবে রাতারাতি নির্ধারিত (এসকিউএল সার্ভার এজেন্টের মাধ্যমে) চালিত হয়। সবকিছু উইন্ডোজ প্রমাণীকরণ ব্যবহার করছে এবং নির্ধারিত কাজটি সিসাদমিনের (ভাল, আমি) মালিকানাধীন এবং এসকিউএল সার্ভার এজেন্ট পরিষেবা অ্যাকাউন্ট হিসাবে চালানো হয় ।
সুতরাং, ডেটাগুলি মূলত source system ~> transit db ~> staging ~> NDS
রাতারাতি চলে ।
আমি যে দুটি এসএসআইএস প্যাকেজটি যত্ন করি সেগুলি নির্দিষ্ট নির্দিষ্ট ডেটার জন্য যথাক্রমে transit db ~> staging
এবং staging ~> NDS
যন্ত্রাংশগুলি পরিচালনা করে handle
একটি ডোমেন ব্যবহারকারী (নন-সিসাদমিন) এর মধ্যে কিছু করে source system
এবং এটি আকর্ষণীয় ডেটাগুলিকে ঠেলে দেয় transit db
তাই আমার আপডেট করার জন্য কাজের সময় এই আপডেট হওয়া ডেটাটি আনার একটি উপায় প্রয়োজন NDS
: সিদ্ধান্ত নেওয়া হয়েছিল যে এই ব্যক্তির সহজতম উপায়টি ট্রিগার করার জন্য যে ইটিএলটি ম্যাক্রো-সক্ষম সক্ষম এক্সেল ওয়ার্কবুকের একটি বোতামে ক্লিক করে ছিল, যা ওডিবিসি (উইন্ডোজ প্রমাণীকরণ ব্যবহার করে) এর মাধ্যমে এসকিউএল সার্ভারের সাথে সংযোগ স্থাপন করে এবং একটি সঞ্চিত পদ্ধতি কার্যকর করে।
সঞ্চিত পদ্ধতিটি এর মতো দেখাচ্ছে:
create procedure dbo.UpdateMaterialInventory
as
begin
execute msdb.dbo.UpdateMaterialInventory;
end
[এমএসডিবি] তে "বোন" সঞ্চিত প্রক্রিয়াটি দেখতে এমন দেখাচ্ছে:
create procedure dbo.UpdateMaterialInventory
with execute as 'SqlAgentProxy'
as
begin
execute msdb.dbo.sp_start_job N'NDS-ManualMaterialInventory';
end
এই [স্কেলএজেন্টপ্রক্সি] ব্যবহারকারীটি একটি উইন্ডোজ ব্যবহারকারী যা আমি [এমএসডিবি] ডোমেন ব্যবহারকারীর লগইন বন্ধ করে তৈরি করেছি, যার কাছে আমি execute
এই UpdateMaterialInventory
পদ্ধতির অনুমতি পেয়েছি granted এটি ডোমেন ব্যবহারকারীর execute
অনুমতি প্রদান msdb.dbo.sp_start_job
করা এড়াবে, যা অতিরিক্ত হবে।
এসকিউএল এজেন্ট কাজটি NDS-ManualMaterialInventory
ডোমেন ব্যবহারকারীর মালিকানাধীন এবং 2 ধাপ রয়েছে, প্রতিটি ধরণের [এসকিউএল সার্ভার ইন্টিগ্রেশন সার্ভিসেস প্যাকেজ] রয়েছে, রান হিসাবে সেট আপ করা হয়েছে SSISProxy
।
SSISProxy
শংসাপত্রের নাম ব্যবহার করে একটি এসকিউএল সার্ভার এজেন্ট প্রক্সি যা [এসকিউএল সার্ভার ইন্টিগ্রেশন পরিষেবা প্যাকেজ] সাবসিস্টেমটিতে ম্যাপ করা হয়েছে SSISProxyCredentials
। প্রক্সি অ্যাকাউন্টের অধ্যক্ষগুলিতে ডোমেন ব্যবহারকারীর লগইন যুক্ত হয়েছিল ।
SSISProxyCredentials
সঙ্গে তৈরি করা হয়েছিল পরিচয় সমগ্র SSIS সংক্ষিপ্তসার ETL রাতারাতি চালাচ্ছে যে একই ডোমেইন ব্যবহারকারীর, এবং তার পাসওয়ার্ড চতুর্গুণ পরীক্ষা ছিল।
এখন, আমি যদি এটি চালাই:
execute as login=N'DOMAIN\thatperson'
exec NDS.dbo.UpdateMaterialInventory;
go
আমি এই আউটপুট পেতে:
Job 'NDS-ManualMaterialInventory' started successfully.
তবে কাজের ইতিহাস অনেক কম উত্সাহজনক গল্প বলছে:
The job failed. The Job was invoked by User DOMAIN\thatperson.
The last step to run was step 1 (Extract).
এবং পদক্ষেপ 1 বিশদ:
Executed as user: {domain user that runs SSIS ETL overnight}.
Microsoft (R) SQL Server Execute Package Utility Version 12.0.4100.1 for 64-bit
Copyright (C) Microsoft Corporation. All rights reserved.
Started: 2:18:50 PM Failed to execute IS server package because of error 0x80131904.
Server: {server name}, Package path: \SSISDB\Foo\Bar\foobar.dtsx, Environment reference Id: NULL.
Description: Login failed for user '{domain user that runs SSIS ETL overnight}'.
Source: .Net SqlClient Data Provider
Started: 2:18:50 PM Finished: 2:18:51 PM Elapsed: 0.094 seconds.
The package execution failed.
The step failed.
কাজ ব্যর্থ হয় এবং কিছুই কোথাও লগ হয় না।
আমি যদি চাকরীর মালিককে নিজের হিসাবে পরিবর্তন করি এবং এসকিউএল সার্ভার এজেন্ট পরিষেবা অ্যাকাউন্ট হিসাবে চালিত পদক্ষেপগুলি পরিবর্তন করি তবে, চাকরীটি চালিত হয়, সফল হয় এবং [মেটাডাটা] তে 1,067 সারি লগ করে [[dbo]] [sysssislog]।
দেখে মনে হচ্ছে প্রক্সি / শংসাপত্রগুলি কীভাবে সেট আপ হয় সে সম্পর্কে সঠিক কিছু নেই। কোন অংশটি আমি ভুল করছি?