[设为首页] [加入收藏] [联系我们] [手机门户]
首页 审计资讯 政务公开 行政执法公示 交流互动 公共服务
  您当前所在位置: 首页 >> 审计资讯 >> 综合论坛-学习园地 >>正文
谈对大量SQL数据库备份文件批量整理
2016年05月11日 文章来源:国家审计署网站 信息提供:吉林省吉林市审计局

  
  2016年3月11日, 湖北省荆门市审计局许方义同志在审计署网站“理论探讨”栏目发表的《浅谈审计大数据分析快速定位表及字段方法》,引起了笔者的共鸣。本人刚好也参加了今年 年初署里统一安排的地方财政信息系统数据采集工作。当时县(市)、区级的财政报送的信息系统有一半都是扩展名为bak 的SQL数据库备份文件,地区合计有“近”“多”语义重复800多个。

  地区汇总接收人员,即要验证备份文件能否还原,又要对数据库及文件的命名规范进行检查,发现不符合规范的备份文件还要按通知要求更改。如果手工一个一个的还原检查,耗时耗力,难以完成。编写存储过程让计算机自行批量检查并完成数据库与备份同名的工作达到事半功倍的效果。

  首先定义存储过程:

create PROC PROC_RESTORE_BACKUP

@DIRECTORY NVARCHAR(1000), --bak文件所在路径变量

@PREDSTDIRECTORY NVARCHAR(600) –还原后数据库的存放路径变量

AS

DECLARE @DBNAME NVARCHAR(600)

SET @DBNAME=SUBSTRING(@DIRECTORY,LEN(@DIRECTORY)- CHARINDEX ('\',

REVERSE(@DIRECTORY )) + 2, CHARINDEX('\',REVERSE(@DIRECTORY ))- 5 )

CREATE TABLE #FILELISTINFO ---定义临时表存放RESTORE FILELISTONLY 读出的信息

(

LOGICALNAME NVARCHAR(128) NULL,

PHYSICALNAME NVARCHAR(260) NULL,

TYPE CHAR(1) NULL,

FILEGROUPNAME NVARCHAR(128) NULL,

FILESIZE BIGINT NULL ,

FILEMAXSIZE BIGINT NULL,

FILEID BIGINT,

CREATELSN NUMERIC(25,0),

DROPLSN NUMERIC(25,0) NULL,

UNIQUEID UNIQUEIDENTIFIER,

READONLYLSN NUMERIC(25,0) NULL,

READWRITELSN NUMERIC(25,0) NULL,

BACKUPSIZEINBYTES BIGINT,

SOURCEBLOCKSIZE INT,

FILEGROUPID INT,

LOGGROUPGUID UNIQUEIDENTIFIER NULL,

DIFFERENTIALBASELSN NUMERIC(25,0) NULL,

DIFFERENTIALBASEGUID UNIQUEIDENTIFIER,

ISREADONLY BIT,

ISPRESENT BIT,

TDETHUMBPRINT NVARCHAR(200)

)

DECLARE @FILELISTSQL VARCHAR(8000)

SET @FILELISTSQL = 'RESTORE FILELISTONLY FROM DISK=''' + @DIRECTORY + ''''

INSERT INTO #FILELISTINFO EXEC(@FILELISTSQL)

DECLARE @DLNAME NVARCHAR(128), @DPNAME NVARCHAR(260) --数据文件

DECLARE @LLNAME NVARCHAR(128), @LPNAME NVARCHAR(260) -- 逻辑文件

SELECT @DLNAME=LOGICALNAME,@DPNAME=PHYSICALNAME FROM #FILELISTINFO WHERE TYPE='D'

SELECT @LLNAME=LOGICALNAME,@LPNAME=PHYSICALNAME FROM #FILELISTINFO WHERE TYPE='L'

DECLARE @TODATAFILE NVARCHAR(1000), @TOLOGFILE NVARCHAR(1000)

SET @TODATAFILE = @PREDSTDIRECTORY + @DBNAME + '.MDF'

SET @TOLOGFILE = @PREDSTDIRECTORY + @DBNAME + '_LOG.LDF'

BEGIN TRY

-- 还原数据库,生成MDF,LDF文件,与原BAK文件同名

RESTORE DATABASE @DBNAME

FROM DISK = @DIRECTORY

WITH MOVE @DLNAME TO @TODATAFILE,

MOVE @LLNAME TO @TOLOGFILE,

REPLACE

--备份现数据库,产生的备份文件将覆盖原BAK文件

BACKUP DATABASE @DBNAME

TO DISK = @DIRECTORY

WITH FORMAT

END TRY

BEGIN CATCH

SELECT '-------------------------------------------------------------'

SELECT 'ERROR! @' + @DIRECTORY + '@ ' + ERROR_MESSAGE() --发生错误提示

END CATCH

DROP TABLE #FILELISTINFO

GO

接下来通过设定好的两个变量,利用游标遍历所设路径的文件,完成想要的工作。

USE test --打开事先建好的数据库

declare @strPath as varchar(50)

declare @a as varchar(200)

set @strPath='D:\bak文件' --bak文件所在的目录

SET NOCOUNT ON --调用存储过程不返回计数

declare @FileList table(id int identity(1,1) primary key,fillname varchar(200),death int,isfile int)

insert into @FileList

EXEC Master.dbo.xp_DirTree @strPath,1,1

DECLARE @FILENAME NVARCHAR(600)

DECLARE CRBAKLIST CURSOR FOR

SELECT [fillname] FROM @FileList

OPEN CRBAKLIST

FETCH NEXT FROM CRBAKLIST INTO @FILENAME

WHILE @@FETCH_STATUS = 0

BEGIN

print @strPath+'\' +@FILENAME

set @a = @strPath+'\' +@FILENAME

EXEC PROC_RESTORE_BACKUP @a,'D:\backup\' --存放还原后数据库的路径

FETCH NEXT FROM CRBAKLIST INTO @FILENAME

END

CLOSE CRBAKLIST

DEALLOCATE CRBAKLIST

  执行结果为原sql数据库文件被自动完成还原、改名、重新备份覆盖原文件等操作,操作过程中某个文件发生错误,产生提示。通过这个脚本可以达到对大量SQL数据库备份文件批量整理的目的。(庞子涛)

相关文章
. 土壤污染防治审计应重点关注的四个方面
. 浅谈还建房项目审计过程中发现的问题及对策建议
. 开展保障性安居工程审计需做好“四个加强”
. “四张图”试点乡镇领导干部自然资源资产离任审计
. 审计人员要有四种“意识”
. 运用SQL语句查找医院“分解住院”问题
. 土壤污染防治审计应重点关注的四个方面
. 开展地方政府性债务审计应紧盯四个环节
. 如何界定地方党委、政府主要负责人的经济责任
. 浅谈拆迁安置补偿跟踪审计中要注意的几个问题

关于本站 | 联系我们 | 法律声明 | 网站地图
河北省审计厅门户网站,河北省审计厅主办
冀ICP备06024325号-1
冀ICP备06024325号-3
冀公网安备 13010402000484
政府网站标识码 1300000034
河北省审计厅版权所有,本站文章未经授权不得转载
联系电话:86-0311-88606104