PDA

View Full Version : backup گیری اتوماتیک در sqlserver



free
چهارشنبه 06 تیر 1386, 10:16 صبح
سلام. خسته نباشید.
می خواهم هر 2 ساعت یکبار بصورت اتوماتیک sql از بانک اطلاعاتی موردنظر پشتیبان تهیه کند البته این تنظیمات را می دانم اما می خواهم در هر بار پشتیبان گیری یک فایل جدید ایجاد شود . در حال حاضر در هر بار پشتبان گیری مدام فایل قبل update می شود. ممنون می شم راهنمایی کنید.

m-khorsandi
چهارشنبه 06 تیر 1386, 10:33 صبح
از چه روشی استفاده کردی؟

free
چهارشنبه 06 تیر 1386, 10:36 صبح
Regester server wizard/managment/backup wizard

reza_rad
چهارشنبه 06 تیر 1386, 10:50 صبح
شما می تونید از JOB های SQL Server استفاده کنید.
این job ها می تونن شامل چند STEP باشند.
توی یک step می تونید فایل بکاپ قبلی رو کپی کنید به جای دیگه ای از هاردتون مثلا جایی که آرشیو رو نگهداری می کنید .
و توی Step بعدی بکاپ جدید بگیرید.

برای اینکه هر چند وقت یکبار این عملیت انجام بشه شما می تونید job ها رو schedule کنید.

job در SQL server 2000 :
http://www.databasedesign-resource.com/sql-server-jobs.html

job در SQL Server 2005 :
http://msdn2.microsoft.com/en-us/library/ms190268.aspx

hsmt132
چهارشنبه 06 تیر 1386, 11:18 صبح
از خود sql می تونی برای تهیه backup استفاده کنی درضمن می تونی تنظیم کنی که update بشه یا یک فایل جدید ایجاد کنه. همچنین قابیلت schedule یا زمانبندی هم دارد.

Answer
چهارشنبه 06 تیر 1386, 11:24 صبح
میتونی از یک کنترل Timer استفاده کنی که و چک کنی که اگر دو ساعت گذشت از بانک یک کپی بگیره به نام جدید مثلا با نام ساعتجاری سیستم BK12:30

free
چهارشنبه 06 تیر 1386, 11:45 صبح
ممنون دوستان.
hmst132 من دقیقا می خوام از خود تنظیمات sql استفاده کنم اما بک آپ جدید را روی فایل قبلی overwrite می کند. تنها مشکل اینه که رو همون فایل بک آپ جدید را قرار می ده.
آقای reza_rad ممنون از لینک مفیدتان. از روی لینک اول مرحله به مرحله همه تنظیمات را انجام دادم اما در قسمت steps/general/command نمی دانم چه کدی باید قرار داده شود در مقال مربوطه مشخص نیست. و فکر می کنم به همین دلیل job اجرا نمی شود.
بیشتر راهنمایی کنید ممنون میشم.

reza_rad
چهارشنبه 06 تیر 1386, 11:56 صبح
آقای reza_rad ممنون از لینک مفیدتان. از روی لینک اول مرحله به مرحله همه تنظیمات را انجام دادم اما در قسمت steps/general/command نمی دانم چه کدی باید قرار داده شود در مقال مربوطه مشخص نیست. و فکر می کنم به همین دلیل job اجرا نمی شود.
بیشتر راهنمایی کنید ممنون میشم.

برای کد بکاپ گیری از دیتابیس:
http://msdn2.microsoft.com/en-us/library/ms186865.aspx

برای استفاده از دستور بالا باید یک step جدید ایجاد کنید داخل job و بعد از داخل کومبوی type گزینه Transact SQL Script(T-SQL) رو انتخاب کنید و داخل باکس command دستور بکاپ دیتابیس رو بنویسید.

برای کپی کردن فایل قبلی به یه آدرس دیگه روی هارد و rename کردن اون و نگهداری آرشیو هم یک step دیگه ایجاد کنید. ولی اینبار از کومبوی type گزینه Operating System Command(CMDExec ) رو انتخاب کنید. این امکان استفاده از command های سیستم عامل رو به شما میده. حالا شما می تونید دستور COPY که توی CommandPrompt می نویسید رو اینجا بنویسید.
سینتکس دستور کپی:
http://www.csulb.edu/~murdock/copy.html
دستور rename :
http://www.csulb.edu/~murdock/rename.html

free
چهارشنبه 06 تیر 1386, 12:18 عصر
متشکرم. اما دقیقا نمی دانم چه کدی را باید دقیقا بنویسم. یعنی باید بک آپ و کپی و تعویش نام را توسط دستورات خودمان انجام دهیم؟؟ اگه براتون امکان داره این دستورات را با یه مثال ساده توضیح دهید.

Answer
چهارشنبه 06 تیر 1386, 12:22 عصر
بهترین کار استفاده از دلفی میباشد و تمام بانک رو از توی برنامه بک آپ بگیری و همونی که گفتم

free
چهارشنبه 06 تیر 1386, 12:26 عصر
اگر از توی برنامه بخوام بک آپ بگیره باید برنامه همیشه در حالت اجرا باشه .

m-khorsandi
چهارشنبه 06 تیر 1386, 13:18 عصر
بهترین کار استفاده از دلفی میباشد و تمام بانک رو از توی برنامه بک آپ بگیری و همونی که گفتم

دلیلتون رو هم بگید!

reza_rad
چهارشنبه 06 تیر 1386, 13:24 عصر
دقیقا نمی دانم چه کدی را باید دقیقا بنویسم
من که لینک دادم. از همون syntax استفاده کنید.
متاسفانه من نمی تونم از روی سیستمم عکس بگیرم و براتون بفرستم.


ترتیب کار شما همچین چیزی میشه:

یک step جدید ایجاد کنید.
اول فایل بکاپ قبلی رو rename کنید.
یعنی کدی مثل کد زیر رو:


RENAME (REN) D:\reportsatfull reportsatfull_old


در باکس command بنویسید و type رو از نوع CMDExec انتخاب کنید.

حالا یه step جدید بسازید برای کپی کردن فایل به آدرس دیگه. روش کار مثل بالاست فقط جای rename کردن باید copy کنید.

ور درنهایت یک step برای بکاپ گیری بسازید:

این یک مثال برای بکاپ گیری:


Backup Database [report] To [reportsatfull] with init, nounload, name=N'reportsatfull', noskip, status=10 , noformat

البته جزئیات بیشتر این دستور رو از همون لینک سینتکسی که دادم ببینید.
این کد رو باید در باکس command بنویسید. و type رو T-SQL انتخاب کنید.


البته برای اینکه اسم فایل شما هربار تکراری نشه شما باید بتونید اسم رو دینامیک ایجاد کنید مثلا اسم فایل شامل تاریخ و ساعت باشه.
نکته دیگه ای هم که هست اینه که شما باید قبل از اجرای job یه backup device توی enterprise manager بسازید. چون دستور بکاپی که بالا نوشتم از همون backup device استفاده می کنه.

برای ساختن backup device:
برید توی enterprise manager
روی سرور کلیک کنید
management
backup
و ...

اگه جاییش رو متوجه نشدید بگید بیشتر توضیح بدم.

free
یک شنبه 10 تیر 1386, 11:57 صبح
چطور میشه بصورت دینامیکی نام فایل را همراه با تاریخ و ساعت ثبت کرد؟

دستور آخر به این شکل در آمده :

کد:

BACKUP DATABASE [BPaperlessa] TO DISK = N'G:\test_back\Mybackup.BAK' WITH NOINIT , NOUNLOAD , NAME = N'BPaperlessa backup', NOSKIP , STATS = 10, NOFORMAT


می خواهم نام فایل شامل تاریخ و ساعت هم باشه.چگونه؟

free
سه شنبه 12 تیر 1386, 07:56 صبح
آقای reza_rad لطفا راهنمایی نمایید. میخواهم تو این خط آخری که نوشتم براتون فایل Mybackup همراه با تاریخ و ساعت نامگذاری شود. از تابع Getdate() استفاده کردم اما روش استفاده درست آن را در این کد نمی دانم. این تابع می تواند مستقیما همراه با نام فایل آورده شود یا باید در متغییری ذخیره شود؟ چگونه؟
(Help Me Please)

reza_rad
سه شنبه 12 تیر 1386, 09:01 صبح
شما می تونید از این روش برای ایجاد یک استرینگ که شامل تاریخ و ساعت و دقیقه باشه استفاده کنید:(با استفاده از تابع DatePart , GetDate)


declare @MyDate varchar(15)
set @MyDate=(select convert(varchar,datepart(yyyy,getdate()))+convert( varchar,datepart(mm,getdate()))+convert(varchar,da tepart(dd,getdate()))+convert(varchar,datepart(hh, getdate()))+convert(varchar,datepart(mi,getdate()) )+convert(varchar,datepart(ss,getdate())))





حالا اسم فایلتون رو به این اسم عوض کنید.
منتها برای اینکه بتونید از این متغیر که توی T-SQL تعریفش کردید توی CMDExec استفاده کنید نیاز به این دارید که بتونید دستورات CMDExec رو از داخل SQL اجرا کنید.
برای اینکار از این sp استفاده کنید: xp_cmdShell
البته اگه از sqlserver 2005 استفاده می کنید باید توی تنظیمات اجازه استفاده از این sp رو داده باشید چون sp خطرناکی هست و بطور پیش فرض در 2005 اجازه دسترسی به اون رو کسی نداره.

به اینصورت حالا می تونید عمل کنید:


set @MyDate=(select 'rename d:\YourBackupFile '+@MyDate )
exec xp_cmdshell @MyDate

free
سه شنبه 12 تیر 1386, 11:57 صبح
همه دستورات را به این ترتیب نوشتم اما هیچ اتفاقی در بک آپ گیری نمی افتد و فایل را تغییر نام نمی دهد


declare @MyDate varchar(15)
set @MyDate=(select convert(varchar,datepart(yyyy,getdate()))+convert( varchar,datepart(mm,getdate()))+convert(varchar,da tepart(dd,getdate()))+convert(varchar,datepart(hh, getdate()))+convert(varchar,datepart(mi,getdate()) )+convert(varchar,datepart(ss,getdate())))
BACKUP DATABASE [BPaperlessa] TO DISK = N'G:\test_back\BPaperlessa backup.BAK' WITH NOINIT , NOUNLOAD , NAME = N'BPaperlessa backup', NOSKIP , STATS = 10, NOFORMAT
set @MyDate=(select 'rename G:\test_back\BPaperlessa backup.BAK '+@MyDate )
exec xp_cmdshell @MyDate

Answer
شنبه 16 تیر 1386, 21:38 عصر
دوست عزیز میتونی یه برنامه کوچک بنویسی که فقط کار بک آپ گیری رو انجام بده و این برنامه همیشه باز باشه و همونطور که گفتم با یه تایمر بک آپ بگیره یه و این برنامه رو تو ریجیستری ثبت کن تا با Startup بیاد بالا
(البته اگر بخوای جدا از برنامه خودت باشه این کاره خوب)

Answer
شنبه 16 تیر 1386, 21:41 عصر
اگه تو نوشتنش به مشکل خوردی ... بنویس

reza_rad
یک شنبه 17 تیر 1386, 07:26 صبح
همه دستورات را به این ترتیب نوشتم اما هیچ اتفاقی در بک آپ گیری نمی افتد و فایل را تغییر نام نمی دهد
آیا اصلا بکاپ گرفته میشه؟
آیا backup device ساختین؟
یا اینکه مشکل توی تغییر نام فایل هست؟
دو قسمت رو جدا تست کنید.
یعنی یکبار فقط امتحان کنید ببینید یه فایل رو اینجوری rename می تونید بکنید ...

free
یک شنبه 17 تیر 1386, 08:35 صبح
سلام. ممنون دوستان. آقای reza_rad خیلی ممنون بابت راهنماییتون. مشکلم رفع شد. باید نام فایل را همراه با تاریخ که تغییر می دادم در یک متغییر قرار می دادم و بعد تو دستورات استفاده می کردم. باز هم متشکر.
البته روشی را که استفاده کردم یه کم با توضیحات شما متفاوت بود. من از مسیر wizard/manangmet/backup database اول step را برای 2 ساعت یکبار تنظیم کردم و سپس در قسمت job ها اون job ی را که ایجاد شده بود در قسمت command به دستور ایجاد شده چند خط فقط جهت تغییر نام فایل اضافه کردم. یعنی لازم نیست از دستورات rename و کپی استفاده کنیم . همون دستور backup گیری می تونه کار همه را انجام بده به شرطی که نام فایل بک آپ را با متغییر زمان و ساعت ست کنیم.
موفق باشید.

reza_rad
یک شنبه 17 تیر 1386, 08:44 صبح
خواهش می کنم:)
موفق باشید