2012年11月9日 星期五

SQL Server 2005 備份所有資料庫

使用下列語法,可以備份 SQL Server 上所有的資料庫
by http://blog.l-penguin.idv.tw/archives/52



-- 這個範例可以備份所有的使用者資料庫,中文的資料庫名稱也可以支援!
-- 請修改 @DirectoryPath 參數, 指定備份的目的地

declare @DatabaseName nvarchar(300)     -- 存放資料庫名稱 

        ,@BackupSQL nvarchar(4000)      -- 存放備份的T-SQL 

        ,@Timestamp varchar(30)         -- 存放時間標記 

        ,@DirectoryPath nvarchar(2000)  -- 存放備份檔放置的資料夾的路徑 

        ,@FullPath nvarchar(2500)       -- 存放備份檔放置的完整路徑 

        ,@RecoveryModel int             -- 存放還原模式 

-- 指定備份檔放置的資料夾的路徑 

set @DirectoryPath = 'D:\Backup\' 

-- create a timestamp for the backup file name 

set @Timestamp = convert(varchar, getdate(),112) + 

    replace(convert(varchar, getdate(),108), ':', '') 

-- get user database only 

declare Database_Cursor cursor for 

    select d.name 

    from sys.databases d 

    where d.name not in('master', 'tempdb', 'model', 'msdb') 

open Database_Cursor 

fetch next from Database_Cursor 

into @DatabaseName 

while @@fetch_status = 0 

    begin 

        -- backup database      

        set @FullPath = '' 

        set @FullPath = @DirectoryPath + @DatabaseName 

        exec sys.xp_create_subdir @FullPath 

        set @BackupSQL = '' 

        set @BackupSQL = @BackupSQL + 'BACKUP DATABASE ' + 

            @DatabaseName + ' TO DISK = N''' + @FullPath + + '\' + 

            @DatabaseName + '_' + @Timestamp + '.bak'' 

            WITH NOFORMAT, NOINIT, SKIP' 

        -- 執行資料庫備份 

        exec (@BackupSQL) 

        -- backup transaction log 

        select @RecoveryModel = d.recovery_model from sys.databases 

                as d where d.name = @DatabaseName 

        -- only backup transaction logs for databases set for full recovery 

        if @RecoveryModel = 1 -- recovery model = full 

            begin 

                set @BackupSQL = N'' 

                set @BackupSQL = @BackupSQL + 'BACKUP LOG ' + 

                    @DatabaseName + ' TO DISK = N''' + @FullPath + + '\' + 

                    @DatabaseName + '_' + @Timestamp + '.trn'' 

                    WITH NOFORMAT, NOINIT, SKIP' 

                -- 執行交易記錄檔備份 

                exec (@BackupSQL) 

            end 

        fetch next from Database_Cursor 

            into @DatabaseName 

    end 

-- 釋放資源 

close Database_Cursor 

deallocate Database_Cursor

以上 set @DirectoryPath 請修改為指定的目錄即可。

0 意見: