我已经有太宽松的执行DB备份关于我们内部的服务器。

是有一个简单的命令行程序,我可以使用备份的某些数据库在SQL服务器2005年?或是有一个简单的VBScript?

有帮助吗?

解决方案

要从命令行备份单个数据库,请使用 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"

您还需要阅读有关备份 RESTORE 一般程序

其他提示

我使用 ExpressMaint

要备份我所做的所有用户数据库,例如:

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)

我的博客上还有更多详细信息:如何自动执行SQL Server Express备份

我在Microsoft支持页面上找到了这个 http://support.microsoft.com/kb/2019698

效果很好!而且由于它来自微软,我觉得它非常合法。

基本上有两个步骤。

  1. 在主数据库中创建存储过程。请参阅msft链接或如果它已损坏,请尝试此处: 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            
    
  3. 显然,将YOUR_SERVER_NAME替换为您的计算机名称,或者选择尝试。\ SQLEXPRESS,并确保备份文件夹存在。在这种情况下,它试图将其放入c:\ SQL_Backup

你可以使用备份,应用程序通过ApexSQL.虽然这是一个GUI应用程序,它拥有所有其功能,支持在CLI。它是可以执行一时的备份操作,或建立一个工作,将回到了指定的数据库在定期的基础上。你可以检查开关规则,并举例说明在文章:

我在Linux / UNIX基础架构上使用tsql来访问MSSQL数据库。这是一个将表转储到文件的简单shell脚本:

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

最终如果您没有可信任的连接,因为&#8211; E开关声明

使用以下命令行

&quot; [program dir] \ [sql server version] \ Tools \ Binn \ osql.exe&quot; -Q“BACKUP DATABASE mydatabase TO DISK ='C:\ tmp \ db.bak'&quot; -S [服务器]&#8211; U [登录ID] -P [密码]

其中

[program dir]是osql.exe存在的目录

On 32bit OS c:\Program Files\Microsoft SQL Server\
On 64bit OS c:\Program Files (x86)\Microsoft SQL Server\

[sql server version]你的sql server版本110或100或90或80以最大数字开头

[server]您的服务器名称或服务器IP

[登录ID]你的ms-sql服务器用户登录名

[密码]所需的登录密码

以下是进行数据库备份的简单脚本。

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


-- specify database backup directory
SET @path = 'C:\Backup\'  


-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 


DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases


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

您可以使用我为此目的编写的VB脚本: https://github.com/ezrarieben/mssql-backup-vbs/

在“任务计划程序”中安排任务根据需要执行脚本,它会将整个数据库备份到BAK文件并将其保存到您指定的任何位置。

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

如果您能找到数据库文件......“cp DBFiles backup /”

几乎肯定不可取在大多数情况下,但它很简单,因为所有的启动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top