এসকিউএল সার্ভারে সমস্ত ডাটাবেসের ব্যাকআপ নেওয়া


13

আমার একটি মাইক্রোসফ্ট এসকিউএল সার্ভার 2005 ডিবি সার্ভার রয়েছে। ডিবি সার্ভারে আমার কাছে প্রায় 250 টি ডাটাবেস রয়েছে। আমাকে এই সমস্ত ডাটাবেসটির ব্যাক আপ নিতে হবে। যেহেতু, ম্যানুয়ালি ব্যাকআপ নেওয়া অনেক সময় ব্যয় করে, আমি একটি ব্যাচ স্ক্রিপ্ট বা ডিবি স্ক্রিপ্ট খুঁজছি যা স্বয়ংক্রিয়ভাবে সমস্ত 250 ডাটাবেসের ব্যাকআপ নেবে। কেউ কি এই বিষয়ে সাহায্য করতে পারেন?

উত্তর:


14

দ্রষ্টব্য: প্রথমে D:ড্রাইভে একটি ফোল্ডার তৈরি করুন । (যেমন D:\User_DataBackup\)

পদক্ষেপ 1: নীচে দেওয়া একটি পদ্ধতি তৈরি করুন।

Create PROCEDURE [dbo].[UserDataBaseBackUp]
AS

BEGIN
SET NOCOUNT ON;

DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
SET @path = 'D:\User_DataBackup\' -- as same as your created folder' 
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),104)
DECLARE db_cursor CURSOR FOR
  SELECT name
  FROM MASTER.dbo.sysdatabases
  WHERE name NOT IN ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
  SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
  BACKUP DATABASE @name TO DISK = @fileName
  FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
END

পদক্ষেপ 2: উপরের পদ্ধতিটি কার্যকর করুন।

 EXEC [UserDataBaseBackUp]

আপনি এই পদ্ধতিটি নির্ধারণ করতে পারেন। এই পদ্ধতিটি পরীক্ষা করা হয়েছে আশা করি এটি সাহায্য করবে।


একটি ট্রিট কাজ করে, সম্ভবত পথে যেতে পারে উন্নত?
রবিন সালিহ

11

একটি রক্ষণাবেক্ষণের পরিকল্পনা তৈরি করুন

এসকিউএল সার্ভারের এই আশ্চর্যজনক বৈশিষ্ট্য রয়েছে যেখানে এটি আপনার জন্য স্ক্রিপ্ট এবং কাজ তৈরি করবে

  • ধাপ 1:
    উপর রাইট ক্লিক Maintenance PlanঅধীনেManagement

    ম্যানেজনে রাইট ক্লিক করুন

  • পদক্ষেপ 2:
    আপনার পরিকল্পনার নাম দিন

    পরিকল্পনার নাম দিন

  • পদক্ষেপ 3:
    ডাটাবেস ব্যাকআপ টাস্ক নির্বাচন করুন

    ডাটাবেস ব্যাকআপ টাস্ক

  • পদক্ষেপ 4:
    কার্যটি কনফিগার করুন, নির্বাচন করুন ডেটাবেসগুলি, ফোল্ডারের অবস্থান, ব্যাকআপের ধরণ (পূর্ণ, ডিফারেনশিয়াল, লেনদেন লগ) সংযোগ ইত্যাদি etc.

    ব্যাকআপ টাস্কটি কনফিগার করুন

  • পদক্ষেপ 5:
    কাজের সময়সূচীটি কনফিগার করুন

    কাজের সময়সূচীটি কনফিগার করুন


কোনও ধরণের সমস্যা এড়াতে আমি সিস্টেম-ডাটাবেসগুলি এবং আপনার ব্যবহারকারী-ডাটাবেসগুলির জন্য আলাদা পরিকল্পনা করার পরামর্শ দিচ্ছি

সহায়তা লিঙ্ক:


দ্রষ্টব্য: এসকিউএল সার্ভারের এক্সপ্রেস সংস্করণগুলি রক্ষণাবেক্ষণ পরিকল্পনার কার্যকারিতা সরবরাহ করে না।
অ্যালান বি

8

আমি এই সত্যের জন্য জানি যে এসএসএমএসের সাথে প্রচুর ডাটাবেস বজায় রাখা কিছুটা বিভ্রান্তিকর হতে পারে তবে এটি সরাসরি।

আমি আরও কার্যকর উপায়ে সুপারিশ করতে পারি, এটি ওলা হ্যালেনগ্রেনের রক্ষণাবেক্ষণ স্ক্রিপ্টটি ব্যবহার করছে । এটি খুব দুর্দান্ত এবং খুব কার্যকর is এবং আপনি সমস্ত ডাটাবেস ব্যাক আপ করার চেয়ে আরও অনেক কিছু করতে পারেন, আপনি সব ধরণের রক্ষণাবেক্ষণ পদ্ধতি করতে পারেন।

উদাহরণস্বরূপ, আপনি সমস্ত ডাটাবেস ব্যাকআপ করতে পারেন, তাদের সংকুচিত করতে এবং আপনার পছন্দসই একটি শংসাপত্র দিয়ে এটিকে এনক্রিপ্ট করতে পারেন, যেমন একটি কমান্ড ব্যবহার করে (এবং এগুলি সমস্ত optionচ্ছিক, এবং এনক্রিপশন এবং সংক্ষেপণ এসকিউএল সার্ভার 2005 এ কাজ করবে না তবে আমি মনে করি এটি হবে) ওলার স্ক্রিপ্টের নমনীয়তা এবং শক্তি দেখান):

EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES',
@Directory = 'C:\Backup',
@BackupType = 'FULL',
@Compress = 'Y',
@Encrypt = 'Y',
@EncryptionAlgorithm = 'AES_256',
@ServerCertificate = 'MyCertificate'

2

জে.পি. এর উত্তরে কাজ করে, আমি গন্তব্য ডিরেক্টরিটি পাস করার জন্য একটি পরামিতি যুক্ত করেছি (এবং সম্ভবত আরও বিকল্প যুক্ত করতে পারে):

Create PROCEDURE [dbo].[UserDataBaseBackUp] (
  @OutputDir varchar(255)
) AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @name VARCHAR(50) -- database name
    DECLARE @path VARCHAR(256) -- path for backup files
    DECLARE @fileName VARCHAR(256) -- filename for backup
    DECLARE @fileDate VARCHAR(20) -- used for file name
    SET @path = @OutputDir
    SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),104)
    PRINT 'Starting Backups'
    DECLARE db_cursor CURSOR FOR
        SELECT name FROM MASTER.dbo.sysdatabases
            WHERE name NOT IN ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')
        OPEN db_cursor
            FETCH NEXT FROM db_cursor INTO @name
            WHILE @@FETCH_STATUS = 0 BEGIN
                SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
                    PRINT 'Starting Backup For ' + @name
                    BACKUP DATABASE @name TO DISK = @fileName WITH FORMAT
                FETCH NEXT FROM db_cursor INTO @name
            END
        CLOSE db_cursor
    DEALLOCATE db_cursor
    PRINT 'Backups Finished'
END
GO

তাহলে:

EXEC UserDataBaseBackUp @OutputDir = 'F:\Backups\SQL Databases\'

1

আপনি এই জাতীয় নির্বাচন বা বিবৃতি ব্যবহার করতে পারেন:

DECLARE @PathForBackUp VARCHAR(255)
SET @PathForBackUp = 'F:\Backup\User DB\'

SELECT 'BACKUP DATABASE [' + name + '] TO  DISK = N''' + @PathForBackUp + '' + name + '.bak''
WITH NOFORMAT, NOINIT,  NAME = N''' + name + '_FullBackUp'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 5'
FROM sys.databases
WHERE database_id > 4

অথবা

DECLARE @DBName VARCHAR(255)  
DECLARE @PathForBackUp VARCHAR(255) 
DECLARE @FileName VARCHAR(255)  
DECLARE @DateFile VARCHAR(255)
DECLARE @SQL NVARCHAR(2048) 
SET @PathForBackUp = 'F:\Backup\User DB\'  
SET @DateFile = REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120) ,' ','T'), ':','') 

DECLARE BACKUPING CURSOR FOR   
SELECT name  
FROM master.dbo.sysdatabases WHERE dbid > 4 

OPEN BACKUPING    
FETCH NEXT FROM BACKUPING INTO @DBName    
WHILE @@FETCH_STATUS = 0    

BEGIN    
        SET @FileName = @PathForBackUp + @DBName + '_' + @DateFile + '.BAK'  
    SET @SQL = 'BACKUP DATABASE '+@DBName+ ' TO DISK = '''+@FileName+''' WITH COMPRESSION ' 
    PRINT @SQL 
    EXECUTE sp_executesql @sql   
    FETCH NEXT FROM BACKUPING INTO @DBName  

END    

CLOSE BACKUPING    
DEALLOCATE BACKUPING 

-2

আপনি বাকশ উডি দ্বারা ব্যবহৃত সমস্ত ব্যবহারকারীর ডেটাবেসগুলিকে ব্যাকআপ করতে পাওয়ারশেল ব্যবহারের মতো দেখানো হয়েছে পাওয়ারশেলটিও ব্যবহার করতে পারেন :

# Performs a Full backup followed by a transaction log backup on all user databases

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")  | out-null
$s = new-object ('Microsoft.SqlServer.Management.Smo.Server') 'BWOODY1\SQL2K8'
$bkdir = $s.Settings.BackupDirectory
$dbs = $s.Databases
$dbs | foreach-object {
    $db = $_

    if ($db.IsSystemObject -eq $False -and $db.IsMirroringEnabled -eq $False) {
        $dbname = $db.Name
        $dt = get-date -format yyyyMMddHHmmss
        $dbbk = new-object ('Microsoft.SqlServer.Management.Smo.Backup')
        $dbbk.Action = 'Database'
        $dbbk.BackupSetDescription = "Full backup of " + $dbname
        $dbbk.BackupSetName = $dbname + " Backup"
        $dbbk.Database = $dbname
        $dbbk.MediaDescription = "Disk"
        $dbbk.Devices.AddDevice($bkdir + "\" + $dbname + "_db_" + $dt + ".bak", 'File')
        $dbbk.SqlBackup($s)
        if ($db.DatabaseOptions.RecoveryModel -ne 'Simple') {
            $dt = get-date -format yyyyMMddHHmmss
            $dbtrn = new-object ('Microsoft.SqlServer.Management.Smo.Backup')
            $dbtrn.Action = 'Log'
            $dbtrn.BackupSetDescription = "Trans Log backup of " + $dbname
            $dbtrn.BackupSetName = $dbname + " Backup"
            $dbtrn.Database = $dbname
            $dbtrn.MediaDescription = "Disk"
            $dbtrn.Devices.AddDevice($bkdir + "\" + $dbname + "_tlog_" + $dt + ".trn", 'File')
            $dbtrn.SqlBackup($s)
            }
        }     
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.