আমি আমাদের অভ্যন্তরীণ সার্ভারগুলিতে ডিবি ব্যাকআপ নেওয়ার ক্ষেত্রে খুব শিথিল হয়েছি।
এসকিউএল সার্ভার ২০০৫-এ কিছু নির্দিষ্ট ডাটাবেস ব্যাকআপ রাখতে আমি কি কোনও সাধারণ কমান্ড লাইন প্রোগ্রাম ব্যবহার করতে পারি? বা একটি সাধারণ ভিবিএস স্ক্রিপ্ট আছে?
আমি আমাদের অভ্যন্তরীণ সার্ভারগুলিতে ডিবি ব্যাকআপ নেওয়ার ক্ষেত্রে খুব শিথিল হয়েছি।
এসকিউএল সার্ভার ২০০৫-এ কিছু নির্দিষ্ট ডাটাবেস ব্যাকআপ রাখতে আমি কি কোনও সাধারণ কমান্ড লাইন প্রোগ্রাম ব্যবহার করতে পারি? বা একটি সাধারণ ভিবিএস স্ক্রিপ্ট আছে?
উত্তর:
কমান্ড লাইন থেকে একটি একক ডাটাবেস ব্যাকআপ করতে, 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"
আপনি ব্যাকআপ এবং পুনরুদ্ধার এবং সাধারণ পদ্ধতিতে ডকুমেন্টেশনও পড়তে চাইবেন ।
WITH FORMAT
স্টোরেজ মিডিয়ামটিকে ফর্ম্যাট করে: " ফরমেট বিকল্পটি কোনও বিদ্যমান সামগ্রী উপেক্ষা করে পুরো মিডিয়া সামগ্রীকে অবৈধ করে দেয় " "আপনি যা চান তা নিশ্চিত করুন।
osql.exe
ছিলC:\Program Files\Microsoft SQL Server\140\Tools\Binn\OSQL.EXE
আমি এক্সপ্রেসমেট ব্যবহার করি ।
সমস্ত ব্যবহারকারীর ডাটাবেসগুলি ব্যাকআপ করতে আমি উদাহরণস্বরূপ:
C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS
সমস্ত ডাটাবেস ব্যাকআপ করতে নিম্নলিখিত সময়সূচী:
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)
আমার ব্লগে আরও বিশদ রয়েছে: এসকিউএল সার্ভার এক্সপ্রেস ব্যাকআপগুলি কীভাবে স্বয়ংক্রিয় করবেন ।
আমি এটি একটি মাইক্রোসফ্ট সমর্থন পৃষ্ঠায় পেয়েছি http://support.microsoft.com/kb/2019698 ।
এটি দুর্দান্ত কাজ করে! এবং যেহেতু এটি মাইক্রোসফ্ট থেকে এসেছে, আমার মনে হচ্ছে এটি বেশ বৈধ।
মূলত দুটি পদক্ষেপ আছে।
আপনার টাস্ক শিডিয়ুলার থেকে ব্যাকআপ শিডিয়ুল করুন। আপনি প্রথমে একটি .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 এবং নিশ্চিত করুন ব্যাকআপ ফোল্ডারটি বিদ্যমান। এই ক্ষেত্রে এটি সি: \ এসকিউএল_ব্যাকআপে রাখার চেষ্টা করছে
আপনি অ্যাপেক্সএসকিউএল দ্বারা ব্যাকআপ অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন। যদিও এটি একটি জিইউআই অ্যাপ্লিকেশন, এটির সমস্ত বৈশিষ্ট্য সিএলআইতে সমর্থিত রয়েছে। হয় ওয়ান-টাইম ব্যাকআপ ক্রিয়াকলাপ সম্পাদন করা বা নিয়মিত ভিত্তিতে নির্দিষ্ট ডেটাবেসগুলিকে ব্যাক আপ করা এমন একটি কাজ তৈরি করা সম্ভব। আপনি স্যুইচ নিয়মাবলী এবং নিবন্ধগুলিতে নমুনা পরীক্ষা করতে পারেন:
আমি এমএসএসকিউএল ডাটাবেসগুলি অ্যাক্সেস করতে লিনাক্স / ইউনিক্স অবকাঠামোতে tsql ব্যবহার করছি। কোনও ফাইলে একটি টেবিল ডাম্প করার জন্য এখানে একটি সাধারণ শেল স্ক্রিপ্ট:
#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}
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 সর্বাধিক সংখ্যার সাথে শুরু হয়
[সার্ভার] আপনার সার্ভারনেম বা সার্ভার আইপি
[লগইন আইডি] আপনার এমএস-এসকিএল সার্ভার ব্যবহারকারীর লগইন নাম
[পাসওয়ার্ড] প্রয়োজনীয় লগইন পাসওয়ার্ড
C:\tmp
সার্ভারে বা স্থানীয় পথে পথ ?
এসকিউএল এক্সপ্রেসে সমস্ত ব্যবহারকারীর ডাটাবেসের ব্যাক আপ দেওয়ার জন্য মাইক্রোসফ্টের উত্তর এখানে :
প্রক্রিয়াটি হ'ল: অনুলিপি, আটকানো এবং তাদের কোডটি কার্যকর করুন (নীচে দেখুন 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
আপনি এই উদ্দেশ্যে ঠিক একটি ভিবি স্ক্রিপ্ট ব্যবহার করতে পারেন: https://github.com/ezrarieben/mssql-backup-vbs/
আপনার পছন্দমতো স্ক্রিপ্টটি কার্যকর করতে "টাস্ক শিডিয়ুলার" এ একটি কার্য নির্ধারণ করুন এবং এটি পুরো ডিবিটিকে একটি বেক ফাইলটিতে ব্যাকআপ করবে এবং আপনি যেখানে নির্দিষ্ট করবেন সেখানে এটি সংরক্ষণ করবে।
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
আপনি যদি ডিবি ফাইলগুলি সন্ধান করতে পারেন ... "সিপি ডিবিফায়ার্স ব্যাকআপ /"
প্রায় নিশ্চিতভাবেই বেশিরভাগ ক্ষেত্রে পরামর্শ দেওয়া ঠিক নয় , তবে এটি সমস্ত গেটআপের মতো সহজ।