SQL2000 备份和恢复DTS(本地包)的方法

本文提供了一种备份和恢复SQL Server中DTS包的方法。通过存储过程实现DTS包到文件系统的备份,并能从文件恢复到SQL Server。此过程包括创建、加载及保存DTS包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备份也可以通过打开包另存为dts文件完成。

Save all DTS packages on server to files
Author Nigel Rivett


This will save all dts packages on the server to storage files.
It uses a trusted connect to access the package - just change the LoadFromSQLServer call to use a sql server connection.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[s_SavePackages]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[s_SavePackages]
GO

Create procedure s_SavePackages
@Path varchar(128)
as
/*

*/

set nocount on

declare @objPackage int
declare @PackageName varchar(128)
declare @rc int
declare @ServerName varchar(128)
declare @FileName varchar(128)
declare @FilePath varchar(128)
declare @cmd varchar(2000)

select @ServerName = @@ServerName ,
   @FilePath = @Path

if right(@Path,1) <> '\'
begin
   select @Path = @Path + '\'
end

-- create output directory - will fail if already exists but ...
select @cmd = 'mkdir ' + @FilePath
exec master..xp_cmdshell @cmd


create table #packages (PackageName varchar(128))
insert #packages
   (PackageName)
select distinct name
from msdb..sysdtspackages

