এসকিউএল সার্ভার ডাটাবেসগুলি ব্যাকআপ করার জন্য একটি সাধারণ কমান্ড লাইন প্রোগ্রাম বা স্ক্রিপ্ট কী?


94

আমি আমাদের অভ্যন্তরীণ সার্ভারগুলিতে ডিবি ব্যাকআপ নেওয়ার ক্ষেত্রে খুব শিথিল হয়েছি।

এসকিউএল সার্ভার ২০০৫-এ কিছু নির্দিষ্ট ডাটাবেস ব্যাকআপ রাখতে আমি কি কোনও সাধারণ কমান্ড লাইন প্রোগ্রাম ব্যবহার করতে পারি? বা একটি সাধারণ ভিবিএস স্ক্রিপ্ট আছে?


6
ব্যক্তিগতভাবে, আমার কাছে অর্ডার লেবু অ্যাপ্লিকেশন এবং নির্দেশের কমলা উপযোগের সাথে আরও ভাল ভাগ্য রয়েছে। কমান্ড চুন প্রোগ্রামগুলি তার চেয়ে মূল্যবান সমস্যা way
জিম 18

উত্তর:


108

কমান্ড লাইন থেকে একটি একক ডাটাবেস ব্যাকআপ করতে, osql বা sqlcmd ব্যবহার করুন ।

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe" 
    -E -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak' WITH FORMAT"

আপনি ব্যাকআপ এবং পুনরুদ্ধার এবং সাধারণ পদ্ধতিতে ডকুমেন্টেশনও পড়তে চাইবেন ।



7
ডকুমেন্টেশনটিতে বলা হয়েছে যে WITH FORMATস্টোরেজ মিডিয়ামটিকে ফর্ম্যাট করে: " ফরমেট বিকল্পটি কোনও বিদ্যমান সামগ্রী উপেক্ষা করে পুরো মিডিয়া সামগ্রীকে অবৈধ করে দেয় " "আপনি যা চান তা নিশ্চিত করুন।
অ্যালেক্স

4
@ জাজার্ট, সেজন্য আমি প্রথমে ডকুমেন্টেশন পড়তে বলেছি। আপনি যদি ফরমেটের সাথে না ব্যবহার করেন এবং আপনি একটি বিদ্যমান ব্যাকআপ ফাইল চয়ন করেন, তবে নতুন ব্যাকআপটি ফাইলের বিদ্যমান ব্যাকআপ (গুলি) এ যুক্ত হবে, যা আপনি চান তা নাও হতে পারে।
ক্রেগ ব্যবসায়ী

@ কিকিনেট বাজেজ্জিট - এটি মূলত জিইউআই পণ্য হবে এবং তাই, আসল জিজ্ঞাসা অনুযায়ী কোনও সাধারণ কমান্ড লাইন প্রোগ্রাম বা স্ক্রিপ্ট নয়।
ক্রেগ ব্যবসায়ী

আমার ইনস্টলেশনটি osql.exeছিলC:\Program Files\Microsoft SQL Server\140\Tools\Binn\OSQL.EXE
ম্যাথু লক

9

আমি এক্সপ্রেসমেট ব্যবহার করি ।

সমস্ত ব্যবহারকারীর ডাটাবেসগুলি ব্যাকআপ করতে আমি উদাহরণস্বরূপ:

C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS

4
মিক্সার, এক্সপ্রেসমেট ব্যবহার করার একক কারণ আমি খুঁজে পাচ্ছি না, যখন এসকিউএলব্যাকআপএন্ডএফটিপি এটি প্রতিটি কল্পনাপ্রসূত দৃশ্যে মারধর করে

8

সমস্ত ডাটাবেস ব্যাকআপ করতে নিম্নলিখিত সময়সূচী:

Use Master

Declare @ToExecute VarChar(8000)

Select @ToExecute = Coalesce(@ToExecute + 'Backup Database ' + [Name] + ' To Disk =     ''D:\Backups\Databases\' + [Name]   + '.bak'' With Format;' + char(13),'')
From
Master..Sysdatabases
Where
[Name] Not In ('tempdb')
and databasepropertyex ([Name],'Status') = 'online'

Execute(@ToExecute)

আমার ব্লগে আরও বিশদ রয়েছে: এসকিউএল সার্ভার এক্সপ্রেস ব্যাকআপগুলি কীভাবে স্বয়ংক্রিয় করবেন


আপনি কীভাবে শিডিয়ুল করবেন সে সম্পর্কে বিস্তারিত বলতে পারবেন?
ফ্র্যাঙ্ক ক্রুয়েজার

আমার ব্লগ পোস্ট পড়ুন দয়া করে। এটি আপনার যা জানা দরকার তা বিশদ করে।
গেটকিলার

আমি মনে করি প্রশ্নটি এমন কোনও কিছুর জন্য জিজ্ঞাসা করে যা এসকিউএল সার্ভারের বাইরে চলে ।
bzlm

@bzlm, আমি যেমন বলেছি। আমার ব্লগে এসকিউএল সার্ভারের বাইরে এটি কীভাবে করা যায় তার বিবরণ রয়েছে :)
গেটকিলার

4
@ গেটকিলার আপনার ব্লগ লিঙ্কটি কি এখনও বৈধ? আমি এটি খুলতে অক্ষম
যশ সরাইয়া

5

আমি এটি একটি মাইক্রোসফ্ট সমর্থন পৃষ্ঠায় পেয়েছি http://support.microsoft.com/kb/2019698

এটি দুর্দান্ত কাজ করে! এবং যেহেতু এটি মাইক্রোসফ্ট থেকে এসেছে, আমার মনে হচ্ছে এটি বেশ বৈধ।

মূলত দুটি পদক্ষেপ আছে।

  1. আপনার মাস্টার ডিবিতে একটি সঞ্চিত পদ্ধতি তৈরি করুন। এমএসএফ্ট লিঙ্কটি দেখুন বা এটি যদি এখানে ভাঙা যায় তবে দেখুন: http://pastebin.com/svRLkqnq
  2. আপনার টাস্ক শিডিয়ুলার থেকে ব্যাকআপ শিডিয়ুল করুন। আপনি প্রথমে একটি .bat বা .Cmd ফাইলে রাখতে চান এবং তারপরে সেই ফাইলটি নির্ধারণ করতে পারেন।

    sqlcmd -S YOUR_SERVER_NAME\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='C:\SQL_Backup\', @backupType='F'"  1>c:\SQL_Backup\backup.log            
    

অবশ্যই আপনার কম্পিউটারের নাম দিয়ে YOUR_SERVER_NAME প্রতিস্থাপন করুন বা allyচ্ছিকভাবে চেষ্টা করুন \ SQLEXPPress এবং নিশ্চিত করুন ব্যাকআপ ফোল্ডারটি বিদ্যমান। এই ক্ষেত্রে এটি সি: \ এসকিউএল_ব্যাকআপে রাখার চেষ্টা করছে


4
এটির মূল্যের জন্য, আমি ওলা.হালেনগ্রেন ডট কম থেকে প্রাপ্ত সামগ্রীর সাথে কনসার্টে উপরের পদ্ধতিটি ব্যবহার করে শেষ করেছি, যারা আমার মনে হয় ডিবিএ সম্প্রদায়ের মধ্যে খুব ভাল সম্মানিত। এটি একটি মোহন মত কাজ করে।
জন ডব্লিউ

5

আপনি অ্যাপেক্সএসকিউএল দ্বারা ব্যাকআপ অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন। যদিও এটি একটি জিইউআই অ্যাপ্লিকেশন, এটির সমস্ত বৈশিষ্ট্য সিএলআইতে সমর্থিত রয়েছে। হয় ওয়ান-টাইম ব্যাকআপ ক্রিয়াকলাপ সম্পাদন করা বা নিয়মিত ভিত্তিতে নির্দিষ্ট ডেটাবেসগুলিকে ব্যাক আপ করা এমন একটি কাজ তৈরি করা সম্ভব। আপনি স্যুইচ নিয়মাবলী এবং নিবন্ধগুলিতে নমুনা পরীক্ষা করতে পারেন:


