تبلیغات
كامپیوتر و HIGH TECH - كاربرد xp_cmdshell در sqlserver

كاربرد xp_cmdshell در sqlserver

 

نوع مطلب :SQL SERVER ،

نوشته شده توسط:امید پورحسین

سلام
فرض كنید شما یك بانك اطلاعاتی بسیار مهم بر روی یك سرور دارید. اولین روشی كه معمولا برای حفاظت از اطلاعات بانك به ذهن می رسد backup  گیری از database می باشد. خب شما معمولا می روید و عملیات backup را در یك job تعریف می كنید و sql server هم بر اساس زمان بندی job شما از database عملیات backup گیری را انجام می دهد. تا اینجا مشكلی نیست اما اگر بروید و در مسیری كه فایل  backup را نگهداری می كنید مشاهده می كنید كه شما فقط یك فایل backup  دارید و در حقیقت sql server  همه backup ها را در همان فایل نگهداری می كند. خب شما اگر فقط به همین یك فایل اكتفا كنید چه پیش خواهد آمد
اگر از backup گیری full استفاده می كنید پس از مدتی حجم این فایل بسیار بزرگ شده و شما مجبور هستید برای كاهش حجم این فایل  را جدا كرده و تغییر نام دهید یا فایل را ازآن مسیر برداشته و در جای دیگر كپی كنید. اگر فقط از BACKUP گیری نوع TRANSACTION LOG استفاده می كنید شما مجبور هستید همیشه فایل اولیه را نگه داشته و هرچه زمان طولانی تر شود نگهداری آن هم سخت تر خواهد شد (در بانك های اطلاعاتی بزرگ)
حال فرض كنیم بیاییم و هر backup را در یك فایل كه اسم آن حاوی تاریخ و ساعت زمان backup  گیری است ذخیره كنیم با این كار به راحتی می توانیم آنها را مدیریت كرده و آنها را طبقه بندی كنیم . به این مثال توجه كنید
فرض كنید یك بانك با نام db_test داریم دستور backup را به این شكل می نویسیم

BACKUP DATABASE db_test TO DISK = 'G:\bkTEST\backup.bak'

خب حالا می خواهیم این فایل را تغییر نام دهیم كه در ویندوز با دستور RENAME می باشد اما چون در SQL همچین دستوری نداریم. جهت این كار از  xp_cmdshell  در SQL SERVER استفاده می كنیم.
نكته مهم : این تابع در نسخه 2000 به صورت پیش فرض فعال می باشد اما در نسخه های بعدی جهت بالا بردن امنیت غیر فعال می باشد كه با دستور زیر می توانید آن را فعال كنید

EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO
 جهت غیرفعال كردن مجدد به جای عدد 1 عدد 0 را قرار دهید
خب حالا نوبت به نوشتن دستورات اصلی می باشد برای گرفتن تاریخ و ساعت سیستم از دستور GETDATE استفاده می كنیم و پس از درست كردن دستور در متغیر دستورات را اجرا می كنیم

declare @rename varchar(255)
select @rename ='ren "G:\bkTEST\Backup.BAK" ' + 'Backup'+ 
replace(ltrim(rtrim(convert(char(15),getDate(),2))),'.','')+'_'+
replace(ltrim(rtrim(convert(char(12),getDate(),8))),':','')+'.bak'
WAITFOR DELAY '00:00:05'
exec master..xp_cmdshell @rename
REVERT

فرمت خروجی فایلی شبیه به صورت زیر خواهد بود

Backup100822_050018.bak

یعنی این فایل در تاریخ 2010/08/22 ودر ساعت 05:00:18 ساخته شده است.

به همین شكل  BACKUP های شما از حالت تك فایلی خارج شده و می توانید مدیریت بهتری را اعمال نمایید.



Maricruz
پنجشنبه 16 آذر 1396 08:21 ب.ظ
Today, I went to the beachfront with my children. I found a sea shell and gave it to my 4 year old daughter and said "You can hear the ocean if you put this to your ear." She placed the shell to her ear and screamed.
There was a hermit crab inside and it pinched her
ear. She never wants to go back! LoL I know this is completely off topic but I had to tell someone!
Peggy
دوشنبه 16 مرداد 1396 09:09 ب.ظ
Way cool! Some very valid points! I appreciate you writing
this article and also the rest of the website is very good.
How do you prevent Achilles tendonitis?
شنبه 14 مرداد 1396 10:38 ب.ظ
It's actually a nice and useful piece of info.

I am happy that you simply shared this useful information with us.

Please keep us up to date like this. Thank you for sharing.
http://antoniocawley.hatenablog.com/archive/2016/02/24
جمعه 13 مرداد 1396 12:42 ب.ظ
I think this is one of the most important info for me.
And i'm glad reading your article. But should
remark on some general things, The site style is wonderful, the articles is really nice : D.
Good job, cheers
wenbukovsky.wordpress.com
شنبه 7 مرداد 1396 09:39 ق.ظ
Great article.
std test
دوشنبه 5 تیر 1396 01:57 ق.ظ
ریشه از خود نوشتن در حالی که ظاهر شدن دلنشین در آیا نه
کار بسیار خوب با من پس از برخی از
زمان. جایی در سراسر پاراگراف
شما قادر به من مؤمن متاسفانه فقط
برای کوتاه در حالی که. من این کردم مشکل خود را با جهش در مفروضات و یک خواهد را سادگی به پر کسانی که شکاف.
در این رویداد شما در واقع که می توانید انجام
من می قطعا تا پایان در گم.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر