خانه > Persian Contents, SQL Server, T-SQL > چند Script خوب در رابطه با تعریف Job

چند Script خوب در رابطه با تعریف Job

برای انجام کارها در SQL SERVER به صورت خودکار باید JOB تعریف کرد. این کار میتواند به صورت دستی از داخل برنامه انجام شود یا اینکه برای آن Script نوشت و آن را اجرا کرد. یکی سوالات متداول این است که چگونه میتوانیم به صورت خودکار از SQL SERVER پشتیبانگیری کنیم، این کار با JOB ها قابل انجام است. در زیر چند Job کاربردی برای نمونه آورده شده است:

Back up به صورت کامل : کد مثال برای تمام Job ها یک دایرکتوری به ازای هر پایگاه داده خواهد ساخت و از آن پشتیبانگیری میکند :

DECLARE @basePath varchar(300);
SET @basePath = N’M:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\›;

DECLARE @db sysname;
DECLARE user_db_cursor CURSOR FOR
      SELECT name FROM sys.databases WHERE name NOT IN (‹master›, ‹model›, ‹msdb›, ‹tempdb›)
OPEN user_db_cursor
FETCH NEXT FROM user_db_cursor
INTO @db

WHILE @@FETCH_STATUS = 0
BEGIN
      DECLARE @backupPath varchar(1000);
      SET @backupPath = @basePath + @db + ‹\›;

      DECLARE @backupName varchar(1000);
      DECLARE @time datetime2;
      SET @time = SYSDATETIME();
      SET @backupName = @db + ‹_backup_› + REPLACE(REPLACE(REPLACE(CONVERT(varchar, @time, 20),›-‹,’_›),›:›,»),› ‹,’_›)
      + ‹_› +  CAST(DATEPART(NANOSECOND, @time)/100 as varchar)

      –Create sub-directory
      EXECUTE master.dbo.xp_create_subdir @backupPath
     
      DECLARE @backupFileName varchar(1000);
      SET @backupFileName = @backupPath + @backupName + ‹.bak›;
     
      –Backup database
      BACKUP DATABASE @db TO DISK=@backupFileName
            WITH RETAINDAYS=14, NOFORMAT, NOINIT, NAME=@backupName ,
            SKIP, REWIND, NOUNLOAD, STATS=10

CLOSE user_db_cursor
DEALLOCATE user_db_cursor

پشتیبان Differential :

DECLARE @basePath varchar(300);
SET @basePath = N’M:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\›;

DECLARE @db sysname;
DECLARE user_db_cursor CURSOR FOR
 SELECT name FROM sys.databases WHERE name NOT IN (‹master›, ‹model›, ‹msdb›, ‹tempdb›)
OPEN user_db_cursor
FETCH NEXT FROM user_db_cursor
INTO @db

WHILE @@FETCH_STATUS = 0
BEGIN
      DECLARE @backupPath varchar(1000);
      SET @backupPath = @basePath + @db + ‹\›;

      DECLARE @backupName varchar(1000);
      DECLARE @time datetime2;
      SET @time = SYSDATETIME();
      SET @backupName = @db + ‹_backup_› + REPLACE(REPLACE(REPLACE(CONVERT(varchar, @time, 20),›-‹,’_›),›:›,»),› ‹,’_›)
      + ‹_› + CAST(DATEPART(NANOSECOND, @time)/100 as varchar)

      –Create sub-directory
      EXECUTE master.dbo.xp_create_subdir @backupPath
     
      DECLARE @backupFileName varchar(1000);
      SET @backupFileName = @backupPath + @backupName + ‹.bak›;
     
      –Backup database
      BACKUP DATABASE @db TO DISK=@backupFileName
            WITH DIFFERENTIAL, RETAINDAYS=14, NOFORMAT, NOINIT, NAME=@backupName ,
            SKIP, REWIND, NOUNLOAD, STATS=10
      
CLOSE user_db_cursor
DEALLOCATE user_db_cursor

پشتیبان  Transaction Log :

DECLARE @basePath varchar(300);
SET @basePath = N’M:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\›;

DECLARE @db sysname;
DECLARE user_db_cursor CURSOR FOR
      SELECT name FROM sys.databases WHERE name NOT IN (‹master›, ‹model›, ‹msdb›, ‹tempdb›)
OPEN user_db_cursor
FETCH NEXT FROM user_db_cursor
INTO @db

WHILE @@FETCH_STATUS = 0
BEGIN
      DECLARE @backupPath varchar(1000);
      SET @backupPath = @basePath + @db + ‹\›;

      DECLARE @backupName varchar(1000);
      DECLARE @time datetime2;
      SET @time = SYSDATETIME();
      SET @backupName = @db + ‹_backup_› + REPLACE(REPLACE(REPLACE(CONVERT(varchar, @time, 20),›-‹,’_›),›:›,»),› ‹,’_›)
      + ‹_› +  CAST(DATEPART(NANOSECOND, @time)/100 as varchar)

      –Create sub-directory
      EXECUTE master.dbo.xp_create_subdir @backupPath
     
      DECLARE @backupFileName varchar(1000);
      SET @backupFileName = @backupPath + @backupName + ‹.trn›;
     
      –Backup database
      BACKUP LOG @db TO DISK=@backupFileName
            WITH RETAINDAYS=14, NOFORMAT, NOINIT, NAME=@backupName ,
            SKIP, REWIND, NOUNLOAD, STATS=10
      
CLOSE user_db_cursor
DEALLOCATE user_db_cursor

اجرای Job Agent Task در SQL SERVER :

EXEC msdb.dbo.sp_start_job ‹<job name>›;

نکته : این عملیات به کمک SQL Server Agent انجام میشود. اطمینان حاصل کنیدکه سرویس مربوط به آن run است.

دسته‌ها:Persian Contents, SQL Server, T-SQL
  1. امير زماني
    ژانویه 18, 2009 در 1:12 ق.ظ.

    ممنون استفاده خوبي رو از اين مقاله شما داشتيم ؛ بر خودم لازم دانستم که از زحمات شما تشکر کنم .

  2. اوژن استوار
    سپتامبر 12, 2009 در 11:29 ق.ظ.

    با سلام و خسته نباشید من روی سیستم SQL 2008 دارم و میخوام یک بک آپ از دیتابیسم بگیرم که SQL 2005 ساپورت کنه و اون رو روی هاستم ریستور کنم چون هاست من 2005 هست من نیاز دارم بک آپم هم 2005 باشه راهی برای این کار وجود داره؟ از طریق مسنجر یا ایمیل با من در ارتباط با شید ممنونostovarit@yahoo.com

  1. No trackbacks yet.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: