PDA

View Full Version : کمک در باره استفاده از job دیتابیس sqlserver برای زمانبندی اجرای یک صفحه یا عملی خاص



Ali1400
پنج شنبه 23 شهریور 1385, 15:29 عصر
دوستان عزیز بنده در اغلب گفتگوهایی که در مورد زمانبندی انجام کاری خاص صورت گرفته بود ملاحظه کردم، متاسفانه به نتیجه مطلوب نرسیدم زیرا برای راهکارهای در نظر گرفته شده یا باید حداقل یک یوزر سایت را هر چند وقت یکبار می دید یا اینکه با restart شدن سرور عمل زمانبندی شده از کار می افتاد تا دوباره ما آن صفحه را اجرا کنیم .
حال اگر فرض شود که ما در آن مدت بازدیدکننده نداشتیم یا از restart شدن سرور خبر نداشتیم ، خوب کل برنامه تعطیل می شود و آن کار خاص را که می خواستیم انجام بدهیم ممکن است تا مدتی که متوجه این اشکال بشویم انجام نگیرد.
البته این را هم در نظر بگیرید که هاست ما معمولی بوده و اجازه رجیستر کردن DLL برای ویندوز سرویس یا ISS نداریم و نیز نمی خواهیم متکی به سایتهایی شویم که صفحه مورد نظر ما را در زمانهای خاصی که به آنها می گوییم اجرا کنند.
بنابراین یک راه دیگر استفاده از job خود sqlserver می باشد که البته در یک گفتگو بحث ناقصی شده بود (البته شاید برای من مبتدی).
حال دوستانی که با sqlserver و job آشنایی دارند خواهشمندم به سئوالات بنده پاسخ دهند.
که آیا می شود به این وسیله با استفاده از نوشتن اسکریپت در job بتوانیم صفحه ای را اجرا کنیم و نحوه آن را کامل توضیح دهید به همراه مثال.
البته توجه داشته باشید که هاست مورد نظر ما معمولی بوده و دسترسی اضافی نداریم .
با تشکر

manager
پنج شنبه 23 شهریور 1385, 19:39 عصر
سوالتون جالبه ولی مطمئن هستم شما جستجو نکردید !!!!!!!!!!! در مورد زمانبندی به وفور صحبت شده یکی از بهترین روش هاش هم استفاده از Cache هست که شما ازش نامی نبردید ...
در ضمن اگر سوتالتون رو تو بخش SQL-Server می پرسیدید زودتر به جواب می رسیدید !!!!!!

manager
پنج شنبه 23 شهریور 1385, 19:53 عصر
http://www.codeproject.com/useritems/Schedule__Run__SSIS__DTS.asp

Ali1400
پنج شنبه 23 شهریور 1385, 21:12 عصر
با تشکر از توجه شما
در روشهایی که بنده ذکر کردم و گفتگوهایی که در سایت نیز می باشد یکی از ترفندها cache کردن است که همانطور که قبلا نیز گفتم اگر سرور restart بشود cache ما هم خالی شده و دیگر کار نمی کند مگر اینکه ما متوجه این امر شده و دوباره آن را فعال کنیم و یا یوزری از سایت ما دیدن کند که با توجه به اینکه قصد داریم همه چیز اتوماتیک و بدون دخالت ما و همچنین بدون وقفه باشد پس باز با cache کردن مشکل خواهیم داشت.
و اما چون بنده هدفم استفاده از job در صفحات وب بود لیکن بهتر دیدم در این تالار سئوالم را مطرح کنم و از تجربه وب نویسان استفاده کنم تا کسانی که در دسکتاپ برنامه می نویسند ، چون به هر حال در سرورهای میزبانی وب ما به اندازه پی سی ها دسترسی نداریم .
ودر ضمن sqlserver همیشه با بالا آمدن سیستم عامل سرورها اجرا شده و دیگر نگرانی از بابت اجرا نشدن ، restart شدن و همچنین عدم بازدید کننده نداریم.
فقط می خواهم بدانم آیا می شود در job دیتا بیس sqlserver در یک پریود زمانی خاص دستور اجرای یک صفحه یا تابعی را داد. و اگر می شود چگونه و همچنین آیا بدون دسترسی اضافی به سرور می شود آن job ساخته شده را به هاستمان همراه دیتابیس آپلود کرد و نیز سرور آن را اجرا کند با همان حسابی که به برای aspnet تعریف شده