select @PackageName = ''
while @PackageName < (select max(PackageName) from #packages)
begin
   select @PackageName = min(PackageName) from #packages where PackageName > @PackageName

   select @FileName = @FilePath + @PackageName + '.dts'

   exec @rc = sp_OACreate 'DTS.Package', @objPackage output
   if @rc <> 0
   begin
    raiserror('failed to create package rc = %d', 16, -1, @rc)
    return
   end

   exec @rc = sp_OAMethod @objPackage, 'LoadFromSQLServer' , null,
    @ServerName = @ServerName, @Flags = 256, @PackageName = @PackageName
   if @rc <> 0
   begin
    raiserror('failed to load package rc = %d, package = %s', 16, -1, @rc, @PackageName)
    return
   end
  
   -- delete old file
   select @cmd = 'del ' + @FileName
   exec master..xp_cmdshell @cmd, no_output
  
   exec @rc = sp_OAMethod @objPackage, 'SaveToStorageFile', null, @FileName
   if @rc <> 0
   begin
    raiserror('failed to save package rc = %d, package = %s', 16, -1, @rc, @PackageName)
    return
   end
  
   exec @rc = sp_OADestroy @objPackage
end
go

-----------------------------------------------------------------------------

恢复的储存过程:

This will load the dts package from structured storage file @FileName and save to sql server (msdb) as @PackageName.


if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[s_LoadPackageToServer]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[s_LoadPackageToServer]
GO

Create procedure s_LoadPackageToServer
@PackageName varchar(128) ,
@FileName varchar(500) ,
@Username varchar(100) ,
@Password varchar(100)
as
/*
exec s_LoadPackageToServer
   @PackageName = 'mypackage' ,
   @FileName = 'c:\dtspckgs\mypackage.dts' ,
   @Username = 'sa' ,
   @Password = 'pwd'
*/
declare @objPackage int
declare @rc int

   exec @rc = sp_OACreate 'DTS.Package', @objPackage output
   if @rc <> 0
   begin
    raiserror('failed to create package rc = %d', 16, -1, @rc)
    return
   end

   exec @rc = sp_OAMethod @objPackage, 'LoadFromStorageFile' , null,
    @UncFile = @FileName, @password = null
   if @rc <> 0
   begin
    raiserror('failed to load package rc = %d, package = %s', 16, -1, @rc, @PackageName)
    return
   end
  
   exec @rc = sp_OAMethod @objPackage, 'SaveToSQLServerAs' , null,
    @NewName = @PackageName, @ServerName = @@ServerName, @ServerUserName = @Username, @ServerPassword = @Password
   if @rc <> 0
   begin
    raiserror('failed to load package rc = %d, package = %s', 16, -1, @rc, @PackageName)
    return
   end
go

.版本 2 .程序集 窗口程序集1 .程序集变量 程序集_文件号, 整数型 .程序集变量 程序集_控制, 逻辑型 .程序集变量 程序集_缓存, 字节集 .程序集变量 程序集_读取位置, 整数型 .程序集变量 程序集_使用时间, 整数型 .子程序 __启动窗口_创建完毕 组合框_效验方式.加入项目 (“无效验”, 0) 组合框_效验方式.加入项目 (“奇效验”, 1) 组合框_效验方式.加入项目 (“偶效验”, 2) 组合框_效验方式.加入项目 (“标志效验”, 3) 组合框_效验方式.加入项目 (“空白效验”, 4) 组合框_效验方式.现行选中项 = 2 程序集_缓存 = 取空白字节集 (1028) .如果真 (文件是否存在 (取运行目录 () + “\CRC32.DLL”) = 假) .如果真 (写到文件 (取运行目录 () + “\CRC32.DLL”, #资源_CRC) = 假) 信息框 (“创建CRC32效验程序失败!”, #错误图标, ) 返回 () .如果真结束 .如果真结束 .子程序 __启动窗口_将被销毁 端口1.停止 () 关闭所有文件 () .子程序 _按钮_断开_被单击 端口1.停止 () 关闭所有文件 () 按钮_读取.禁止 = 真 按钮_断开.禁止 = 真 按钮_连接.禁止 = 假 .子程序 _端口1_数据到达 .参数 数据字节值, 整数型 .如果真 (程序集_控制 = 真) 程序集_缓存 = 程序集_缓存 + 到字节集 (到字节 (数据字节值)) .如果真 (取字节集长度 (程序集_缓存) = 1028) .如果真 (DLL命令1 (取字节集左边 (程序集_缓存, 1024), 1024) ≠ 取字节集数据 (取字节集右边 (程序集_缓存, 4), #整数型, )) 信息框 (“无法验证”, 0, ) 返回 () .如果真结束 插入字节集 (程序集_文件号, 取字节集左边 (程序集_缓存, 1024)) 进度条1.位置 = 进度条1.位置 + 1 程序集_缓存 = { } 程序集_读取位置 = 程序集_读取位置 + 4 .如果真 (程序集_读取位置 ≠ 53248) 端口1.发送数据 ({ 45, 0 } + 取字节集左边 (到字节集 (程序集_读取位置), 2) + { 191, 0, 4 }) 返回 () .如果真结束 信息框 (“文件输出完成! 用时” + 到文本 ((取启动时间 () - 程序集_使用时间) \ 1000) + “秒”, #信息图标, “成功”) 连续赋值 (假, 按钮_断开.禁止, 按钮_取消.禁止, 按钮_浏览.禁止, 按钮_读取.禁止) 返回 () .如果真结束 返回 () .如果真结束 .如果真 (程序集_控制 = 假 且 数据字节值 = 66) 端口1.发送数据 (到字节 (99)) 端口1.发送数据 (到字节 (10)) .如果真结束 .如果真 (程序集_控制 = 假 且 数据字节值 = 76) 端口1.发送数据 (到字节 (99)) 端口1.发送数据 (到字节 (10)) .如果真结束 .如果真 (程序集_控制 = 假 且 数据字节值 = 58) 端口1.发送数据 (到字节 (117)) 端口1.发送数据 (到字节 (112)) 端口1.发送数据 (到字节 (10)) .如果真结束 .如果真 (程序集_控制 = 假 且 数据字节值 = 10) 端口1.发送数据 (到字节 (30)) .如果真结束 .如果真 (程序集_控制 = 假 且 数据字节值 = 30) 程序集_控制 = 真 连续赋值 (假, 按钮_断开.禁止, 按钮_读取.禁止, 按钮_浏览.禁止, 按钮_取消.禁止) 按钮_连接.禁止 = 真 .如果真结束 .子程序 _按钮_连接_被单击 .如果真 (端口1.启动 () = 假) 信息框 (“串口无法打开!”, #错误图标, “端口错误”) 返回 () .如果真结束 连续赋值 (真, 按钮_连接.禁止, 按钮_读取.禁止) 连续赋值 (假, 按钮_断开.禁止, 按钮_取消.禁止) .子程序 _按钮_取消_被单击 结束 () .子程序 _按钮_读取_被单击 .如果真 (编辑框_文件名.内容 = “”) 信息框 (“请选择文件路径以及文件名!”, #错误图标, “选择文件”) 返回 () .如果真结束 程序集_文件号 = 打开文件 (编辑框_文件名.内容, #重写, ) .如果真 (程序集_文件号 = 0) 信息框 (“创建文件失败!”, #错误图标, ) 返回 ()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值