4

আমি এমএসএসকিউএল ডাটাবেসগুলি অ্যাক্সেস করতে লিনাক্স / ইউনিক্স অবকাঠামোতে tsql ব্যবহার করছি। কোনও ফাইলে একটি টেবিল ডাম্প করার জন্য এখানে একটি সাধারণ শেল স্ক্রিপ্ট:

#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}

3

YouE স্যুইচ ঘোষণার সাথে সাথে আপনার যদি কোনও বিশ্বস্ত সংযোগ না থাকে তবে শেষ অবধি

নিম্নলিখিত কমান্ড লাইন ব্যবহার করুন

"[program dir]\[sql server version]\Tools\Binn\osql.exe" -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak'" -S [server] –U [login id] -P [password]

কোথায়

[প্রোগ্রাম দির] হল সেই ডিরেক্টরি যেখানে osql.exe বিদ্যমান

32 বিট ওএস সি তে: \ প্রোগ্রাম ফাইলগুলি \ মাইক্রোসফ্ট এসকিউএল সার্ভার \
Bit৪ বিট ওএস সি-তে: \ প্রোগ্রাম ফাইলগুলি (x86) \ মাইক্রোসফ্ট এসকিউএল সার্ভার \

[এসকিউএল সার্ভার সংস্করণ] আপনার এসকিএল সার্ভারের সংস্করণ ১১০ বা 100 বা 90 বা 80 সর্বাধিক সংখ্যার সাথে শুরু হয়

[সার্ভার] আপনার সার্ভারনেম বা সার্ভার আইপি

[লগইন আইডি] আপনার এমএস-এসকিএল সার্ভার ব্যবহারকারীর লগইন নাম

[পাসওয়ার্ড] প্রয়োজনীয় লগইন পাসওয়ার্ড


4
C:\tmpসার্ভারে বা স্থানীয় পথে পথ ?
কিকিনেট

ব্যাকআপগুলি সর্বদা সার্ভারের ডিস্কে সঞ্চিত থাকে, তাই সি:
mp

1

এসকিউএল এক্সপ্রেসে সমস্ত ব্যবহারকারীর ডাটাবেসের ব্যাক আপ দেওয়ার জন্য মাইক্রোসফ্টের উত্তর এখানে :

প্রক্রিয়াটি হ'ল: অনুলিপি, আটকানো এবং তাদের কোডটি কার্যকর করুন (নীচে দেখুন I've উপরে আমি কিছু অদ্ভুতভাবে অ-মন্তব্যযুক্ত লাইনগুলি মন্তব্য করেছি) আপনার ডাটাবেস সার্ভারে একটি প্রশ্নের জন্য। এর অর্থ আপনার প্রথমে এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ইনস্টল করা উচিত (বা অন্যথায় এসএসএমএসের সাথে আপনার ডাটাবেস সার্ভারের সাথে সংযুক্ত হওয়া)। এই কোড এক্সিকিউশনটি আপনার ডাটাবেস সার্ভারে একটি সঞ্চিত পদ্ধতি তৈরি করবে।

সঞ্চিত পদ্ধতিটি কার্যকর করতে একটি ব্যাচ ফাইল তৈরি করুন, তারপরে এই ব্যাচ ফাইলটির পর্যায়ক্রমিক (যেমন রাত্রে) রান নির্ধারণের জন্য টাস্ক শিডিয়ুলার ব্যবহার করুন। আমার কোড (যা কাজ করে) তাদের প্রথম উদাহরণের কিছুটা পরিবর্তিত সংস্করণ:

sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='E:\SQLBackups\', @backupType='F'" 

