Deploy کردن Package های طراحی شده در SSDT بر روی سرور SSIS
حال ما همه پکیج های مورد نظرمان را داخل SSDT طراحی کرده ایم. اکنون نیاز داریم که این پکیج ها را روی یک سروری قرار دهیم تا به طور عملیاتی و واقعی از آنها استفاده کنیم و بتوانیم برای اجرای آنها زمان بندی در نظر بگیریم.
فرآیندی که پکیج های طراحی شده را روی SSIS Server استقرار میدهیم Deploy نامیده میشود.
در واقع وظیفه SSIS این است که پکیج های ETL ما را اجرا کند.
داخل SQL Server ، بخشی به نام SQL Agent داریم که برای ساخت Job و زمان بندی اجرای پکیج ها به ما کمک میکند.
در ابتدا به نحوه ی انجام Deploy میپردازیم.
روش اول : (توصیه نمیشود)
در روش اول روی پروژه Integration Service راست کلیک کرده :

وارد Properties شده و به بخش Deployment میرویم و نام سرور را مشخص میکنیم.
همچنین به بخش General رفته و Deployment Target Version را بررسی میکنیم ، اگر در این قسمت مغایرت داشته باشیم ، اجرای پکیج ها در سرور با خطا مواجه میشوند.

سپس پنجره های مرتبط را بسته و مجددا روی پروژه Integration Service راست کلیک کرده و Deploy را میزنیم.

پس از آن پنجره ای با اطلاعات زیر برایمان باز میشود.

دکمه Browse را میزنیم و با ارور زیر مواجه میشویم :

برای رفع این ارور باید پوشه ای در Database Engine بسازیم تا پکیج ها داخل آن قرار بگیرند.

روی فولدر Integration Services Catalog کلیک راست کرده و Create Catalog را میزنیم. در پنجره باز شده پسورد مورد نظرمان را میدهیم و در صورت نیاز نام کاتالوگ را تغییر میدهیم و سپس Ok را میزنیم.

اینجا Integration برایمان دیتابیس SSISDB را میسازد که شامل اطلاعات اجرای تسک ها و پکیج ها و زمان اجرای آنها میباشد.
به صورت کلی میتوان گفت این دیتابیس شامل لاگ های اجرای پکیج های ETL میباشد.

در Integration Services Catalogs بر روی SSISDB راست کلیک کرده و Create folder را میزنیم. داخل این فولدر میتوانیم پکیج ها را قرار دهیم.
حال دوباره به SSDT میرویم و به قسمت Deploy برمیگردیم و درقسمت Path ، فولدری که ساختیم را browse میکنیم و در نهایت Deploy میکنیم.
حال میتوانیم در SQL Server مشاهده کنیم که همه پکیج های ساخته شده با موفقیت Deploy شده اند.

روش دوم برای Deploy :
روی پروژه Integration Service راست کلیک کرده و Build را بزنید.

به فولدر Solution رفته و از طریق فولدر bin ، Deployment ، فایلی که فرمت ispac دارد را انتخاب میکنیم. و آن را به عنوان مثال روی Desktop کپی میکنیم.
حال نیاز به یک برنامه ای داریم که به وسیله ان ispac را Deploy کنیم.

مطابق مسیری که در تصویر میبیند حرکت کرده و برنامه isDeploymentWizard را اجرا میکنیم.
در پنجره باز شده ، گزینه Project Deployment File را انتخاب کرده و فایل ispac را به آن میدهیم. سایر مراحل Deploy مانند روش اول میباشد.
در روش دوم در واقع خروجی پروژه SSDT را داخل خود سرور ، روی خود سرور Deploy کردیم بر خلاف روش اول که میتوانستیم آن را به صورت ریموت Deploy کنیم.
* توجه کنید اگر پکیجی را روی سرور قرار دادید ، Connection String های ان را چک کنید.
حال با پکیج های Deploy شده چه کار هایی میتوانیم انجام دهیم؟

میتوانیم روی پکیج ها راست کلیک کرده و آنها را به صورت دستی Execute کنیم. اگر اجرا کنیم ، پنجره ای ظاهر میشود و به ما پیشنهاد مشاهده یک گزارش از فرآیند اجرای پکیج را میدهد. اطلاعات این Report ار دیتاهای موجود در SSISDB تامین میشود.

* هر تغییری که در SSDT روی پکیج ها انجام میدهید ، نیازمند است مجددا فرآیند Deploy صورت بگیرد تا تغییرات روی سرور هم لحاظ شود.
اگر روی فولدری که پکیج ها در آن قرار دارند راست کلیک کنیم ، با گزینه ای به نام Versions مواجه میشویم.

