求助:无需DBCC CLONEDATABASE,生成仅含表架构和存储过程的BAK文件
替代DBCC CLONEDATABASE生成仅含表架构和存储过程的备份文件方案
方案1:通过生成架构脚本创建空库后备份
无需修改源库用户,操作直观易上手:
- 生成架构脚本
打开SSMS,右键源数据库DB_Full→ 任务 → 生成脚本;在向导中选择要导出的对象:勾选所有用户表(仅架构)、存储过程;在「设置脚本编写选项」中,设置「编写CREATE脚本」为True,「编写DROP脚本」为False,确保只导出架构定义;保存脚本到本地或直接在查询窗口执行。 - 创建并初始化空数据库
CREATE DATABASE [DB_SchemaAndSP]; GO -- 执行之前生成的架构脚本,创建所有表和存储过程
- 备份数据库
BACKUP DATABASE [DB_SchemaAndSP] TO DISK = 'D:\Backups\DB_SchemaAndSP_SchemaOnly.bak' WITH INIT, COMPRESSION; GO
方案2:使用T-SQL批量生成架构脚本(适合自动化场景)
如果需要自动化执行,可通过系统视图批量生成表和存储过程的CREATE语句:
生成存储过程脚本
SELECT 'CREATE PROCEDURE ' + QUOTENAME(s.name) + '.' + QUOTENAME(p.name) + ' AS ' + OBJECT_DEFINITION(p.object_id) AS ProcScript FROM sys.procedures p JOIN sys.schemas s ON p.schema_id = s.schema_id WHERE p.type = 'P';
生成表架构脚本
SELECT OBJECT_DEFINITION(t.object_id) AS TableScript FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id;
执行以上查询后,将结果中的脚本汇总,执行到新建的空库,再按方案1的备份步骤操作即可。
方案3:部分备份(针对特定场景)
若源库的表和存储过程集中在只读文件组内,可直接备份该文件组:
BACKUP DATABASE [DB_Full] FILEGROUP = 'Schema_FG' -- 替换为实际存储架构对象的文件组名称 TO DISK = 'D:\Backups\DB_Schema_FG.bak' WITH INIT, COMPRESSION; GO
此方法仅适用于架构对象集中存储的场景,通用性较弱。
以上方案均无需删除源库用户,可直接生成仅包含表架构和存储过程的备份文件,规避DBCC CLONEDATABASE的索引冲突问题。
内容的提问来源于stack exchange,提问作者Adalbert N
相关产品推荐
相关产品推荐