এটি আমার পক্ষে কাজ করেছিল এবং আমি এটি পছন্দ করি। প্রতিবার এটি চালানোর সময় নতুন ব্যাকআপ ফাইল তৈরি করা হয় are আপনাকে নিয়মিত ভিত্তিতে পুরানো ব্যাকআপ ফাইলগুলি মোছার একটি পদ্ধতি তৈরি করতে হবে। আমার ইতিমধ্যে একটি রুটিন রয়েছে যা এই ধরণের কাজ করে so অন্য কথায়, আমার ব্যাকআপ সিস্টেম থেকে পুনরুদ্ধার না করেই আমি সবসময় হাতে কয়েক দিনের মূল্য ব্যাকআপ রাখব।

আমি নীচে মাইক্রোসফ্টের সঞ্চিত পদ্ধতি তৈরির স্ক্রিপ্টটি পেস্ট করব:

--// Copyright © Microsoft Corporation.  All Rights Reserved.
--// This code released under the terms of the
--// Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)

USE [master] 
GO 

/****** Object:  StoredProcedure [dbo].[sp_BackupDatabases] ******/ 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

 
-- ============================================= 
-- Author: Microsoft 
-- Create date: 2010-02-06
-- Description: Backup Databases for SQLExpress
-- Parameter1: databaseName 
-- Parameter2: backupType F=full, D=differential, L=log
-- Parameter3: backup file location
-- =============================================

CREATE PROCEDURE [dbo].[sp_BackupDatabases]  
            @databaseName sysname = null,
            @backupType CHAR(1),
            @backupLocation nvarchar(200) 
AS 

       SET NOCOUNT ON; 

            DECLARE @DBs TABLE
            (
                  ID int IDENTITY PRIMARY KEY,
                  DBNAME nvarchar(500)
            )
           
             -- Pick out only databases which are online in case ALL databases are chosen to be backed up

             -- If specific database is chosen to be backed up only pick that out from @DBs

            INSERT INTO @DBs (DBNAME)
            SELECT Name FROM master.sys.databases
            where state=0
            AND name=@DatabaseName
            OR @DatabaseName IS NULL
            ORDER BY Name

 
           -- Filter out databases which do not need to backed up
 
           IF @backupType='F'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
                  END
            ELSE IF @backupType='D'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE IF @backupType='L'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE
                  BEGIN
                  RETURN
                  END
           

            -- Declare variables

            DECLARE @BackupName varchar(100)
            DECLARE @BackupFile varchar(100)
            DECLARE @DBNAME varchar(300)
            DECLARE @sqlCommand NVARCHAR(1000) 
        DECLARE @dateTime NVARCHAR(20)
            DECLARE @Loop int                  
                       
            -- Loop through the databases one by one

            SELECT @Loop = min(ID) FROM @DBs
       WHILE @Loop IS NOT NULL
      BEGIN
 
-- Database Names have to be in [dbname] format since some have - or _ in their name

      SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'


-- Set the current date and time n yyyyhhmmss format

      SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' +  REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')  
 

-- Create backup filename in path\filename.extension format for full,diff and log backups

      IF @backupType = 'F'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'D'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'L'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'
 

-- Provide the backup a name for storing in the media

      IF @backupType = 'F'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full backup for '+ @dateTime

      IF @backupType = 'D'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' differential backup for '+ @dateTime

      IF @backupType = 'L'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup for '+ @dateTime


-- Generate the dynamic SQL command to be executed

       IF @backupType = 'F' 
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
                  END

       IF @backupType = 'D'
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END

       IF @backupType = 'L' 
                  BEGIN
               SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END
 

-- Execute the generated SQL command

       EXEC(@sqlCommand)

 
-- Goto the next database

SELECT @Loop = min(ID) FROM @DBs where ID>@Loop
 

END

0

আপনি এই উদ্দেশ্যে ঠিক একটি ভিবি স্ক্রিপ্ট ব্যবহার করতে পারেন: https://github.com/ezrarieben/mssql-backup-vbs/