در این قسمت هر بار که پکیج ها را Deploy کرده ایم ، برای ما ذخیره کرده است.

اگر در آخرین ورژنی که Deploy کرده ایم ، به مشکلی برخوردیم ، میتوان از ورژن های قبلی موردی را انتخاب کرده و Restore to selected version را بزنیم.
اگر بخواهیم معماری پکیج هایی را که توسط شخص دیگری طراحی شده اند و روی سرور قرار گرفته اند را تغییر دهیم ، میتوان از انها Export گرفته و از طریق Integration Service Import Project Wizard آن ها را داخل SSDT آورده و تغییرات مد نظر را اعمال کنیم.
در نتیجه اگه پروژه ی ETL ای داشتیم که پکیج ها روی سرور قرار داشتند و قصد تغییر آنها را داشتیم اما به سورس آنها دسترسی نداشتیم ، میتوان از Integration Service Import Project Wizard استفاده کرد.

* SSISDBبا هر بار اجرای پکیج ها ، رکورد جدید داخلش قرار میگیرد ، در نتیجه رفته رفته حجم بسیار زیادی به خود میگیرد. به همین دلیل باید آن را داخل درایوی قرار داد که حجم بالایی داشته باشد و ترجیحا در درایو C قرار نگیرد.
البته خود SSISDB تنظیماتی دارد که میتوان در آن لاگ ها را به صورت دوره ای پاک کرد.
روی SSISDB راست کلیک کرده و وارد قسمت Properties شوید و قسمت Clean Logs Periodically را روی True قرار داده و Retention Period را روی عدد تعداد روز های مورد نظر قرار میدهیم. برای مثال اگر روی ۷ آن را ست کنیم ، لاگ ها را تا ۷ روز برایمان ذخیره میکند.

سرویس SQL Agent :
همه عملیات های مرتبط به دیتابیس را به صورت زمان بندی شده برایمان انجام میدهد.
ما برای اینکه اجرای پکیج ها را زمانبندی کنیم که مثلا هر دو ساعت یکبار اجرا شوند باید اول Job بسازیم و بعد زمانبندی اجرا آن را تنظیم کنیم که اینکارها در SQL Agent انجام میشود.
روی SQL Server Agent راست کلیک کرده و آن را Start میکنیم.
حال باید یک Job بسازیم. Job شامل چندین مرحله step میباشد که به هر ترتیبی میتوانند اجرا شوند و زمان بندی داشته باشند.
روی job راست کلیک کرده و New job را میزنیم.

در قسمت General نامگذاری های مورد نیاز را انجام میدهیم و وارد بخش Steps میشویم.

چیزی که میخواهیم به صورت زمانبندی اجرا شود ، پکیج های Integration Services میباشد. در نتیجه Type را روی SSIS package قرار میدهیم.
* در این قسمت نام سرور لوکال را به صورت . وارد نکنید ، ip سرور را به صورت کامل بنویسید.
* اگر ip را نمیدانید ، وارد cmd شوید و دستور ipconfig را بزنید. IPv4 Address نشان دهنده ip شماست.
سپس پکیج مد نظر را انتخاب میکنیم. توجه کنید در هر step یک پکیج را میتوانید قرار دهید.
در job میتوانید در stepهای متفاوت به پارامتر های مورد نیاز یک پکیج ، مقادیر مختلف بدهید.
وارد قسمت Advanced میشویم. در این قسمت میتوانیم مشخص کنیم در صورت اجرای ناموفق step چه تصمیمی گرفته شود ، آیا Step بعدی اجرا شود و یا اجرای job متوقف شود.
حالا وارد قسمت Schedules میشویم که میتوان مشخص کرد زمانبندی اجرای Job به چه صورت باشد.
تنظیمات این قسمت را بر اساس نیاز خود میتوانید انجام دهید و در قسمت Description در فوتر میتوانید نحوه اجرا چک کنید.

همچنین میتوانید Job را بدون توجه به Schedule ای که برایش نوشته اید به صورت دستی اجرا نمایید. برای انجام این مطابق تصویر عمل کنید :

* اگر پکیجی در حالت عادی و به صورت دستی Execute میشود اما همان پکیج داخل Job اجرا نمیشود و ارور میدهد ، وارد Job شوید و Owner را sa قرار دهید. یوزر sa بالاترین سطح دسترسی را دارد و هر کاری داخل Sql Server میتواند انجام دهد.