SQL在磁盘上创建了一个备份设备

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL在磁盘上创建了一个备份设备相关的知识,希望对你有一定的参考价值。

USE [master]
GO
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk',
@logicalname = N'test_backup',
@physicalname = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\1.bak'
GO
以上各行命令麻烦各位大侠解释一下,知道多少说多少,当然是越详细越好,谢谢啦

USE [master] 使用master库
GO 执行
EXEC master.dbo.sp_addumpdevice 执行master库中的master.dbo.sp_addumpdevice 过程
@devtype = N'disk', 参数一:设备类型:硬盘
@logicalname = N'test_backup', 参数二:设备名称(逻辑名称):test_backup
@physicalname = N'C:\Program Files\Microsoft SQL Server\MSSQL.1 \MSSQL\Backup\1.bak' 参数三:物理名称(备份文件路径)
GO 执行
参考技术A master.dbo.sp_addumpdevice用法可参考

http://msdn.microsoft.com/zh-cn/worldwide/ms188409.aspx

这是系统中sp_addumpdevice存储过程的原型

USE [master]
GO
/****** 对象: StoredProcedure [sys].[sp_addumpdevice] 脚本日期: 12/10/2008 13:41:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [sys].[sp_addumpdevice] -- 1995/09/07 12:01
@devtype varchar(20), -- disk, tape, or virtual_device
@logicalname sysname, -- logical name of the device
@physicalname nvarchar(260), -- physical name of the device
@cntrltype smallint = null, -- obsolete: controller type - ignored.
@devstatus varchar(40) = null -- obsolete: device characteristics -ignored
as
declare @type_enum smallint -- devtype enumeration value
declare @returncode int
declare @devtypeIn varchar(20)
select @devtypeIn = @devtype
,@devtype = LOWER (@devtype collate Latin1_General_CI_AS)
-- An open txn might jeopardize a recovery.
set implicit_transactions off
if @@trancount > 0
begin
raiserror(15002,-1,-1,'sys.sp_addumpdevice')
return (1)
end

-- You must be SA to execute this sproc.
if (not is_srvrolemember('diskadmin') = 1)
begin
raiserror(15247,-1,-1)
return (1)
end

-- Check out the @devtype.
select @type_enum = (case @devtype
when 'disk' then 2
when 'tape' then 5
when 'virtual_device' then 7
end)

if @type_enum is null
begin
raiserror(15044,-1,-1,@devtypeIn)
return (1)
end

-- Check the args are not NULL.
if @logicalname is null
begin
raiserror(15045,-1,-1)
return(1)
end

-- Check to see that the @logicalname is valid.
EXEC @returncode = sys.sp_validname @logicalname
if @returncode <> 0
return(1)

if @physicalname is null
begin
raiserror(15046,-1,-1)
return(1)
end

-- Prohibit certain special english words from being logical names.
if (@logicalname IN ('disk', 'tape', 'virtual_device'))
begin
raiserror(15285,-1,-1,@logicalname)
return (1)
end

BEGIN TRANSACTION
-- Make sure that a device with @logicalname doesn't already exist.
-- Always turn on the dump status bit, ignore @skip_tape (not in use)
EXEC %%Device().NewDevice(Name = @logicalname, PhysicalName = @physicalname,
Type = @type_enum, Size = 0)
if @@error <> 0 -- duplicate logical name
begin
ROLLBACK TRANSACTION
raiserror(15026,-1,-1,@logicalname)
return (1)
end

-- Make sure physical file name would be unique among devices.
if (select count(*) from master.dbo.sysdevices where phyname = @physicalname) > 1
begin
ROLLBACK TRANSACTION
raiserror(15061,-1,-1,@physicalname)
return (1)
end

COMMIT TRANSACTION

return (0) -- sp_addumpdevice

恢复帐套时提示“已备份数据库的磁盘上结构版本为611.服务器支持版本539,无法还原或升级数据库。”

恢复帐套时提示“已备份数据库的磁盘上结构版本为611.服务器支持版本539,无法还原或升级数据库。”,该如何处理?

概述:
611是指sql 2005的版本,539是指sql 2000的版本,SQL 2005的数据库备份是不能在sql2000的数据库上还原的。直接安装SQL2005后再恢复该数据库使用。
参考技术A 两个方法1.升级现在的数据库到20082.找一台2008把数据库挂上,用导入导出的方法把数据导入到你这台2005上(步骤比较麻烦) 参考技术B 两个方法
1.升级现在的数据库到2008
2.找一台2008把数据库挂上,用导入导出的方法把数据导入到你这台2005上(步骤比较麻烦)

以上是关于SQL在磁盘上创建了一个备份设备的主要内容,如果未能解决你的问题,请参考以下文章

数据库如何备份

Raid与Lvm磁盘阵列

损坏磁盘阵列及修复和磁盘阵列+备份盘

使用RAID与LVM磁盘阵列技术

用SQL语句备份数据库

Raid 磁盘阵列