আপনার পছন্দমতো স্ক্রিপ্টটি কার্যকর করতে "টাস্ক শিডিয়ুলার" এ একটি কার্য নির্ধারণ করুন এবং এটি পুরো ডিবিটিকে একটি বেক ফাইলটিতে ব্যাকআপ করবে এবং আপনি যেখানে নির্দিষ্ট করবেন সেখানে এটি সংরক্ষণ করবে।


0
SET NOCOUNT ON;
declare @PATH VARCHAR(200)='D:\MyBackupFolder\'
 -- path where you want to take backups
IF OBJECT_ID('TEMPDB..#back') IS NOT NULL

DROP TABLE #back

CREATE TABLE #back
(
RN INT IDENTITY (1,1),
DatabaseName NVARCHAR(200)

)

INSERT INTO #back 
SELECT       'MyDatabase1'
UNION SELECT 'MyDatabase2'
UNION SELECT 'MyDatabase3'
UNION SELECT 'MyDatabase4'

-- your databases List

DECLARE @COUNT INT =0 ,  @RN INT =1, @SCRIPT NVARCHAR(MAX)='',  @DBNAME VARCHAR(200)

PRINT '---------------------FULL BACKUP SCRIPT-------------------------'+CHAR(10)
SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN

SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.bak'''+CHAR(10)+'WITH COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

 PRINT '---------------------DIFF BACKUP SCRIPT-------------------------'+CHAR(10)

  SET  @COUNT  =0 SET  @RN  =1 SET @SCRIPT ='' SET @DBNAME =''
 SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN
SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.diff'''+CHAR(10)+'WITH DIFFERENTIAL, COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

-10

আপনি যদি ডিবি ফাইলগুলি সন্ধান করতে পারেন ... "সিপি ডিবিফায়ার্স ব্যাকআপ /"

প্রায় নিশ্চিতভাবেই বেশিরভাগ ক্ষেত্রে পরামর্শ দেওয়া ঠিক নয় , তবে এটি সমস্ত গেটআপের মতো সহজ।


4
এসকিউএল সার্ভার চলমান থাকলেও এটি করবেন না, এমনকি যদি কিছু ব্যবহার না করে।
ক্রেগ ট্রেডার 18

6
সফলভাবে একটি ডাটাবেস ব্যাকআপ এবং পুনরুদ্ধার করতে এই পদ্ধতিটি ব্যবহারের প্রতিক্রিয়াগুলি অত্যন্ত পাতলা। এটি কেবলমাত্র ব্যাকআপ এবং পুনরুদ্ধার উভয়ের সময়ই কাজ করবে: কোনও এসকিউএল সার্ভার প্রক্রিয়া চলছে না, আপনি জড়িত সমস্ত বাইনারি ফাইল সনাক্ত এবং অনুলিপি করছেন, আপনি ঠিক একই সংস্করণ এবং এসকিউএল সার্ভারের প্যাচ-স্তরটি চালাচ্ছেন (এবং / অথবা উইন্ডোজ)। ব্যাকআপ ফাইল ফর্ম্যাটটি ক্রস-সংস্করণ বহনযোগ্য হিসাবে ডিজাইন করা হয়েছে; বাইনারি ডাটাবেস ফাইল নেই। এটি কেবলমাত্র এসকিউএল সার্ভার নয়, সমস্ত ডাটাবেসের ক্ষেত্রে সত্য। শুধু এটা করবেন না। সত্যিই। এটা করো না.
ক্রেগ ব্যবসায়ী

এই উত্তরটি 98.7% একটি রসিকতা। OTOH যদি আপনি কেবল একই সেটআপে পুনরুদ্ধার করতে থাকেন (ওরফে পুনরুদ্ধার / পুনর্নির্মাণ) এবং এটি বন্ধ হয়ে যেতে পারে (ওরফে এটি স্থানীয় দেব সার্ভার) এবং সম্ভবত আরও কিছু জিনিস ...
বিসিএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.