مدیریت پایگاه‌های اطلاعاتی، یكی از ابزارهای جالب قابل استفاده در SQL Server را كه امكان

 نقل و انتقال اطلاعات و یا پردازش آن‌ها را به‌صورت دستی یا اتوماتیك و در قالب یك یا چند عمل

 مجزا و در عین حال مرتبط با یكدیگر فراهم می‌آورد، مورد بررسی قرار می‌دهیم. این ابزار كه

 سرویس انتقال اطلاعات (Data Transformation service) نام دارد شامل سه قسمت مختلف بوده
 
كه مهمترین آن بسته‌های (DTS (DTS Packages است.


DTS چیست؟
DTS یك ابزار  با واسط گرافیكی كاربر جهت انتقال اطلاعات موردنیاز از یك محل به محل دیگر است. با استفاده از این  ابزار می‌توان یك سری از اطلاعات موجود در سیستم را با استفاده از روش‌های عادی كاری پایگاه داده مانند دستور SELECT انتخاب كرده و به یك یا چند مقصد مختلف فرستاد. ویژگی دیگر این نوع انتقال اطلاعات این است كه می‌توان آن را با استفاده از روش‌های مخصوص، زمانبندی (schedule) كرده تا به صورت اتوماتیك انجام شود. ویژگی سوم آن این است كه علاوه برامكان استفاده از زبان SQL  برای استخراج اطلاعات یا پردازش قبل از انتقال آن، می‌توان با استفاده از امكانات دیگری  پردازش و انتقال اطلاعات را انجام داد. البته واژه DTS در كل به یك سری ابزارها و سرویس‌های مختلف اطلاق می‌شود كه مهمترین ابزار یا قسمت آن همان
 بسته‌های ( DTS (PACKAGE DTS بوده كه كار مهم انتقال و پردازش زمانبندی شده اطلاعات را انجام می‌دهد.

بسته‌های DTS 
این بسته‌ها كه مهمترین قسمت ابزارهای DTS می‌باشند، با استفاده امكاناتی كه در آن‌ها تعبیه شده است، قادرند وظیفه انتقال و پردازش اطلاعات را در قالب یك روتین كه می‌تواند شامل مسیرهای متوالی یا موازی می‌باشد انجام دهند. این روتین در قالب یك فایل ساختاریافته با فرمت‌هایی مثل فرمت برنامه‌ها و ماژول‌های ویژوال بیسیك یا فرمت‌های دیگری نظیر فایل‌های Meta ذخیره می‌شود و با استفاده از روش‌هایی قابل زمانبندی، ویرایش، تغییر و همچنین رمزگذاری می‌باشند. یك بسته DTS در واقع شامل چند آیتم مرتبط به یكدیگر بوده كه هر كدام یك وظیفه مشخص را انجام داده و نتیجه را به دیگری انتقال می‌دهند.

این آیتم‌ها به‌عنوان Task نامگذاری شده و در واقع محتویات یك بسته DTS را تشكیل می‌دهند. هر كدام از Task‌های موجود در یك بسته DTS به صورت جداگانه توسط كاربر پیكربندی شده و وظیفه موردنظر مثل پردازش، كپی‌كردن و یا انتقال اطلاعات به آن انتساب داده می‌شود.
 
سپس با به‌وجود آوردن ارتباط لازم میان Task‌های موجود، امكان عملی كردن فرآیند موردنظر میسر می‌شود. یك Task می‌تواند یكی از انواع زیر باشد: 

1- Importing / Exporting 
این نوع Task قادر است اطلاعات را از جایی مثل یك جدول بانك اطلاعاتی SQL Server یا هر نوع دیگر مثل اكسس و یا یك فایل ساده  Text بخواند و آن را در یك جدول بانك اطلاعاتی SQL Server وارد (Import) كند. همچنین این Task می‌تواند عكس این عمل را انجام دهد. یعنی اطلاعات یك جدول بانك اطلاعاتی یا قسمتی از آن اطلاعات را به فرمت اكسس، اكسل یا فایل متنی (Text) درآورد (Export) و آن را در مقصد موردنظر قرار دهد.

2- Transform 
با استفاده از این نوع Task می‌توان با نوشتن یك دستورالعملSELECT نتیجه حاصل از عمل پرس‌وجو برروی یك یا چند جدول بانك اطلاعاتی مبدا را به یك جدول موجود در بانك اطلاعاتی مقصد انتقال داد. در این روش بانك اطلاعاتی مبدا و مقصد می‌توانند جدا از هم و یا یكسان باشند.

3- Copy 
این نوع Task می‌تواند هر موجودیتی در یك بانك اطلاعاتی مثل دیدها (view)، ایندكس‌ها، لاگ‌ها، روتین و توابع، تریگرها و هر چیزی را به یك بانك اطلاعاتی دیگر منتقل كند.

4- Send/Receive Message
با این نوعTask  می‌توان بین بسته‌های مختلف DTS موجود در سیستم ارتباط برقرار كرده و بین آن‌ها پیغام رد و بدل كرد. همچنین با استفاده از آن می‌توان یك بسته را در داخل یك بسته دیگر فراخوانی یا اجرا كرد. به‌علاوه این‌كه این نوع Task امكان ارسال Email را هم دارد.

5- Execute 
با استفاده از این نوع Task می‌توان یك سری دستورالعمل SQL یا حتی اسكریپت‌های ActiveX و یا فایل‌های Exe   را اجرا كرد.

Taskهای از پیش تعریف شده در SQL Server عبارتند از:

1-FTP : جهت دریافت یك یا چند فایل از یك سرور FTP به داخل بسته DTS  

2- ActiveX Script: برای استفاده از قابلیت‌های زبان‌های اسكریپتی مثل ویژوال بیسیك یا جاوا در یك پردازش ‌خاص.

3- Transform Data: جهت انتقال اطلاعات بین دو منبع اطلاعاتی.

4- Execute Process: جهت اجرای یك فایل Exe 

5- Execute SQL: جهت اجرای یك سری دستورات SQL 

6- Data Driven Query: برای ایجاد یك منبع انتقال اطلاعات با استفاده از دستورSELECT 

7- Copy Object: اینTask می‌تواند كلیه موجودیت‌های یك بانك اطلاعاتی را به بانك اطلاعاتی دیگر منتقل كند.

8- Send Mail: جهت ارسال ایمیل به یك مقصد مشخص

9- Bulk Insert: جهت ورود (Import) اطلاعات از یك فایل به یك جدول بانك اطلاعاتی

10- Execute Package: با استفاده از این Task می‌توان یك بسته DTS دیگر را در داخل بسته DTS جاری لود و اجرا كرد.

11- Message Queve II: برای استفاده از امكانات پیغام‌دهی سرویس MSMQ ویندوز 2000 یا 2003 برای مبادله پیغام بین برنامه‌ها و  ایستگاه‌های مختلف

12- Transfer Error Massages: برای انتقال پیغام‌های خطای موجود در جدول سیستمی sysmessages از یك بانك اطلاعاتی به بانك دیگر

13- Transfer DataBase: برای انتقال كل بدنه یك بانك اطلاعاتی با تمام محتوا، ساختار و اطلاعاتش از یك سرور به سرور دیگر.

ارتباط DTS  
مبدا و مقصد داده‌های منتقل شده توسط Task‌ها، می‌توانند از انواع فایل‌های مختلف انتخاب شوند. كلیه منابع اطلاعاتی كه از OLEDB و یا ODBC پشتیبانی كنند مانند اوراكل، كلیه فرمت‌ها برنامه‌های مشهوری كه در ذخیره و پردازش اطلاعات كاربرد زیادی دارند مثل اكسل، فاكس‌پرو، پاراداكس، اكسس و امثال آن، فایل‌های متنی و همچنین كلیه منابع اطلاعاتی كه ساختاری به غیر از بانك‌های رابطه‌ای دارند مثل Exchange Server و بسیاری برنامه‌های دیگر، می‌توانند از جمله این موارد باشند و در ساختن یك بسته DTS به عنوان مبدا یا مقصد به‌كار روند.

شكل 1

شكل 2

شكل 3

شكل 4

شكل 5

DTS Work Flow
مراحل زمانی و توالی اجرای قسمت‌های مختلف یك بسته DTS را جریان كاری DTS می‌نامند. در واقع با استفاده از این جریان‌های كاری می‌توان مشخص كرد كه كدام Task باید زودتر اجرا شود و یا این‌كه اجرای یك Task پیش نیاز اجرا شدن چه Task (های) دیگری است. بدین‌وسیله اجرا شدن هر Task نسبت به Task دیگری دارای اولویت كمتر، بیشتر و یا حتی برابر می‌تواند باشد. بدین‌معنی كه در برخی اوقات یك Task باید تا اتمام موفقیت‌آمیز یك Task  دیگر صبر كند.

این مورد بیشتر در جایی كاربرد دارد كه یك Task باید برروی خروجی و یا اطلاعات حاصل از نتیجه پردازش یك Task   دیگر كار كند. در برخی اوقات هم اگر عملكرد دو Task هیچ ربطی به یكدیگر نداشته باشند، می‌توان زمان اجرای آن دو را به صورت موازی (Parallel) یعنی اجرای همزمان (در صورت امكان) درنظر گرفت.

در SQL Server سه نوع جریان كاری مختلف وجود دارد كه به نام‌های on completion ،on success ،on failure  عبور از یك Task به Task دیگر را به ترتیب در صورت اتمام پردازش، پردازش موفقیت‌آمیز و پردازش غیرموفق Task  مبدا، انجام می‌دهند.

به عنوان مثال: فرض كنید در یك سیستم اطلاعاتی توزیع شده (Distributed) به‌صورت منظم و روزانه و در یك ساعت خاص باید به یك سایت FTP متصل شده، یك فایل با نام  Imp.txt را كه هر روز در سایت مذكور روزآمد update می‌شود را دریافت كرده، و آن را در جدول customers از پایگاه داده Northwind قرار دهیم.
 
فرض می‌كنیم این فایل متنی (Text) شامل لیست مشتریان جدیدی است كه روزانه به سیستم فروش ما اضافه می‌شود. بنابراین پس از قرار دادن مشتریان جدید در جدول مذكور باید یك دستور SQL را اجرا كنیم تا برای مشتریان تازه وارد شده در جدول customers یك حساب تفضیلی در جدول Accounts ایجاد كند.
 
از قرار معلوم در این مثال به یك DTS Connection جهت دسترسی به پایگاه داده Northwind، یك Task از نوع FTP ، یك Task دیگر از نوع  Bulk Insert و  نهایتاً یك Task از جنس Execute SQL نیازمندیم. به همین منظور بر روی زبانه Data Transformation Services در Enterprise Manager كلیك كرده  سپس بر روی آیتم Local Package كلیك سمت راست می‌كنیم و دستور New Package را انتخاب می‌كنیم تا پنجره ویژه طراحی بسته‌های DTS باز شود. ابتدا یك Connection از جنس OLEDB را بر روی صفحه قرار داده و آن را به پایگاه داده Northwind متصل می‌كنیم. (شكل 1)‌

سپس از داخل لیست وظایف (Tasks)، یك شی از جنس FTP را برروی صفحه قرار داده و آدرس سایت موردنظر و مكان قرارگیری فایل دانلود شده را در محل Directory Path مشخص می‌كنیم، سپس به زبانه Files رفته و فایل یا فایل‌هایی را كه قرار است دانلود شوند مشخص می‌نماییم كه در این مثال یك فایل متنی با نام New Customer.txtرا كه حاوی اطلاعات مشتریان جدید است انتخاب می‌كنیم. (شكل2)‌

در مرحله بعد یك شی از جنس BULK Insert را برروی صفحه طراحی قرار داده و قسمت‌های Connection ،Table و Data file آن را به ترتیب با اتصال پایگاه ساخته شده، جدول مشتریان و مقصد فایل دانلود شدنی توسط FTP را پر می‌كنیم. (شكل 3)

در آخرین مرحله ایجاد اشیاء، اكنون نوبت به ایجاد یك شی Execute SQL جهت اجرای تابع از پیش ساخته شده است كه برای كلیه مشتریان جدید جدول customers یك حساب در جدول Accounts باز می‌كند. این شی را بر روی صفحه قرار داده و دستور SQL موردنظر را در محل SQL statement وارد می‌كنیم. (شكل 4)

پس از ایجاد تمام اشیاء موردنیاز، اكنون نوبت به ایجاد جریان‌های كاری لازم (WorkFlows) بین آن‌ها می‌رسد. آنچه به نظر می‌رسد این است كه ابتدا یك جریان كاری بین دو موجودیت FTP و BULK Insert ایجاد كنیم. از آنجا كه این جریان كاری باید فقط در صورت موفقیت‌آمیز بودن عملیات دریافت فایل توسط شی FTP منتقل شود، بنابراین برای ایجاد جریان كاری مذكور، با استفاده از حركت ماوس هر دو شی مذكور را انتخاب كرده و سپس از منوی WorkFlow  دستور on success را انتخاب می‌كنیم. همین عمل را برای دو شی Bulk Insert و Execute SQL هم انجام می‌دهیم. (شكل 5)
 
اكنون بسته DTS آماده اجرا است. این بسته می‌تواند هم به صورت دستی و از همین محل طراحی تست یا اجرا شود و هم می‌تواند برای اجرا در مقاطع زمانی خاص (مثلاً روزی یك بار) در ساعت مخصوص زمانبندی (schedule)  شود تا به صورت خودكار و در زمان موردنیاز اجرا گردد. بدین‌منظور، پس از ساختن و ذخیره كردن بسته DTS مذكور، از محیط طراحی DTS خارج شده و برروی نام بسته موردنظر كلیك سمت راست می‌كنیم و دستور Schedule Package را انتخاب می‌نماییم. در اینجا می‌توانیم زمان و توالی اجرای اتوماتیك بسته DTS ساخته شده را تعریف كنیم.