titbasoft
پنج شنبه 23 شهریور 1385, 21:29 عصر
در سرور های اشتراکی شما اجازه تعریف Job رو نخواهید داشت.

ضمنا توی اون مقاله که در مورد cache هست راه حل هایی برای شروع مجدد پروسه کاری پیشنهاد شده که قابل پیاده سازی هم هست:


One tricky solution to this problem can be adding your website to search engines. Search engines crawl pages frequently. So, they will hit a page of your website resulting in Application_Start and thus the service will get up and running.
Another idea is to register your website to some traffic or availability monitoring services. There are lots of web services which keep an eye on your website and checks whether it is alive and the performance is satisfactory. All these services hit your web site pages and then collect the statistics. So, by registering in such services, you can guarantee your web application is alive all the time

Ali1400
پنج شنبه 23 شهریور 1385, 21:41 عصر
در صورت امکان از آن راه حلها باتوجه به فرضیات من ( عدم بازدید کننده و احتمال restart شدن سرور و عدم دسترسی اضافی به سرور ) نام برده و کمی توضیح دهید

manager
جمعه 24 شهریور 1385, 00:31 صبح
ضمنا توی اون مقاله که در مورد cache هست راه حل هایی برای شروع مجدد پروسه کاری پیشنهاد شده که قابل پیاده سازی هم هست:



One tricky solution to this problem can be adding your website to search engines. Search engines crawl pages frequently. So, they will hit a page of your website resulting in Application_Start and thus the service will get up and running.
Another idea is to register your website to some traffic or availability monitoring services. There are lots of web services which keep an eye on your website and checks whether it is alive and the performance is satisfactory. All these services hit your web site pages and then collect the statistics. So, by registering in such services, you can guarantee your web application is alive all the time

خوب این دوست ما می خواد از سرویس های سایر سایت های و انجین ها استفاده نکنه و به اصطلاح خود کفا باشه !!!!!!!!

Ali1400
جمعه 24 شهریور 1385, 14:37 عصر
دوست عزیز manager جان من مقاله را خواندم و همانطور که نوشته راه حل تدام عمل cache در آن متکی به بازدیدکننده و موتورهای جستجو است و همانطوری که گفتید من می خواهم سایت فرضی ام خودکفا باشد.
حال اگر ما همان ابتدا ساخت دیتا بیس job را در سیستم local خود تعریف کنیم و بعد دیتا بیس را روی هاست ارسال کنیم باز هم job تعریف شده کار نمی کند یعنی اجازه اجرای آن را نمی دهند ( چون ما آن را در سیستم خود تعریف کرده ایم )

Ali1400
شنبه 25 شهریور 1385, 17:12 عصر
دوستان عزیز بنده با مسئول فنی هاستم تماس گرفتم و موضوع اجازه اجرای job را از طرف سرور آنها با او در میان گذاشتم که او مانعی از این بابت ندید و بیان داشت که:
ما جلوی اجرای job دیتابیس را در سرور نمی گیریم.
پس حالا برای خودکفایی فقط مانده نحوه تعریف job و دستور لازم ( اسکریپت مورد نیاز) برای اجرای یک صفحه در یک پریود زمانی ، مثلا هر 5 دقیقه

manager
شنبه 25 شهریور 1385, 20:05 عصر
آخه تو هر مثلا 5 دقیقه چی اجرا بشه !!!!!!!!! یعنی تو هر 5 دقیقه یه صفحه تو سرور باز بشه :قهقهه: !!!!!!!! (که امکان نداره) یا یه اسکریپت اجرا بشه ؟؟؟؟؟ چه اسکریپتی ؟؟؟ شاید منظورتون اینکه که یه نرم افزار اجرا بشه ؟؟؟؟؟!!!!!!!! اصلا تو هر پریود می خواین چه کاری بکنید که سرویس های موجود به شما این امکان رو نمی ده و می خواین از جاب استفاده کنید ؟؟؟؟؟؟؟؟:متفکر:

Ali1400
چهارشنبه 29 شهریور 1385, 12:21 عصر
من هدف خود را به صورت مثال زیر بیان می کنم (البته کارهای متنوع زیادی می توان انجام داد)
من یک من یک جدول دارم شامل رکوردهایی که در آن فیلدهای زیر موجود است

1 - تاریخ اکسپایر شدن اعتبار مشتری ( به تاریخ و ساعت)
2- آدرس ای میل مشتری
3- نام مشتری
4- ...... (و هر چیز دیگه ای که فکر میکنید ولی فعلا همان سه فیلد ذکر شده برای منظور ما کافی است)

فرض کنید که 1000 رکورد با تاریخ های مختلف در جدول ما وجود دارد و این مقدار ممکن است تغییر کند. حال ما می خواهیم در فواصل زمانی هر 5 دقیقه تاریخ و ساعت فعلی سرور را چک کرده و با تاریخ و ساعت ذخیره شده جدولمان مقایسه کنیم و برای آن رکوردهایی که تاریخشان از تاریخ و ساعت فعلی سرور کوچکتر نیستند (یعنی بزرگتر مساوی) یک ای میل شامل هشدار اتمام اعتبار ارسال نمایم.

خوب حالا ما نحوه مقایسه تاریخ و ارسال ای میل را در صفحه وب مورد نظرمان نوشتیم ، پس فقط مانده اجرای صفحه در زمانهای مشخص ( هر 5 دقیقه ) که براغی اینکار ما می خواهیم از job دیتابیس sqlserver استفاده نماییم و می خواهیم این job برای ما یکی از کارهای زیر را انجام دهد

1- ارسال یک متغیر (حاوی تاریخ و ساعت فعلی سرور) به صفحه وب مورد نظرمان :
2- اجرای صفحه وب مورد نظرمان ( در این صورت زحمت تاریخ فعلی را خود صفحه می کشد)

یادآور میشوم که در job می توان دستورات T-SQL ، فایلهای دستوری ویندوز و یا اسکریپتهای VB و Javascript را اجرا نمود و نیز job امکاناتی را جهت ارسال ای میل دارد.

پس هدف اجرای دستورات لازم بوسیله اسکریپتهای VB و Javascript است که job آنها را پذیرفته و اجرا نماید

شاید بگویید چرا از امکان ای میل job استفاده نمی کنید ، در جواب باید بگویم :
اولا برای استفاده از این امکان باید به نرم افزار مدیریت ای میل سرور دستری کامل جهت پیکربندی آن را داشته باشیم که این دسترسی امکان ندارد (مگر سرور اختصاصی که ما پول آن را نداریم)
ثانیا همانطور که عرض کردم ارسال ای میل یک مثال است و ممکن است هدف ما برای استفاده از این پریود زمانی چیز دیگری غیر از ارسال ای میل باشد

در مورد فایلهای دستوری ویندوز هم که مشخص است ، به هیچ وجه اجازه آن را نخواهیم داشت مگر سرور اختصاصی

حال بدهید در راه خدا دستورات تست شده اسکریپت را جهت اجرای یک صفحه یا ارسال یک متغیر یا رشته (حاوی تاریخ و ساعت فعلی سیستم) به آدرس صفحه وب مورد نظر